معاملات Raft
| العنصر | القيمة |
|---|---|
| فاصل النبضة | 250 مللي ثانية |
| مهلة الانتخاب | 500-1000 مللي ثانية — يبدأ انتخاب قائد جديد خلال هذه النافذة بعد عطل القائد |
| عدد العُقد | 3 أو 5 (يُفرض عند تحميل الإعداد — أي عدد آخر يرفض الإقلاع) |
| معرّف العقدة | موضعها (cluster_self) في قائمة cluster_peers — لذا يجب أن يكون ترتيب القائمة متطابقًا في كل عقدة |
| الإقلاع (Bootstrap) | بعد 500 مللي ثانية من البدء، تُهيَّأ كل عقدة بنفس تشكيل العضوية — يُتجاهل عند الانضمام إلى عنقود مُهيَّأ بالفعل |
| تخزين السجل | في الذاكرة (متطاير) — تستعيد العقدة المُعاد تشغيلها حالتها عبر التكرار أو اللقطة |
| اكتشاف انتهاء lease | يفحص القائد كل 100 مللي ثانية ويثبّت Expire عبر الإجماع |
دقة مهلة wait | تُحسم مهلة الانتظار (T) أيضًا عند نفس النبضة كل 100 مللي ثانية — قد تصل متأخرة حتى 100 مللي ثانية |
لماذا 3 أو 5 عُقد
يتطلب التثبيت أغلبية. التشكيل الزوجي يزيد التكلفة فقط دون تحسين تحمّل الأعطال، لذا يرفضه الخادم.
| عدد العُقد | الأغلبية | الأعطال المتزامنة المحتملة |
|---|---|---|
| 2 | 2 | 0 — عطل واحد يوقف العنقود. لا أفضل من الوضع المفرد |
| 3 | 2 | 1 |
| 4 | 3 | 1 — كـ 3 عُقد تمامًا، بتكلفة أعلى فقط |
| 5 | 3 | 2 |
ملخص سلوك الأعطال
| الحالة | السلوك |
|---|---|
| طلب عميل إلى عقدة غير قائدة | M (عنوان القائد)، أو E no_leader إذا كان القائد غير معروف |
| عطل القائد | يُنتخب قائد جديد خلال 500-1000 مللي ثانية. الطلبات خلال تلك الفترة تُرجع E no_leader ← يعيد العميل المحاولة |
| أثناء تغيير القائد | تُلغى طلبات الحصول المعلَّقة بـ M/E no_leader، ويعيد العميل المحاولة مع القائد الجديد |
| إعادة تشغيل عقدة | تقلع بحالة فارغة ← تلحق عبر تكرار سجل قرين أو اللقطة |
| فقدان الأغلبية | يستحيل التثبيت ← تتوقف الكتابة (الأمان أولًا)، وتُستأنف تلقائيًا عند استعادة الأغلبية |
المصطلحات
- الأغلبية (quorum) — أكثر من نصف كل العُقد (2 من 3، أو 3 من 5). بما أن أي قرار يتطلب موافقة الأغلبية، لا يمكن لمجموعتين منقسمتين أبدًا تثبيت قرارين متعارضين في آن واحد.
- مهلة الانتخاب (election timeout) — المدة التي ينتظرها التابع دون نبضة قبل أن يستنتج أن القائد قد مات ويبدأ انتخابًا. عشوائية لكل عقدة لتقليل الترشح المتزامن.