0Pricing
Elixir & Phoenix: Scalable Backend Development · درس

النشر دون توقف والترقيات الفورية

أطلق إصدارات 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)}
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.

الأسئلة الشائعة

هل درس «النشر دون توقف والترقيات الفورية» مجاني؟

نعم — نص درس «النشر دون توقف والترقيات الفورية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء الإصدارات باستخدام Mix Release
  2. الحاويات باستخدام Docker
  3. استراتيجيات النشر السحابي
  4. النشر دون توقف والترقيات الفورية
← العودة إلى Elixir & Phoenix: Scalable Backend Development