Развёртывание без простоя и горячее обновление
Выпускайте новые релизы Elixir, не разрывая соединения, используя поэтапное развёртывание, проверки работоспособности и возможности горячего обновления кода в BEAM.
«Развёртывание без простоя и горячее обновление» — бесплатный урок Elixir & Phoenix: Scalable Backend Development на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Elixir & Phoenix: Scalable Backend Development, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Elixir & Phoenix: Scalable Backend Development содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Why Zero Downtime Matters
Restarting a server drops in-flight requests and live WebSocket connections. Zero-downtime deploys roll out new code while users stay connected and unaware.
Two Strategies
The BEAM supports two upgrade paths:
- Rolling deploys: start new nodes, drain old ones — simple and common
- Hot code upgrades: swap code inside a running node without restart — powerful but complex
Rolling Deploys
A rolling deploy boots a new release alongside the old, shifts traffic over via a load balancer, then shuts the old one down. Most teams use this because it is straightforward and tooling-friendly.
Health Check Endpoints
Load balancers need to know when a new node is ready. Expose a lightweight health endpoint that returns 200 only when the app can serve traffic.
get "/healthz", HealthController, :check
# def check(conn, _), do: send_resp(conn, 200, "ok")Connection Draining
Before stopping an old node, stop accepting new requests but let active ones finish. This draining avoids cutting users off mid-request.
config :my_app, MyAppWeb.Endpoint,
drainer: [shutdown: 30_000]Database Migrations Safely
Old and new code run side by side during a rolling deploy, so migrations must be backward compatible. Add columns before using them; never rename or drop in a single deploy.
Hot Code Upgrades
The BEAM can replace a module's code in a live system. :code.load_file/1 loads the new version; running processes switch over on their next function call.
:code.purge(MyModule)
:code.load_file(MyModule)Appups and Relups
For full hot upgrades of a release, the BEAM uses appup files (per-application upgrade instructions) and relup files (release-level). Tools like Distillery could generate these.
code_change Callbacks
A long-lived GenServer can migrate its state during a hot upgrade via the code_change/3 callback, reshaping old state into the new format.
def code_change(_old_vsn, state, _extra) do
{:ok, Map.put(state, :version, 2)}
endTrade-offs
Hot upgrades avoid any restart but are hard to test and reason about. Most teams prefer rolling deploys for predictability, reserving hot upgrades for embedded or always-on telecom-style systems.
Rollback Plans
Always have a rollback ready:
- Keep the previous release artifact
- Make migrations reversible or additive only
- Automate rollback in your deploy pipeline
Quick Check
Test your zero-downtime knowledge.
Recap
You learned zero-downtime deployment:
- Rolling deploys drain old nodes while new ones serve
- Health checks tell the load balancer when a node is ready
- Migrations must be backward compatible
- Hot code upgrades swap code live via appup/relup and
code_change - Always keep a rollback plan
Users stay connected through every release.
Изучай Elixir с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 12
- Уроки
- 48
Часто задаваемые вопросы
Урок «Развёртывание без простоя и горячее обновление» бесплатный?
Да — полный текст урока «Развёртывание без простоя и горячее обновление» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Elixir & Phoenix: Scalable Backend Development, подпишись на CoddyKit PRO. Курс Elixir & Phoenix: Scalable Backend Development содержит 4 уроков всего.
Чему я научусь в уроке «Развёртывание без простоя и горячее обновление»?
Выпускайте новые релизы Elixir, не разрывая соединения, используя поэтапное развёртывание, проверки работоспособности и возможности горячего обновления кода в BEAM. Ты практикуешь Elixir & Phoenix: Scalable Backend Development с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Elixir & Phoenix: Scalable Backend Development?
Предыдущий опыт не требуется. Elixir & Phoenix: Scalable Backend Development на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Развёртывание без простоя и горячее обновление»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Elixir & Phoenix: Scalable Backend Development?
Да. Каждый урок Elixir & Phoenix: Scalable Backend Development включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание выпусков с Mix Release
- Контейнеризация с Docker
- Стратегии развёртывания в облаке
- Развёртывание без простоя и горячее обновление