इस प्रोजेक्ट के बारे में

हैशिकॉर्प/राफ्ट एक Go लाइब्रेरी है जो राफ्ट सहमति एल्गोरिदम लागू करती है, जो वितरित सिस्टम में प्रतिकृति राज्य मशीन बनाने के लिए आधार प्रदान करती है। यह लाइब्रेरी एक प्रतिकृति लॉग प्रबंधित करती है और कई नोड्स में सुसंगत राज्य बनाए रखने के लिए एक परिमित राज्य मशीन (FSM) अमूर्तता के साथ एकीकृत होती है। मुख्य क्षमताओं में शामिल हैं: - **नेता चुनाव**: नोड अनुयायी, उम्मीदवार और नेता राज्यों के बीच संक्रमण करते हैं। यदि टाइमआउट अवधि के लिए कोई प्रविष्टियाँ प्राप्त नहीं होती हैं, तो अनुयायी स्वयं को उम्मीदवार के रूप में पदोन्नत करते हैं, फिर साथियों से वोट मांगते हैं। कोरम वोट प्राप्त करने वाला उम्मीदवार नेता बन जाता है। - **लॉग प्रतिकृति**: नेता नई लॉग प्रविष्टियाँ (अपारदर्शी बाइनरी ब्लॉब्स) स्थायी भंडारण में जोड़ता है और उन्हें अनुयायियों के कोरम में प्रतिकृति करता है। एक बार प्रतिबद्ध होने पर, प्रविष्टियाँ FSM पर लागू की जाती हैं। - **स्वचालित स्नैपशॉटिंग**: असीमित लॉग वृद्धि को रोकने के लिए, राफ्ट स्वचालित रूप से वर्तमान FSM राज्य का स्नैपशॉट लेता है और लॉग को संकुचित करता है, पहले से लागू प्रविष्टियों को हटाता है। - **गतिशील पीयर प्रबंधन**: लाइब्रेरी क्लस्टर में नोड्स जोड़ने और हटाने का समर्थन करती है, जब तक कोरम उपलब्ध है। - **भंडारण बैकएंड**: प्राथमिक बैकएंड MDBStore एक अलग रिपॉजिटरी (raft-mdb) में है, और BoltDB का उपयोग करने वाला एक शुद्ध Go बैकएंड उपलब्ध है (raft-boltdb)। दोनों LogStore और StableStore कार्यान्वयन के रूप में काम कर सकते हैं। - **मेट्रिक्स उत्सर्जन**: armon/go-metrics (डिफ़ॉल्ट) या hashicorp/go-metrics (बिल्ड टैग के माध्यम से) के माध्यम से मेट्रिक्स का समर्थन करता है, जिसमें पुरानी armon लाइब्रेरी से माइग्रेशन पथ है। लाइब्रेरी को Go 1.16+ की आवश्यकता है और यह MPL 2.0 के तहत लाइसेंस प्राप्त है। यह राफ्ट पेपर 'इन सर्च ऑफ एन अंडरस्टैंडेबल कंसेंसस एल्गोरिदम' पर आधारित है और प्रदर्शन में Paxos के बराबर है, जिसमें लॉग कमिट विलंबता डिस्क I/O और आधे क्लस्टर तक नेटवर्क राउंड ट्रिप द्वारा सीमित है। अनुशंसित क्लस्टर आकार 3 या 5 नोड हैं, जो क्रमशः 1 या 2 नोड विफलताओं को सहन करते हैं जबकि उपलब्धता को अधिकतम करते हैं। लाइब्रेरी का उपयोग HashiCorp उत्पादों जैसे Consul और Nomad द्वारा वितरित समन्वय के लिए किया जाता है।