স্ন্যাপশট
লগের মাধ্যমে ধরতে না পারার মতো বেশি পিছিয়ে থাকা নোডকে (যেমন পুনরায় চালুর ঠিক পরে) FullSnapshot RPC-এর মাধ্যমে সম্পূর্ণ বর্তমান স্টেট পাঠানো হয়। snapshot_bytes-এর ভেতরে postcard দিয়ে সিরিয়ালাইজড নিচের স্ট্রাকচার থাকে।
| ফিল্ড | বিষয়বস্তু |
|---|---|
last_applied | এই স্ন্যাপশট যে শেষ লগ পজিশন প্রতিফলিত করে |
last_membership | মেম্বারশিপ (নোড গঠন) তথ্য |
token_seq | ফেন্সিং-টোকেন ইস্যু কাউন্টার — প্রতিলিপিকৃত, তাই লিডার বদলে গেলেও |
| টোকেন একঘাতিতা বজায় থাকে | |
locks | (key, token, remain_ms)-এর তালিকা — দখলে থাকা প্রতিটি লক ও তার বাকি lease |
remain_msহলো স্ন্যাপশট তোলার মুহূর্তে বাকি থাকা lease, মিলিসেকেন্ডে। যে নোড এটি ইনস্টল করে সে নিজের ঘড়িতেnow + remain_msদিয়ে মেয়াদ শেষের সময় পুনরুদ্ধার করে — কোনো পরম টাইমস্ট্যাম্প কখনো পাঠানো হয় না, তাই নোডগুলোর মধ্যে ঘড়ির পার্থক্যের কোনো প্রভাব নেই।- নির্ভুলতার জন্য শুধু এখানেই মিলিসেকেন্ড ব্যবহৃত হয় (ক্লায়েন্ট-মুখী এককটি সেকেন্ড)।
- Raft লগ ইন-মেমরি (উদ্বায়ী)। পুনরায় চালু হওয়া একটি নোড খালি স্টেটে বুট করে, তারপর কোনো পিয়ারের লগ রেপ্লিকেশন বা এই স্ন্যাপশট দিয়ে ধরে ফেলে — সংখ্যাগরিষ্ঠ চালু থাকা পর্যন্ত কমিট করা স্টেট সংরক্ষিত থাকে।
প্রবাহ
লিডার
পিছিয়ে থাকা নোড
পুনরায় চালুর ঠিক পরে — খালি স্টেটে বুট
AppendEntries
লগ দিয়ে ধরার জন্য বড় বেশি পিছিয়ে
FullSnapshot — সম্পূর্ণ স্টেট একটি ফ্রেমে
ইনস্টল: প্রতিটি লক now + remain_ms দিয়ে পুনরুদ্ধার
এরপর থেকে আবার সাধারণ AppendEntries লগ
কনসেনসাস RPC (Raft)
পরিভাষা
- স্ন্যাপশট (snapshot) — নির্দিষ্ট একটি মুহূর্তের সম্পূর্ণ স্টেটের একটি পূর্ণ কপি। এটি পিছিয়ে থাকা নোডকে শুরু থেকে সবকিছু আবার চালানোর বদলে, স্ন্যাপশট ইনস্টল করে শুধু তার পরের লগ এন্ট্রি অনুসরণ করতে দেয়।
- মেম্বারশিপ (membership) — ক্লাস্টার গঠনকারী নোডের তালিকা ও তাদের ভূমিকার তথ্য।