الإقليم ٢ — نقطة الانهيار الواحدة (SPOF) والتكرار (Redundancy)
النبذة
هذا أقصر الأقاليم وأكثرها أثراً. لا برامجَ جديدة هنا، بل مفهومٌ واحد هو محرّك المنهج كله، ويطلب منك المشروع صراحةً أن تشرحه: «explain system redundancy». إن أتقنتَ هذا الإقليم، ستشتقّ كل عنصرٍ قادمٍ بنفسك، لأن كل عنصرٍ قادمٍ هو إجابةٌ على SPOF.
خادمك الواحد (Task 0) يموت في الثالثة فجراً. سؤالان:
- كم نسبة المستخدمين المتأثّرين؟
- صمّم — على ورقة — أصغر تغييرٍ يجعل الجواب صفراً، بحيث لو مات أي خادمٍ بقي الموقع يعمل.
ستكتشف أن «التغيير الصغير» يفتح علبة أسئلةٍ كاملة: لو وضعتَ خادمين، من يقرّر إلى أيّهما يذهب المستخدم؟ وكيف يعرف أحدهما أن الآخر مات؟ اكتب محاولتك؛ بقية المنهج إجابةٌ منظَّمة على ما ستكتشفه هنا.
الدرس
ليش يوجد SPOF أصلاً — تعريفٌ دقيق
SPOF (Single Point Of Failure): أيّ عنصرٍ في النظام، إن تعطّل وحده، يتعطّل النظام كله.
الكلمة المفتاحية «وحده». ليس المهمُّ احتمال العطل — كل شيءٍ يعطل يوماً ما (أقراص، شبكات، طاقة، بشر ينشرون كوداً خاطئاً). المهمّ: هل عطلُ هذا العنصر وحده كافٍ لإسقاط كل شيء؟ في Task 0 كل عنصرٍ SPOF، لأن كل عنصرٍ متفرّد: الصندوق، الـ web server، قاعدة البيانات، حتى الـ DNS لو خادمٌ واحد. السؤال الذي تتدرّب عليه: امشِ على المخطّط عنصراً عنصراً واسأل «لو مات هذا وحده، هل يسقط الموقع؟». كل «نعم» = SPOF يجب أن تطارده.
ليش التكرار (redundancy) هو الجواب — وما ثمنه
إن كان عطل العنصر وحده هو المشكلة، فالحلّ بديهيٌّ بمجرد أن تسمّيه: لا تجعله وحده. ضع نسخةً ثانية يمكنها أن تحلّ محلّه. هذا هو التكرار (redundancy): وجود أكثر من نسخةٍ تؤدّي نفس الدور، بحيث لا يكون أيٌّ منها لا غنى عنه.
لكن — وهنا العدسة تعمل — التكرار يلد مشاكلَ جديدة، وهي بالضبط ما يملأ بقية المنهج:
- نسختان تعملان: من يوزّع المستخدمين بينهما؟ ⟵ يلد الـ load balancer (إقليم ٣).
- الموزِّع نفسه يصبح SPOF جديد! ⟵ يلد عنقود الموزّعات (إقليم ٧).
- البيانات لا تُستنسخ كالكود بسهولة (نسختان قد تتعارضان) ⟵ يلد **النسخ المتماثل / replication** (إقليم ٤).
- نسختان تعملان: كيف نعرف أن إحداهما ماتت؟ ⟵ يلد **الـ health checks والـ monitoring** (إقليم ٣ و٦).
لاحظ كيف أن مجرّد فهم «SPOF ⟵ redundancy ⟵ مشاكل التكرار» يجعلك تتنبّأ بكل الأقاليم القادمة. هذا هو معنى «الاشتقاق لا الحفظ».
ليش «التوفّر العالي» (High Availability) ليس مرادفاً للتكرار
التكرار وسيلة؛ التوفّر العالي (HA) هو الهدف: أن يبقى النظام عاملاً رغم الأعطال. ولأنّ للتكرار وجهين، يأتي مصطلحان ستُسألان عنهما لاحقاً (إقليم ٣)، نزرعهما الآن لأنهما يولدان مباشرةً من سؤال «النسختان: كلتاهما تعمل أم واحدةٌ تنتظر؟»:
- Active-Active: كل النسخ تخدم في آنٍ واحد (تكرار + توزيع حِمل معاً).
- Active-Passive: نسخةٌ تخدم، وأخرى تنتظر جاهزةً لتحلّ محلّها عند العطل (failover).
الفرق بينهما، ومتى تختار أيّاً، نفصّله حين نملك الموزّع. يكفيك الآن أن تراهما ابنين شرعيّين لمفهوم التكرار.
تحليل الأخطاء: أوهام التكرار
- «أضفتُ خادماً ثانياً، فلا SPOF بعد الآن.» ربما نقلتَ الـ SPOF لا أزلته. لو كان شيءٌ واحدٌ يوزّع عليهما (موزّع واحد) أو قاعدة بياناتٍ واحدةٌ يكتبان فيها، فذاك هو الـ SPOF الجديد. طارد دائماً العنصر الذي لا يزال متفرّداً.
- «التكرار مجاني.» كلا: ضِعف التكلفة، تعقيد المزامنة، واحتمال تعارض النسخ (خصوصاً في البيانات). التكرار مقايضة، لا هبة.
- «HA يعني صفر أعطال.» بل يعني صفر انقطاع للخدمة رغم وجود أعطال. الأجهزة لا تزال تموت؛ النظام فقط يخفي ذلك.
خذ مخطّط Task 0، وضع إصبعك على كل عنصرٍ بالترتيب (DNS, server box, Nginx, app server, MySQL). لكلٍّ منها اكتب: (أ) هل هو SPOF؟ (ب) ما أصغر تكرارٍ يزيله؟ (ج) ما التهديد الجديد الذي يولده ذلك التكرار؟ هذا الجدول الثلاثي هو خريطة طريقك في الأقاليم ٣–٧؛ احتفظ به وقارنه بما تبنيه لاحقاً.
الخلاصة — وصلٌ في الشجرة
- ثبّتَّ تعريف SPOF الدقيق: ما عطلُه وحده كافٍ لإسقاط الكل.
- اشتققتَ التكرار كجوابٍ حتميّ، وHA كهدف، وزرعتَ **Active-Active / Active-Passive** كوجهَيه.
- الأهمّ: رأيتَ أن التكرار يلد تهديداتٍ جديدة، فصارت بقية الأقاليم متوقَّعة لا مفاجئة.
البذرة المتروكة: قرّرنا أننا نريد نسختين تخدمان، لكن تركنا سؤالين معلّقين: من يوزّع المستخدمين على النسختين؟ وكيف يُخفى موتُ إحداهما؟ هذان السؤالان اسمهما معاً: load balancer. إليه ننتقل.
A SPOF (Single Point Of Failure) is any component whose failure alone takes the whole system down. In the single-server setup, everything is a SPOF.
Redundancy removes a SPOF by running more than one instance of a role, so no single one is indispensable — that's how we reach High Availability (HA): the system keeps serving despite failures.
The trade-off: redundancy costs more, adds synchronization complexity, and often just moves the SPOF (e.g., to whatever now distributes or coordinates the copies) — which is the next thing we make redundant.
وقفة الانضباط: «system redundancy» يُشرح في جملتين: running duplicate components so a single failure doesn't cause downtime. لا تَسرد أنواع الأعطال ما لم يُطلب.