स्नैपशॉट
लॉग से पकड़ने के लिए बहुत पीछे रह गए किसी नोड को (जैसे, रीस्टार्ट के तुरंत बाद) FullSnapshot RPC के ज़रिए पूरी वर्तमान स्थिति भेजी जाती है। snapshot_bytes के भीतर postcard से सीरियलाइज़ की गई निम्नलिखित संरचना होती है।
| फ़ील्ड | सामग्री |
|---|---|
last_applied | अंतिम लॉग स्थिति जिसे यह स्नैपशॉट दर्शाता है |
last_membership | सदस्यता (नोड संरचना) जानकारी |
token_seq | फेंसिंग-टोकन जारी करने वाला काउंटर — प्रतिकृत, इसलिए लीडर बदलने पर भी टोकन क्रमिकता बनी रहती है |
locks | (key, token, remain_ms) की एक सूची — हर धारित लॉक और उसकी शेष लीज़ |
remain_msस्नैपशॉट लिए जाने के क्षण की शेष लीज़ है, मिलीसेकंड में। इसे इंस्टॉल करने वाला नोड अपनी खुद की घड़ी परnow + remain_msके रूप में समाप्ति समय पुनर्स्थापित करता है — कोई पूर्ण (absolute) टाइमस्टैम्प कभी नहीं भेजा जाता, इसलिए नोड्स के बीच घड़ी के अंतर का कोई प्रभाव नहीं पड़ता।- सटीकता के लिए मिलीसेकंड का उपयोग केवल यहाँ किया जाता है (क्लाइंट-फ़ेसिंग इकाई सेकंड है)।
- Raft लॉग इन-मेमोरी (अस्थायी) है। एक रीस्टार्ट किया गया नोड खाली स्थिति से बूट होता है, फिर किसी पीयर की लॉग प्रतिकृति या इस स्नैपशॉट के ज़रिए पकड़ता है — कमिट की गई स्थिति तब तक बनी रहती है जब तक बहुमत जीवित है।
प्रवाह
लीडर
पीछे रह गया नोड
रीस्टार्ट के तुरंत बाद — खाली स्थिति से बूट होता है
AppendEntries
लॉग से पकड़ने के लिए बहुत पीछे
FullSnapshot — पूरी स्थिति एक फ़्रेम में
इंस्टॉल: हर लॉक को now + remain_ms के रूप में पुनर्स्थापित करता है
फिर से सामान्य AppendEntries लॉग एंट्री
सर्वसम्मति RPC (Raft)
शब्दावली
- स्नैपशॉट (snapshot) — किसी विशिष्ट क्षण की स्थिति की एक पूर्ण प्रति। यह पीछे रह गए नोड को शुरू से सब कुछ फिर से चलाने के बजाय, स्नैपशॉट इंस्टॉल करने और उसके बाद के केवल लॉग एंट्री का अनुसरण करने देता है।
- सदस्यता (membership) — क्लस्टर बनाने वाले नोड्स की सूची और उनकी भूमिका की जानकारी।