gpt4 book ai didi

erlang - Erlang/OTP持续部署简介

转载 作者:行者123 更新时间:2023-12-04 15:22:07 31 4
gpt4 key购买 nike

注意:这是我的 previous question 的进化延续。关于类似的话题。

一段时间以来,我一直在寻找有关部署和更新 Erlang/OTP 版本(一组应用程序)的“最佳实践”,但我找不到任何直接的解决方案描述,但只有一些“相关信息”:

http://blog.equanimity.nl/blog/2013/06/04/continuous-integration-for-erlang-with-travis-ci/

https://www.youtube.com/watch?v=G0eBDWigORY

https://www.youtube.com/watch?v=0ZGHzI9F5YE

我所说的“直接解决方案”是对以下问题的回答:

给定一个生产 Erlang/OTP 集群,其中一个 Erlang/OTP 版本在多个 Erlang 节点上运行,这些节点充当高可用性 (24/7) REST API,如何定期将新代码推送到该生产集群?有没有像 git push heroku master 这样简单的最佳实践? with Heroku ?如果没有,在生产中不断重新部署和 Erlang/OTP 软件的最简单方法是什么?

我已阅读“Erlang/OTP in Action”一书以了解如何处理 Erlang/OTP 应用程序和版本,在我看来,简单的软件升级并不那么容易。使用 reltool 时您必须生成一个存档,将该存档移动到生产机器(scp?),在那里解压,运行 Erlang shell 并将新模块加载到 Erlang VM 中。

另外,《Learn You Some Erlang》一书states以下:

“...如果您可以避免整个过程(从现在起称为 relup)并通过重新启动 VM 和启动新应用程序来进行简单的滚动升级,我建议您这样做。”



“据说爱立信使用 relups 的部门测试它们的时间与他们自己测试应用程序的时间一样多。”

此外,这里是 another recommendation避免在生产环境中热交换 Erlang 的版本。

如果这是真的,那么我看不到“Erlang 热代码升级”的任何用处,因为我必须在每次升级时重新启动 VM。这让我对在生产中为 Erlang/OTP 定期部署新代码的稳健且经过测试的方法一无所知。

附言关于我的软件要求的一些说明。

  • 我正在编写一组没有任何 session 的 API 入口点,因此在软件更新期间无需维护 session 。
  • 无需分发 Erlang/OTP 版本,我正在使用内部定制产品。
  • 最佳答案

    Erlang 代码热升级在两种情况下很有用:

  • 当您有单个关键节点时,就无法停止。当您在交换机或路由器上运行 Erlang 时,可能就是这种情况,这对您的基础架构至关重要,或者当您 upgrade software on drone, while it is still flying .
  • 当您真的想保留运行节点的状态(并进行一些更改)时。以不需要的方式设计系统通常比处理复杂的升级更容易。

  • 最好避免热代码升级,因为它很难,但有时它是必要的。在那些时候,您将努力编写和测试升级。你会很高兴,它可以做到!

    在您的情况下,您有一个没有状态的节点集群,因此进行升级的最简单方法是从集群中删除节点,在服务器上上传新版本,启动节点并将其添加回集群。如果您配置了 application failovers在节点之间,这应该很容易使用 scp 编写脚本.在升级所有节点之前先在 5% 的机器上测试新版本的代码,然后再测试 20% 的机器也是一个好习惯。

    在某些情况下,您可以复制光束文件,转到 Erlang 控制台并输入:
    code:purge(my_module), code:load_file(my_module).

    不建议在日常工作中这样做,但是当您在远程机器上进行开发时,它可能会派上用场。例如,当您寻找锁争用时,当您有 16 个或更多核心时,它们可能会出现。您可以每次都创建整个版本并上传它,但这会减慢开发周期。这种使用热代码升级可能有点hacky,但是非常方便。

    关于erlang - Erlang/OTP持续部署简介,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948582/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com