การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน
เผยแพร่รุ่นใหม่ของ Elixir โดยไม่ตัดการเชื่อมต่อ ด้วยการนำระบบขึ้นใช้งานแบบทยอยตรวจสอบสถานะ และความสามารถอัปเกรดโค้ดแบบร้อนของ BEAM
การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน เป็นบทเรียน Elixir & Phoenix: Scalable Backend Development ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Elixir & Phoenix: Scalable Backend Development ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Elixir & Phoenix: Scalable Backend Development มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน”
เผยแพร่รุ่นใหม่ของ Elixir โดยไม่ตัดการเชื่อมต่อ ด้วยการนำระบบขึ้นใช้งานแบบทยอยตรวจสอบสถานะ และความสามารถอัปเกรดโค้ดแบบร้อนของ BEAM คุณปฏิบัติ Elixir & Phoenix: Scalable Backend Development ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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
- กลยุทธ์การนำไปใช้งานบนคลาวด์
- การนำระบบขึ้นใช้งานโดยไม่หยุดทำงานและการอัปเกรดแบบร้อน