اللقطة (Snapshot)
تُرسَل الحالة الحالية كاملة إلى عقدة متأخرة جدًا عن اللحاق بالسجل (مثل فور إعادة التشغيل) عبر RPC من FullSnapshot. داخل snapshot_bytes توجد البنية التالية، مُسلسلة بـ postcard.
| الحقل | المحتوى |
|---|---|
last_applied | آخر موضع سجل تعكسه هذه اللقطة |
last_membership | معلومات العضوية (تشكيل العُقد) |
token_seq | عدّاد إصدار رمز Fencing — مُكرَّر، لذا يبقى تزايد الرمز المطّرد قائمًا حتى عبر تغيير القائد |
locks | قائمة (key, token, remain_ms) — كل قفل محجوز وإيجاره المتبقي |
remain_msهو الإيجار المتبقي بالمللي ثانية وقت أخذ اللقطة. تستعيد العقدة التي تثبّتها وقت الانتهاء كـnow + remain_msبساعتها الخاصة — لا يُرسَل أي طابع زمني مطلق أبدًا، فلا يؤثر انحراف الساعات بين العُقد.- تُستخدم المللي ثانية هنا فقط لأجل الدقة (الوحدة الظاهرة للعميل هي الثانية).
- سجل Raft في الذاكرة (متطاير). تقلع العقدة المُعاد تشغيلها بحالة فارغة، ثم تلحق عبر تكرار سجل قرين أو هذه اللقطة — تبقى الحالة المُثبَّتة محفوظة ما دامت الأغلبية حية.
التدفق
القائد
عقدة متأخرة
فور إعادة التشغيل — تقلع بحالة فارغة
AppendEntries
متأخرة جدًا عن اللحاق بالسجل
FullSnapshot — الحالة كاملة في إطار واحد
التثبيت: استعادة كل قفل كـ now + remain_ms
عودة إلى إدخالات سجل AppendEntries العادية
استدعاء إجماع (RPC) عبر Raft
المصطلحات
- اللقطة (snapshot) — نسخة كاملة من الحالة عند لحظة معينة. تتيح لعقدة متأخرة تثبيت اللقطة ومتابعة إدخالات السجل التي بعدها فقط، بدلًا من إعادة تشغيل كل شيء من البداية.
- العضوية (membership) — قائمة العُقد المكوِّنة للعنقود ومعلومات دورها.