在两个不同版本的Erlang vm之间进行实时应用程序迁移



我有Erlang应用程序运行在R13版本的Erlang VM上。我想在不停止应用程序的情况下将VM升级到R14。我如何在应用程序之间进行实时迁移不同版本的Erlang VM?

您需要两件事:

a)很多很多的计划。

b)在多个节点上运行的应用程序。

通常的技巧是关闭部分节点集群并将其升级到新版本。它应该能够与旧节点通信。当新版本的Erlang接管后,再对旧的节点进行碰撞。

Erlang不提供这种免费的升级。但它确实使它不那么痛苦了。

简而言之,你不能。

这是因为为新版本的BEAM模拟器(Erlang VM)编译的应用程序不能在旧版本的模拟器上正常运行。

或者更详细的:

升级应用程序而不停止它只能使用释放处理程序来完成。但是发布处理程序只能升级在VM中运行的应用程序,而不能升级VM本身。您仍然可以准备一个relup文件,但是当systools:make_relup/3注意到新版本使用不同版本的BEAM模拟器时,它将添加指令restart_new_emulator (Low-Level)以在升级期间重新启动节点(参见我前面提到的页面上对restart_new_emulator的描述)。

但是,您可以做的是在不中断服务的情况下升级Erlang VM(假设您的应用程序向外部方提供某些服务)。但这在很大程度上取决于应用程序的体系结构,并且没有通用的答案。

最新更新