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.
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)}
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.
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
- Creazione di release con Mix Release
- Containerizzazione con Docker
- Strategie di distribuzione nel cloud
- Deploy senza downtime e hot upgrade