RPC प्रकार
फ़्रेम में tag RPC प्रकार तय करता है। हर payload एक openraft टाइप है जिसे postcard से सीरियलाइज़ किया गया है।
| 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
लीडर की हार्टबीट रुकने का पता चला → उम्मीदवार (candidate) बना
Vote · वोट का अनुरोध
Vote · वोट का अनुरोध
हाँ
स्वयं सहित बहुमत → नया लीडर
AppendEntries (कोई एंट्री नहीं = हार्टबीट)
AppendEntries (कोई एंट्री नहीं = हार्टबीट)
सर्वसम्मति RPC (Raft)
नए चुने गए लीडर की पहली हार्टबीट पहुँचते ही, क्लस्टर सामान्य सेवा पर लौट आता है — कुल अंतराल आमतौर पर 0.5-1 सेकंड होता है। सामान्य संचालन के दौरान AppendEntries (लॉग प्रतिकृति) प्रवाह के लिए प्रतिकृत कमांड देखें।
शब्दावली
- लॉग प्रतिकृति (log replication) — लीडर अपने तय किए गए कमांड को एक क्रमबद्ध लॉग में बदलता है और फॉलोवर्स से इसे ज्यों का त्यों दर्ज करवाता है। एक ही लॉग को एक ही क्रम में लागू करने से हर नोड एक ही स्थिति में पहुँचता है।
- हार्टबीट (heartbeat) — एक आवधिक "मैं जीवित हूँ" संकेत। जब यह रुक जाता है, तो फॉलोवर्स यह निष्कर्ष निकालते हैं कि लीडर मर चुका है और एक चुनाव शुरू करते हैं।