वितरित सर्वसम्मति प्रतिरूप
वितरित प्रणालियों में संगति बनाए रखने के लिए आवश्यक वितरित सर्वसम्मति एल्गोरिदम और प्रतिरूपों को समझें और लागू करें।
वितरित सर्वसम्मति प्रतिरूप, CoddyKit पर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
वितरित दुनिया में सहमति बनाना
कल्पना कीजिए कि कई कंप्यूटर (नोड) किसी एक परिणाम पर सहमत होना चाहते हैं, भले ही कुछ नोड विफल हो जाएँ या संदेश खो जाएँ। इस चुनौती को वितरित सहमति कहा जाता है।
डेटा की एकरूपता बनाए रखने और यह सुनिश्चित करने के लिए यह अत्यंत महत्वपूर्ण है कि प्रणाली के सभी हिस्से एक ही "सच्चाई" देखें। इसके बिना आपकी प्रणाली भ्रमित और असंगत स्थिति में पहुँच सकती है।
समन्वय की कठिन समस्या
सहमति प्राप्त करना कठिन है क्योंकि:
- नेटवर्क विलंब: संदेश तुरंत या सही क्रम में नहीं पहुँचते।
- नोड विफलताएँ: कोई कंप्यूटर किसी भी समय क्रैश हो सकता है।
- संदेश का खोना: नेटवर्क संदेशों को हटा सकता है।
जब संचार अविश्वसनीय हो और प्रतिभागी अचानक गायब हो सकते हों, तब आप यह कैसे सुनिश्चित करेंगे कि सभी सहमत हों?
जहाँ सहमति उपयोगी होती है
वितरित सहमति पैटर्न कई महत्वपूर्ण प्रणाली सुविधाओं की नींव हैं:
- नेता चुनाव: यह तय करना कि प्राथमिक समन्वयक कौन-सा नोड होगा।
- परमाण्विक कमिट: यह सुनिश्चित करना कि कोई लेन-देन या तो सभी नोड पर पूरी तरह पूरा हो या सभी पर पूरी तरह विफल हो।
- स्थिति मशीन प्रतिकरण: कई नोड पर डेटा या एप्लिकेशन स्थिति की एक जैसी प्रतियाँ बनाए रखना।
CAP और सहमति के बीच समझौते
CAP प्रमेय कहता है कि कोई वितरित प्रणाली तीन में से केवल दो गुणों की गारंटी दे सकती है: एकरूपता, उपलब्धता या विभाजन-सहिष्णुता।
सहमति अल्गोरिदम आमतौर पर एकरूपता और विभाजन-सहिष्णुता को प्राथमिकता देते हैं। इसका अर्थ है कि नेटवर्क विभाजन के दौरान असंगतियों को रोकने के लिए प्रणाली लेखन के लिए अनुपलब्ध हो सकती है।
एक सरल सहमति प्रोटोकॉल: 2PC
दो-चरणीय कमिट (2PC) प्रोटोकॉल वितरित नोड के बीच परमाण्विक लेन-देन प्राप्त करने का एक बुनियादी तरीका है। इसका उपयोग अक्सर डेटाबेस में किया जाता है।
यह पूरी तरह दोष-सहिष्णु नहीं है (समन्वयक विफल होने पर यह रुक सकता है), फिर भी अधिक जटिल सहमति अल्गोरिदम को समझने की दिशा में यह एक अच्छा वैचारिक प्रारंभिक चरण है।
समन्वयक: मतदान का संचालन
2PC में एक नोड समन्वयक की भूमिका निभाता है। उसका कार्य है:
- चरण 1 (तैयारी): सभी भाग लेने वाले नोड को "तैयारी" या "मतदान अनुरोध" संदेश भेजना।
- चरण 2 (कमिट): मतों के आधार पर, यदि सभी ने "हाँ" में मतदान किया हो तो "कमिट" संदेश भेजना, या यदि किसी ने "नहीं" में मतदान किया हो (या समय-सीमा समाप्त हो गई हो) तो "रद्द" संदेश भेजना।
प्रतिभागी: निर्णय लेना और कार्य करना
2PC में प्रत्येक प्रतिभागी नोड की ये जिम्मेदारियाँ होती हैं:
- चरण 1 (मतदान): "तैयारी" संदेश प्राप्त होने पर आवश्यक जाँच करना। यदि कमिट के लिए तैयार हो, तो "हाँ" का उत्तर देना और संसाधनों को लॉक करना। अन्यथा, "नहीं" का उत्तर देना।
- चरण 2 (कार्यवाही): "कमिट" प्राप्त होने पर लेन-देन को अंतिम रूप देना। यदि "रद्द" प्राप्त हो, तो सभी बदलाव वापस लेना और संसाधनों को अनलॉक करना।
Erlang समन्वयक: मतदान प्रक्रिया
आइए Erlang में एक बुनियादी 2PC समन्वयक का अनुकरण करें। यह प्रतिभागियों को शुरू करता है, एक संदेश भेजता है और उनके उत्तर एकत्र करता है। स्पष्टता के लिए यह उदाहरण त्रुटि प्रबंधन को सरल बनाता है।
ध्यान दें: यह उपयोग के लिए तैयार 2PC नहीं है, बल्कि संदेश प्रवाह का केवल एक उदाहरण है।
-module(coordinator).
-behaviour(gen_server).
-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-export([propose/2]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
{ok, []}.
propose(CoordinatorPid, Value) ->
gen_server:call(CoordinatorPid, {propose, Value}).
handle_call({propose, Value}, _From, _State) ->
% In a real system, participants would be registered or known
Pids = [
spawn(fun participant:start/0),
spawn(fun participant:start/0)
],
io:format("Coordinator: Proposing ~p to participants: ~p~n", [Value, Pids]),
% Phase 1: Prepare
Responses = [rpc:call(Pid, participant, prepare, [Value]) || Pid <- Pids],
FinalDecision =
case lists:all(fun(ok) -> true; (_) -> false end, Responses) of
true -> commit;
false -> abort
end,
io:format("Coordinator: All participants voted, decision: ~p~n", [FinalDecision]),
% Phase 2: Commit/Abort
[rpc:call(Pid, participant, FinalDecision, []) || Pid <- Pids],
{reply, FinalDecision, _State}.
handle_cast(_Msg, State) -> {noreply, State}.
handle_info(_Info, State) -> {noreply, State}.
terminate(_Reason, _State) -> ok.
code_change(_OldVsn, State, _Extra) -> {ok, State}.
% To run this example:
% 1. Compile both coordinator.erl and participant.erl
% 2. Start Erlang shell: erl
% 3. coordinator:start_link().
% 4. coordinator:propose(whereis(coordinator), "My Transaction").
% You should see output from both coordinator and participants.Erlang प्रतिभागी: मतदान और कार्यवाही
यहाँ बताया गया है कि कोई प्रतिभागी प्रक्रिया समन्वयक को कैसे उत्तर दे सकती है। यह पहले "मतदान" का अनुकरण करती है और फिर "कमिट" या "रद्द" निर्देश पर कार्य करती है।
इस सरल संस्करण में यह प्रतिभागी हमेशा 'ठीक' मतदान करता है, लेकिन वास्तविक स्थिति में यह अपनी स्थिति की जाँच करेगा।
-module(participant).
-behaviour(gen_server).
-export([start_link/0, start/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-export([prepare/1, commit/0, abort/0]).
start_link() ->
gen_server:start_link(?MODULE, [], []).
start() -> % Used by coordinator to spawn
{ok, Pid} = start_link(),
Pid.
init([]) ->
io:format("Participant ~p: Started.~n", [self()]),
{ok, #{} % State could hold transaction details
}.
prepare(_Value) ->
% In a real system, participant would check resources, lock them etc.
% For simplicity, always vote 'ok' here.
io:format("Participant ~p: Received prepare, voting 'ok'.~n", [self()]),
ok.
commit() ->
io:format("Participant ~p: Received commit, finalizing transaction.~n", [self()]),
ok.
abort() ->
io:format("Participant ~p: Received abort, rolling back transaction.~n", [self()]),
ok.
handle_call(_Msg, _From, State) ->
{reply, ok, State}. % Placeholder for any calls
handle_cast(_Msg, State) -> {noreply, State}.
handle_info(_Info, State) -> {noreply, State}.
terminate(_Reason, _State) -> ok.
code_change(_OldVsn, State, _Extra) -> {ok, State}.2PC की कमियाँ
समझाने के लिए उपयोगी होने के बावजूद, 2PC की कुछ महत्वपूर्ण कमियाँ हैं:
- विफलता का एकल बिंदु: यदि चरण 2 के दौरान समन्वयक क्रैश हो जाता है, तो प्रतिभागी अनिश्चितकाल तक प्रतीक्षा करते रह सकते हैं और संसाधनों को लॉक रख सकते हैं। इसे "रुकावट की समस्या" कहा जाता है।
- प्रदर्शन: इसमें संचार के कई चक्र आवश्यक होते हैं, जो अधिक विलंब वाले नेटवर्क में धीमे हो सकते हैं।
इन सीमाओं के कारण वास्तव में दोष-सहिष्णु प्रणालियों के लिए Paxos या Raft जैसे अधिक मजबूत, गैर-रुकावट वाले सहमति अल्गोरिदम आवश्यक हो जाते हैं।
त्वरित जाँच: सहमति की भूमिकाएँ
दो-चरणीय कमिट (2PC) प्रोटोकॉल में, चरण 1 (तैयारी) के दौरान प्रतिभागी नोड की मुख्य जिम्मेदारी क्या होती है?
पुनरावलोकन: सहमति महत्वपूर्ण है
हमने वितरित सहमति का अध्ययन किया और वितरित प्रणालियों में एकरूपता के लिए इसके महत्व तथा इससे उत्पन्न चुनौतियों को समझा।
हमने दो-चरणीय कमिट (2PC) को एक बुनियादी प्रोटोकॉल के रूप में देखा, समन्वयक और प्रतिभागियों की भूमिकाओं तथा इसकी प्रमुख सीमाओं को समझा। इन पैटर्न को बनाने के लिए Erlang का संदेश-प्रेषण एक मजबूत आधार है, लेकिन वास्तविक दोष-सहिष्णु सहमति के लिए अधिक उन्नत अल्गोरिदम आवश्यक हैं।
एआई शिक्षक के साथ Erlang सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 48
अक्सर पूछे जाने वाले प्रश्न
क्या “वितरित सर्वसम्मति प्रतिरूप” पाठ निःशुल्क है?
हाँ — वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “वितरित सर्वसम्मति प्रतिरूप” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“वितरित सर्वसम्मति प्रतिरूप” में मैं क्या सीखूँगा?
वितरित प्रणालियों में संगति बनाए रखने के लिए आवश्यक वितरित सर्वसम्मति एल्गोरिदम और प्रतिरूपों को समझें और लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“वितरित सर्वसम्मति प्रतिरूप” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- उच्च उपलब्धता के लिए डिज़ाइन
- वितरित सर्वसम्मति प्रतिरूप
- Erlang OTP के केस अध्ययन
- बैकप्रेशर और लोड विनियमन प्रतिरूप