أنواع RPC
يحدد tag في الإطار نوع RPC. جميع الحمولات (payload) هي أنواع openraft مُسلسلة بـ postcard.
| tag | الاسم | حمولة الطلب | حمولة الاستجابة | الدور |
|---|---|---|---|---|
1 | Vote | VoteRequest | VoteResponse | انتخاب القائد — يطلب مرشح تصويت العُقد الأخرى |
2 | AppendEntries | AppendEntriesRequest | AppendEntriesResponse | تكرار السجل + النبضة — ينشر القائد الأوامر المكرَّرة إلى الأتباع |
3 | FullSnapshot | صف (Vote, SnapshotMeta, snapshot_bytes) | SnapshotResponse | إرسال اللقطة كاملة إلى عقدة متأخرة |
- Vote — عندما يموت القائد، تتحول العقدة التي توقفت نبضتها إلى مرشح وتطلب أصواتًا؛ والعقدة التي تفوز بالأغلبية تصبح القائد الجديد.
- AppendEntries — يحمل القائد أوامر القفل المراد تثبيتها كإدخالات سجل. AppendEntries بلا إدخالات هو النبضة نفسها — لا توجد رسالة نبضة منفصلة.
- FullSnapshot — يرسل الحالة الحالية كاملة إلى عقدة متأخرة جدًا عن اللحاق بالسجل (أو عقدة انضمت للتو). تُرسَل كاملة في إطار واحد دون بث تدريجي.
التدفق — عند موت القائد
العقدة A
العقدة B
العقدة C
اكتشاف انقطاع نبضة القائد ← التحول إلى مرشح
Vote · طلب تصويت
Vote · طلب تصويت
موافقة
أغلبية تشمله ← قائد جديد
AppendEntries (بلا إدخالات = نبضة)
AppendEntries (بلا إدخالات = نبضة)
استدعاء إجماع (RPC) عبر Raft
بمجرد وصول أول نبضة من القائد المُنتخب حديثًا، يعود العنقود إلى الخدمة الطبيعية — الفجوة الكلية عادة 0.5 إلى 1 ثانية. راجع الأوامر المكرَّرة لتدفق AppendEntries (تكرار السجل) أثناء التشغيل العادي.
المصطلحات
- تكرار السجل (log replication) — يحوّل القائد أوامره المقررة إلى سجل مرتب ويجعل الأتباع يسجلونه حرفيًا. تطبيق نفس السجل بنفس الترتيب يوصل كل العُقد إلى نفس الحالة.
- النبضة (heartbeat) — إشارة دورية تعني "أنا حي". عندما تتوقف، يستنتج الأتباع أن القائد مات ويبدؤون انتخابًا.