Erlang Hot Code Swapping против переведенных языков

Функция, широко рекламируемая в Erlang, - это возможность горячей замены модулей кода во время работы приложения, которая отображается как уникальная функция-убийца, недоступная на других языках.

Вот цитата из книги Джо Армстронга:

Большинство серверов выполняют фиксированную программу, и если вы хотите изменить поведение сервера, вам нужно остановить сервер, а затем перезапустить его с измененным кодом.

Хотя в контексте веб-разработки большинство языков поддерживают так называемую горячую замену кода, даже не называя его таковым. Это просто обновление кода и его публикация в сети с помощью git или решения для непрерывной интеграции.

Я знаю, что у Erlang много приложений в других областях, кроме веб, поэтому я уверен, что в этих случаях это имеет смысл.

Но имеет ли эта функция преимущества по сравнению с динамическими языками, используемыми в сети, такими как Python, Ruby, JavaScript? В каких случаях веб-разработка превосходит популярные веб-ориентированные языки?

2 ответа

Горячая замена кода в erlang предлагает больше, чем возможность обновить код (я не буду сравнивать с python, ruby ​​или javascript, у меня очень ограниченные знания о них):

  • Вы можете решить, для каждого узла, когда вы будете загружать новую версию кода
  • Тогда 2 версии кода будут присутствовать в ВМ, все запущенные процессы будут использовать старую версию каждого модуля, пока не произойдет следующий полный вызов этого модуля (Mod:Func/arity)
  • Если вы используете OTP-поведение, сначала будет вызван сервер (или fsm или gen_event) с их code_change call_back, получающий в параметрах старую версию модуля. Таким образом, можно проверить, есть ли возможность управления обновлением или нет, и выполнить любую необходимую операцию с состоянием Data, ETS, синхронизацией процесса... прежде чем действительно перейти к новому коду.
  • если вы не используете поведение OTP, все еще возможно получать сообщения в форме {system, From, Req} а затем позвоните sys:handle_system_msg/6 который в свою очередь вызовет code_change call_back.

Эта функция не предназначена для веб-разработки, так как сам Erlang не был создан специально для веб-разработки.

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

  • Код можно обновлять не только между вызовами, но и во время разговора
  • Вы можете предоставить явный путь обновления для состояния, связанного с вызовом
Другие вопросы по тегам