Erlang OTP: Distributed & Fault-Tolerant Systems Programming · Урок

Горячая замена кода и обновления без остановки

Узнайте, как Erlang обновляет работающий код без остановки системы и как механизмы OTP поддерживают обновления состояния без остановки.

Урок 4 из 413 шагов

«Горячая замена кода и обновления без остановки» — бесплатный урок Erlang OTP: Distributed & Fault-Tolerant Systems Programming на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Erlang OTP: Distributed & Fault-Tolerant Systems Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Erlang OTP: Distributed & Fault-Tolerant Systems Programming содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Zero-Downtime Upgrades

One of Erlang's signature features is hot code swapping: replacing a module's code while the system keeps running, with no restart and no dropped connections.

Two Code Versions

The VM keeps up to two versions of each module: current and old. Loading a third version purges the oldest.

Local vs External Calls

A local call (foo()) stays in the running version. An external/qualified call (?MODULE:foo()) jumps to the newest loaded version. This distinction drives upgrades.

loop(State) ->
    receive
      Msg ->
        NewState = handle(Msg, State),
        ?MODULE:loop(NewState)  % picks up new code
    end.

Loading New Code

You compile and load the new version with the code module or via the shell.

c(my_module).
code:load_file(my_module).

The code_change Callback

Stateful OTP behaviors like GenServer support a code_change/3 callback. OTP calls it during an upgrade so you can transform old state into the new format.

code_change(_OldVsn, State, _Extra) ->
    {ok, migrate_state(State)}.

Why State Migration Matters

If your new version stores state differently (say a tuple becomes a map), code_change bridges the gap so live processes do not crash on the new code.

migrate_state({old, A, B}) ->
    #{a => A, b => B}.

Release Upgrades

For whole-system upgrades, OTP uses appup and relup files that describe the steps to move from one release version to the next.

{"1.1.0",
 [{"1.0.0", [{update, my_server, {advanced, []}}]}],
 [{"1.0.0", [{update, my_server, {advanced, []}}]}]}.

Suspending Processes

During an advanced upgrade, OTP suspends the affected processes, applies code_change, then resumes them, ensuring no message is handled with mismatched state.

Purging Old Code

After an upgrade, processes still running old code can be checked and the old version purged once safe.

code:soft_purge(my_module).
% returns false if any process still runs old code

When to Use It

Hot upgrades shine for telecom-grade always-on systems. For many apps, a rolling restart of nodes is simpler. Choose based on your uptime requirements.

Best Practices

Key rules:

  • Always make the recursive loop call qualified (?MODULE:loop)
  • Implement code_change for any stateful behavior
  • Test upgrades in staging before production

Quick Check

Test your hot-swap knowledge.

Recap

You learned Erlang's live upgrade model.

  • The VM keeps two code versions
  • Qualified calls adopt new code
  • code_change/3 migrates state during OTP upgrades
  • appup/relup drive full release upgrades
Можно начать бесплатно

Изучай Erlang с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
12
Уроки
48

Часто задаваемые вопросы

Урок «Горячая замена кода и обновления без остановки» бесплатный?

Да — полный текст урока «Горячая замена кода и обновления без остановки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Erlang OTP: Distributed & Fault-Tolerant Systems Programming, подпишись на CoddyKit PRO. Курс Erlang OTP: Distributed & Fault-Tolerant Systems Programming содержит 4 уроков всего.

Чему я научусь в уроке «Горячая замена кода и обновления без остановки»?

Узнайте, как Erlang обновляет работающий код без остановки системы и как механизмы OTP поддерживают обновления состояния без остановки. Ты практикуешь Erlang OTP: Distributed & Fault-Tolerant Systems Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Erlang OTP: Distributed & Fault-Tolerant Systems Programming?

Предыдущий опыт не требуется. Erlang OTP: Distributed & Fault-Tolerant Systems Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Горячая замена кода и обновления без остановки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Erlang OTP: Distributed & Fault-Tolerant Systems Programming?

Да. Каждый урок Erlang OTP: Distributed & Fault-Tolerant Systems Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. GenStatem для управления состоянием
  2. GenEvent для обработки событий
  3. Пользовательские поведения OTP
  4. Горячая замена кода и обновления без остановки
← Назад к Erlang OTP: Distributed & Fault-Tolerant Systems Programming