gpt4 book ai didi

docker - Docker 上的 Erlang/Elixir 和热代码交换

转载 作者:IT老高 更新时间:2023-10-28 12:35:29 24 4
gpt4 key购买 nike

Erlang(根据定义,也就是 Elixir)的特性之一是您可以进行代码热交换。但是,这似乎与 Docker 不一致,您需要停止实例并使用包含新代码的新镜像重新启动新实例。这基本上似乎是每个人都在做的事情。

话虽如此,我也知道可以使用一个隐藏节点通过网络将更新分发给所有其他节点。当然,这样听起来像是自找麻烦,但是……

我的问题如下:有没有人尝试过为 Erlang/Elixir 建立一个允许热代码交换的基于 Docker 的基础架构并取得了相当大的成功?如果是,有哪些注意事项、注意事项和注意事项?

最佳答案

故事

想象一个系统来处理手机通话或移动数据访问(这就是创建 Erlang 的目的)。有网关服务器在通话期间维护用户 session ,或数据访问 session (我将其称为向前的 session )。只要 session 处于事件状态(用户已连接),这些服务器就会在内存中表示 session 。

现在有另一个系统可以计算向用户收取的通话费用或传输数据的费用(称为 PDF - Policy Decision Function)。两个系统的连接方式是网关服务器创建少量到 PDF 的 TCP 连接,如果这些 TCP 连接断开,它会丢弃用户 session 。网关一次可以处理几十万客户。每当发生需要向用户收费的事件(下一次数据传输,另一分钟的通话)时,网关都会通知 PDF 该事实,并且 PDF 从用户帐户中减去特定金额。当用户帐号为空时PDF通知网关断开通话(你的钱用完了,你需要充值)。

您的问题

最后让我们在这个背景下谈谈你的问题。我们要升级一个 PDF 节点并且该节点正在 Docker 上运行。我们用新版本的软件创建了一个新的 Docker 实例,但是我们无法关闭旧版本(有数十万客户在他们的通话中,我们无法断开他们的连接)。但是我们需要以某种方式将客户从旧 PDF 转移到新版本。因此,我们告诉网关节点创建与更新节点而不是旧 PDF 的任何新连接。客户可能很健谈,而且他们中的一些人可能有长时间运行的数据连接(下载 Windows 10 iso),因此整个操作需要 2-3 天才能完成。这是在出现严重错误时将软件的一个版本升级到另一个版本所需的时间。像这样的服务器可能有几十台,每台都处理数十万客户。

但是如果我们使用 Erlang 发布处理程序来代替呢?我们使用新版本的软件创建 relup 文件。我们对其进行正确测试并部署到 PDF 节点。每个节点都在原地升级——应用程序的内部状态被转换,节点正在运行新版本的软件。但最重要的是,与网关服务器的 TCP 连接并没有断开。因此,在我们升级系统的同时,客户可以愉快地继续通话或下载最新的 Windows iso。全部在 10 秒内完成,而不是 2-3 天。

答案

这是具有特定要求的特定系统的示例。 docker 和 Erlang's Release Handling是正交技术。您可以使用其中一个或两个,归结为以下几点:

  • 要求
  • 费用

您是否有足够的资源以可预测的方式测试这两种方法,并有足够的耐心来教导您的 Ops 团队,以便他们可以使用任何一种方法部署系统?如果测试设施耗资数百万英镑(因为需要硬件)并且一次只能使用这两种方法中的一种(因为测试周期需要几天时间)怎么办?

务实的方法可能是最初使用 Docker 部署节点,然后使用 Erlang release handler 升级它们(如果您首先需要使用 Docker)。或者,如果您的系统在升级期间不需要可用(如示例 PDF 系统所做的那样),您可能只是选择始终使用 Docker 部署新版本而忘记发布处理。或者,如果您需要快速可靠的即时更新并且 Docker 仅用于初始部署,您也可以坚持使用发布处理程序并忘记 Docker。我希望这会有所帮助。

关于docker - Docker 上的 Erlang/Elixir 和热代码交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173583/

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