اسنیپ شاٹ
جو نوڈ لاگ کے ذریعے پکڑنے کے لیے بہت پیچھے رہ گیا ہو (مثلاً دوبارہ آغاز کے فوراً بعد)، اسے FullSnapshot RPC کے ذریعے موجودہ حالت پوری بھیجی جاتی ہے۔ snapshot_bytes کے اندر درج ذیل ڈھانچہ ہوتا ہے، جو postcard سے سیریلائز کیا گیا ہے۔
| فیلڈ | مواد |
|---|---|
last_applied | یہ اسنیپ شاٹ جو آخری لاگ پوزیشن ظاہر کرتا ہے |
last_membership | ممبرشپ (نوڈ کی ترکیب) کی معلومات |
token_seq | فینسنگ ٹوکن جاری کرنے کا کاؤنٹر — نقل شدہ ہے، اس لیے قائد کی تبدیلی کے باوجود بھی ٹوکن کا یکسر بڑھاؤ برقرار رہتا ہے |
locks | (key, token, remain_ms) کی فہرست — ہر مصروف لاک اور اس کا بقیہ lease |
remain_msاسنیپ شاٹ لیے جانے کے لمحے کا بقیہ lease، ملی سیکنڈز میں ہے۔ اسے انسٹال کرنے والا نوڈ اپنی گھڑی کے مطابق میعاد ختم ہونے کا وقتnow + remain_msکے طور پر بحال کرتا ہے — کوئی مطلق ٹائم اسٹیمپ کبھی نہیں بھیجا جاتا، اس لیے نوڈز کے درمیان گھڑی کے فرق کا کوئی اثر نہیں ہوتا۔- درستگی کے لیے ملی سیکنڈز صرف یہاں استعمال ہوتے ہیں (کلائنٹ کے سامنے کی اکائی سیکنڈز ہے)۔
- Raft لاگ میموری میں (volatile) ہے۔ دوبارہ شروع ہونے والا نوڈ خالی حالت میں بوٹ ہوتا ہے، پھر کسی پیئر کی لاگ نقل یا اس اسنیپ شاٹ کے ذریعے پکڑتا ہے — کمٹ شدہ حالت اس وقت تک محفوظ رہتی ہے جب تک اکثریت زندہ ہے۔
بہاؤ
قائد
پیچھے رہ جانے والا نوڈ
دوبارہ آغاز کے فوراً بعد — خالی حالت میں بوٹ
AppendEntries
لاگ کے ذریعے پکڑنے کے لیے بہت پیچھے
FullSnapshot — پوری حالت ایک فریم میں
انسٹال: ہر لاک کو now + remain_ms کے طور پر بحال کرتا ہے
اس کے بعد دوبارہ عام AppendEntries لاگ اندراجات
اتفاق رائے RPC (Raft)
اصطلاحات
- snapshot — کسی مخصوص لمحے کی پوری حالت کی مکمل کاپی۔ یہ پیچھے رہ جانے والے نوڈ کو شروع سے سب کچھ دوبارہ چلانے کے بجائے، اسنیپ شاٹ انسٹال کر کے صرف اس کے بعد کے لاگ اندراجات کی پیروی کرنے دیتا ہے۔
- membership — کلسٹر بنانے والے نوڈز کی فہرست اور ان کے کردار کی معلومات۔