Elixir & Phoenix: Scalable Backend Development · Lezione

Deploy senza downtime e hot upgrade

Distribuisca nuove release Elixir senza interrompere le connessioni, usando deploy graduali, health check e le funzionalità di hot code upgrade della BEAM.

Lezione 4 di 413 passaggi

Deploy senza downtime e hot upgrade è una lezione Elixir & Phoenix: Scalable Backend Development gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Elixir & Phoenix: Scalable Backend Development, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Elixir & Phoenix: Scalable Backend Development include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

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)}
end

Trade-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.

Gratis per iniziare

Impara Elixir con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
12
Lezioni
48

Domande Frequenti

La lezione «Deploy senza downtime e hot upgrade» è gratuita?

Sì — il testo completo di «Deploy senza downtime e hot upgrade» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Elixir & Phoenix: Scalable Backend Development, passa a CoddyKit PRO. Il corso Elixir & Phoenix: Scalable Backend Development include 4 lezioni in totale.

Cosa imparerò in «Deploy senza downtime e hot upgrade»?

Distribuisca nuove release Elixir senza interrompere le connessioni, usando deploy graduali, health check e le funzionalità di hot code upgrade della BEAM. Eserciti Elixir & Phoenix: Scalable Backend Development con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Elixir & Phoenix: Scalable Backend Development?

Non è richiesta alcuna esperienza precedente. Elixir & Phoenix: Scalable Backend Development su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Deploy senza downtime e hot upgrade»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Elixir & Phoenix: Scalable Backend Development?

Sì. Ogni lezione Elixir & Phoenix: Scalable Backend Development include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Creazione di release con Mix Release
  2. Containerizzazione con Docker
  3. Strategie di distribuzione nel cloud
  4. Deploy senza downtime e hot upgrade
← Torna a Elixir & Phoenix: Scalable Backend Development