فی الحال ٹیسٹنگ جاری ہے: مکمل ہونے پر GitHub کوڈ کھول دیا جائے گا۔

Raft پیرامیٹرز

آئٹمقدر
ہارٹ بیٹ وقفہ500ms (cluster_heartbeat_ms)
بے جوابی قرار دینے کا وقت2000ms (cluster_election_timeout_ms) — ہارٹ بیٹ اتنی دیر رکے تو قائد مر چکا سمجھا جاتا ہے
انتخاب شروع ہونے کا اصل وقفہ1750-2000ms — ہر نوڈ پر بے ترتیب طور پر بکھرا ہوا تاکہ بیک وقت امیدوار بننا (split vote) نہ ہو۔ سب سے بڑی قدر ہی وہ بے جوابی کا وقت ہے جو سیٹ کیا گیا ہے
قائد کی ناکامی پر کلائنٹ کا رکناماپا گیا: بے جوابی کا وقت + 0.3-0.5 سیکنڈ (ڈیفالٹ پر تقریباً 2.3-2.5 سیکنڈ) — تشخیص کے بعد ایک بار redirect
نوڈز کی تعداد3 یا 5 (کنفیگ لوڈ پر نافذ — کوئی اور تعداد بوٹ ہونے سے انکار کرتی ہے)
نوڈ IDcluster_peers فہرست میں اپنی (cluster_self) پوزیشن — اسی لیے فہرست کی ترتیب ہر نوڈ پر یکساں ہونی چاہیے
Bootstrapآغاز کے 500ms بعد، ہر نوڈ ایک ہی ممبرشپ کے ساتھ initialize ہوتا ہے — اگر پہلے سے initialized کلسٹر میں شامل ہو رہا ہو تو نظر انداز
لاگ اسٹوریجمیموری میں (volatile) — دوبارہ شروع ہونے والا نوڈ نقل/اسنیپ شاٹ سے بحال ہوتا ہے
lease میعاد ختم ہونے کی تشخیصقائد ہر 100ms میں جانچتا ہے اور Expire کو اتفاقِ رائے سے کمٹ کرتا ہے
wait ٹائم آؤٹ کی باریکیانتظار کا ٹائم آؤٹ (T) بھی اسی 100ms ٹک پر طے ہوتا ہے — یہ 100ms تک دیر سے آ سکتا ہے
قائد بدلنے کی اطلاعقائد بدلنے پر جڑے ہوئے تمام کلائنٹس کو فوراً L بھیجا جاتا ہے

ہارٹ بیٹ اور بے جوابی کا وقت منتخب کرنا

دونوں قدروں کو ترتیب کے cluster_heartbeat_ms اور cluster_election_timeout_ms سے ایڈجسٹ کیا جاتا ہے۔ بے جوابی کا وقت (T) ہی وہ دورانیہ ہے جتنی دیر قائد کی ناکامی پر سروس رکی رہتی ہے؛ اس کے برعکس اگر یہ ضرورت سے زیادہ چھوٹا ہو تو زندہ قائد کو مردہ سمجھ کر غیر ضروری انتخابات ہونے لگتے ہیں۔

ہارٹ بیٹ / Tتشخیص کا وقفہقائد kill پر بدترین تاخیر (ماپی گئی)تجویز کردہ ماحول
100ms / 600ms450-600msتقریباً 0.9 سیکنڈایک ہی ریک·ایک ہی AZ، بہت مستحکم latency
100ms / 1000ms750-1000msتقریباً 1.2 سیکنڈایک ہی AZ
250ms / 2500ms1875-2500msتقریباً 2.8 سیکنڈملٹی-AZ
500ms / 2000ms1750-2000msتقریباً 2.4 سیکنڈڈیفالٹ — ملٹی-AZ میں توازن
500ms / 5000ms3750-5000msتقریباً 5.3 سیکنڈکراس-ریجن، یا ایسا ماحول جہاں latency بہت اتار چڑھاؤ کرے
  • عام حالات میں پروسیسنگ کی تاخیر ان قدروں سے غیر متعلق ہے (ماپے گئے p50 میں کوئی تبدیلی نہیں) — یہ صرف ناکامی کے وقت بحالی کا دورانیہ طے کرتی ہیں۔
  • follower کے مرنے کی صورت میں کسی بھی قدر پر کلائنٹ متاثر نہیں ہوتا۔ اوپر والی تاخیر صرف قائد کے مرنے پر ہوتی ہے۔
  • پابندیاں: cluster_election_timeout_ms کم از کم 600ms، اور ہارٹ بیٹ کا کم از کم 4 گنا ہونا چاہیے۔ (لوڈ کے دوران ایک بار کی scheduling تاخیر دو ہارٹ بیٹس مکمل نگل جانے کا مشاہدہ کیا گیا ہے۔)

نوڈز کی تعداد 3 یا 5 کیوں ہے

کمٹ کے لیے اکثریت درکار ہے۔ جفت تعداد کی ترتیب صرف لاگت بڑھاتی ہے بغیر خرابی برداشت کرنے کی صلاحیت بڑھائے، اس لیے سرور اسے مسترد کرتا ہے۔

نوڈز کی تعداداکثریتبیک وقت برداشت کی جانے والی ناکامیاں
220 — ایک ناکامی سے کلسٹر رک جاتا ہے۔ سنگل موڈ سے بہتر نہیں
321
431 — 3 نوڈز جیسا ہی، بس لاگت زیادہ
532

ناکامی کے رویے کا خلاصہ

صورتحالرویہ
غیر-قائد نوڈ کو کلائنٹ کی درخواستM (قائد کا پتہ)، یا اگر قائد معلوم نہ ہو تو E no_leader
قائد کی ناکامی500-1000ms میں نیا قائد منتخب۔ اس دوران درخواستیں E no_leader پاتی ہیں → کلائنٹ دوبارہ کوشش کرتا ہے
قائد کی تبدیلی کا لمحہزیر التوا حصول کی درخواستیں M/E no_leader سے صاف کی جاتی ہیں، اور کلائنٹ نئے قائد کے خلاف دوبارہ کوشش کرتا ہے
نوڈ کا دوبارہ آغازخالی حالت میں بوٹ → پیئر کی لاگ نقل/اسنیپ شاٹ سے پکڑتا ہے
اکثریت کا نقصانکمٹ ناممکن → تحریر رک جاتی ہے (حفاظت پہلے)، اکثریت بحال ہوتے ہی خودکار طور پر دوبارہ شروع

اصطلاحات

  • quorum — کل نوڈز کے نصف سے زیادہ (3 میں سے 2، یا 5 میں سے 3)۔ چونکہ کسی بھی فیصلے کے لیے quorum کی رضامندی درکار ہے، دو الگ ہو جانے والے گروہ کبھی بیک وقت متضاد فیصلے کمٹ نہیں کر سکتے۔
  • election timeout — وہ وقت جس تک ایک فالوور بغیر ہارٹ بیٹ کے انتظار کرتا ہے اس سے پہلے کہ یہ نتیجہ اخذ کرے کہ قائد مر چکا ہے اور انتخاب شروع کرے۔ ہر نوڈ کے لیے بے ترتیب (randomized) ہوتا ہے تاکہ بیک وقت امیدوار بننے کا امکان کم ہو۔