Прямая миграция приложений между двумя разными версиями виртуальных машин Erlang - PullRequest
3 голосов
/ 20 августа 2011

У меня есть приложение Erlang, работающее на R13 версии Erlang VM.Я хочу обновить ВМ до R14 без остановки приложения.Как я могу сделать живую миграцию приложения между различными версиями Erlang VM?

Ответы [ 2 ]

4 голосов
/ 20 августа 2011

Вам нужно две вещи:

а) Много-много планирования.

b) Приложение, работающее на нескольких узлах.

Обычный трюк - убрать часть кластера узлов и обновить ее до новой версии. Он должен иметь возможность общаться со старыми узлами. Затем поднимите старые узлы, когда новая версия Erlang вступит во владение.

Erlang не предоставляет такого рода обновления бесплатно. Это делает его гораздо менее болезненным.

0 голосов
/ 10 февраля 2016

Короткий ответ, вы не можете.

Это связано с тем, что приложения, скомпилированные для новой версии эмулятора BEAM (Erlang VM), не будут работать должным образом на старых версиях эмулятора.

Или более подробно:

Обновление приложений без остановки может быть выполнено только с помощью release handler . Но обработчик релиза может обновлять только приложения, работающие на ВМ, но не саму ВМ. Вы все еще можете подготовить файл relup, но когда systools: make_relup / 3 заметит, что новый выпуск использует другую версию эмулятора BEAM, он добавит инструкцию restart_new_emulator (Low-Level) в перезапустите узел во время обновления (см. описание для restart_new_emulator на на странице, о которой я упоминал ранее ).

Однако вы могли бы обновить виртуальную машину Erlang без прерывания обслуживания (при условии, что ваше приложение предоставляет какую-то услугу внешней стороне). Но это очень сильно зависит от архитектуры вашего приложения и не имеет общего ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...