RPC ধরন
ফ্রেমের tag RPC-এর ধরন নির্ধারণ করে। প্রতিটি payload-ই postcard দিয়ে সিরিয়ালাইজড একটি openraft টাইপ।
| tag | নাম | অনুরোধ payload | সাড়া payload | ভূমিকা |
|---|---|---|---|---|
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)
নতুন নির্বাচিত লিডারের প্রথম হার্টবিট পৌঁছানোর মুহূর্ত থেকেই ক্লাস্টার স্বাভাবিক সেবায় ফিরে আসে — মোট ফাঁক সাধারণত ০.৫-১ সেকেন্ড। স্বাভাবিক পরিচালনার সময়কার AppendEntries (লগ রেপ্লিকেশন) প্রবাহের জন্য দেখুন প্রতিলিপিকৃত কমান্ড।
পরিভাষা
- লগ রেপ্লিকেশন (log replication) — লিডার তার সিদ্ধান্তকৃত কমান্ডগুলোকে একটি ক্রমবদ্ধ লগে পরিণত করে ফলোয়ারদের হুবহু রেকর্ড করায়। একই লগ একই ক্রমে প্রয়োগ করলে সব নোড একই স্টেটে পৌঁছায়।
- হার্টবিট (heartbeat) — "আমি বেঁচে আছি" জানানোর পর্যায়ক্রমিক সংকেত। এটি থেমে গেলে ফলোয়াররা লিডার মারা গেছে ধরে নিয়ে নির্বাচন শুরু করে।