वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग · पाठ

स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन

Erlang OTP का उपयोग करके मापनीय, प्रत्यास्थ और अत्यधिक उपलब्ध वितरित प्रणालियाँ बनाने के डिज़ाइन पैटर्न और सर्वोत्तम तरीके सीखें

पाठ 3, कुल 4 में से12 चरण

स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन, CoddyKit पर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

किसी प्रणाली को सुदृढ़ क्या बनाता है?

इस पाठ में हम ऐसे Erlang/OTP अनुप्रयोगों की रूपरेखा तैयार करना सीखेंगे जो केवल कार्यात्मक ही नहीं, बल्कि विस्तार योग्य, लचीले और अत्यधिक उपलब्ध भी हों।

  • विस्तार-क्षमता: संसाधन बढ़ाकर बढ़ते कार्यभार को संभालने की क्षमता।
  • लचीलापन: विफलताओं से उबरने और कार्यक्षमता बनाए रखने की क्षमता।
  • उच्च उपलब्धता: यह सुनिश्चित करना कि प्रणाली अधिकतर समय चालू रहे।

ये विशेषताएँ किसी भी आधुनिक वितरित प्रणाली के लिए अत्यंत महत्वपूर्ण हैं।

सुदृढ़ रूपरेखा के लिए Erlang की बढ़त

Erlang और OTP ऐसे शक्तिशाली मूलभूत साधन प्रदान करते हैं जो इन रूपरेखा-लक्ष्यों का स्वाभाविक रूप से समर्थन करते हैं:

  • हल्की प्रक्रियाएँ: लाखों प्रक्रियाएँ एक साथ चल सकती हैं, जिससे सूक्ष्म स्तर पर पृथक्करण संभव होता है।
  • संदेश भेजना: प्रक्रियाएँ अतुल्यकालिक रूप से संवाद करती हैं, जिससे साझा स्थिति से जुड़ी समस्याएँ रुकती हैं।
  • दोष-सहिष्णुता: पर्यवेक्षक विफल प्रक्रियाओं को अपने-आप पुनः आरंभ करते हैं, जिससे प्रणालियाँ स्वयं-सुधार करने में सक्षम होती हैं।

सुदृढ़ संरचनाएँ बनाने के लिए इन क्षमताओं को समझना आवश्यक है।

स्थिति-रहित कार्यकर्ताओं के साथ क्षैतिज विस्तार

क्षैतिज विस्तार का अर्थ है कार्यभार को बाँटने के लिए अधिक मशीनें (नोड) जोड़ना। Erlang प्रक्रियाएँ इसके लिए उपयुक्त हैं।

  • कार्यकर्ता प्रक्रियाओं को स्थिति-रहित बनाएँ: वे इनपुट प्राप्त करें, कोई कार्य करें और आउटपुट लौटाएँ, लेकिन दीर्घकालिक डेटा अपने पास न रखें।
  • इससे किसी भी नोड पर उपलब्ध कोई भी कार्यकर्ता अनुरोध संभाल सकता है और माँग बढ़ने पर अधिक कार्यकर्ता जोड़ना आसान हो जाता है।

विस्तार-क्षमता के लिए डेटा विभाजन

जब आपका डेटा बहुत बढ़ जाता है, तो उसे एक ही स्थान पर रखना बाधा बन जाता है। डेटा विभाजन में डेटा को कई नोडों में बाँटा जाता है।

  • प्रत्येक नोड डेटा के एक उपसमुच्चय का प्रबंधन करता है।
  • इससे प्रतिस्पर्धा कम होती है और समानांतर पहुँच संभव होती है, जिससे पढ़ने और लिखने का प्रदर्शन काफी बेहतर होता है।
  • रणनीतियों में डेटा कुंजियों का हैश बनाना या श्रेणियों के आधार पर विभाजन करना शामिल है।

लचीलेपन के लिए रूपरेखा: 'इसे क्रैश होने दें'

'इसे क्रैश होने दें' का Erlang सिद्धांत लचीलेपन के लिए मूलभूत है। हर संभावित त्रुटि को रोकने का प्रयास करने के बजाय, आप ऐसी प्रणालियाँ बनाते हैं जो विफलताओं की अपेक्षा करती हैं और सहज रूप से उनसे उबरती हैं।

  • जब कोई प्रक्रिया क्रैश होती है, तो उसका पर्यवेक्षक इसका पता लगाकर उसे पुनः आरंभ करता है।
  • इससे आप अपने कोड के 'सामान्य सफल प्रवाह' पर ध्यान दे सकते हैं और जान सकते हैं कि अप्रत्याशित स्थितियों को OTP संभाल लेगा।

प्रक्रिया पृथक्करण और दोष क्षेत्र

Erlang प्रक्रियाएँ दृढ़ता से पृथक होती हैं, अर्थात एक प्रक्रिया की विफलता सामान्यतः दूसरी प्रक्रियाओं को प्रभावित नहीं करती। आप इसका उपयोग दोष क्षेत्र बनाने के लिए कर सकते हैं।

  • संबंधित प्रक्रियाओं को एक साझा पर्यवेक्षक के अधीन समूहित करें।
  • यदि समूह की कोई प्रक्रिया विफल होती है, तो पर्यवेक्षक केवल उसी प्रक्रिया या पूरे समूह को पुनः आरंभ कर सकता है और प्रभाव को सीमित रख सकता है।
  • इससे विफलताएँ पूरी प्रणाली में क्रमशः फैलने से रुकती हैं।

उच्च उपलब्धता: अतिरेक और विफलता-हस्तांतरण

उच्च उपलब्धता प्राप्त करने के लिए प्रणालियों में अतिरेक होना आवश्यक है। यदि कोई घटक विफल हो जाए, तो उसकी जगह लेने के लिए दूसरा घटक तैयार होना चाहिए।

  • सक्रिय-निष्क्रिय: एक प्राथमिक घटक अनुरोध संभालता है और एक बैकअप तैयार रहता है।
  • सक्रिय-सक्रिय: कई घटक एक साथ अनुरोध संभालते हैं, जिससे अतिरेक और भार-वितरण दोनों मिलता है।

Erlang प्रक्रिया लिंक और निगरानी का उपयोग करके उन्नत विफलता-हस्तांतरण तंत्र बनाने की सुविधा देता है।

लचीलेपन के लिए स्थान पारदर्शिता

Erlang स्थान पारदर्शिता का समर्थन करता है, अर्थात आप यह जाने बिना किसी प्रक्रिया को कॉल कर सकते हैं कि वह स्थानीय मशीन पर है या किसी दूरस्थ नोड पर।

  • प्रक्रियाओं को किसी नाम के साथ पंजीकृत किया जा सकता है (जैसे {local, my_server} या {global, my_global_server})।
  • आप नाम पर संदेश भेजते हैं और Erlang की वितरण प्रणाली मार्ग-निर्धारण संभालती है।

इससे वितरित प्रोग्रामिंग सरल होती है और सेवाओं को स्थानांतरित करना या विफलता-हस्तांतरण लागू करना आसान हो जाता है।

कार्य-वितरण और भार-संतुलन

उपलब्ध कार्यकर्ताओं के बीच कार्यों का कुशल वितरण विस्तार-क्षमता के लिए महत्वपूर्ण है। Erlang में आप भार-संतुलन की सरल रणनीतियाँ लागू कर सकते हैं:

  • एक समर्पित वितरक प्रक्रिया कार्य प्राप्त करती है।
  • वितरक फिर कार्यों को कार्यकर्ता प्रक्रियाओं के समूह में भेजता है, जिसके लिए क्रमिक चक्र या सबसे कम भार वाली रणनीति का उपयोग किया जा सकता है।
  • कार्यकर्ता स्थानीय हो सकते हैं या अलग-अलग नोडों में वितरित हो सकते हैं।

एक बुनियादी वितरित कार्यकर्ता समूह

आइए कार्यों को गतिशील रूप से शुरू किए गए कार्यकर्ताओं में बाँटने वाले एक सरल उदाहरण को देखें। यह विस्तार-क्षमता और लचीलेपन के एक मूल प्रतिरूप को दर्शाता है।

run/0 फ़ंक्शन वितरक शुरू करता है और कुछ कार्य भेजता है। प्रत्येक कार्य के लिए अपना कार्यकर्ता होता है।

-module(scalable_dispatcher_example).
-export([run/0, start_dispatcher/0, submit_task/2, worker_process/0]).

% Main entry point to run the example
run() ->
    io:format("Starting scalable worker pool example...~n"),
    DispatcherPid = start_dispatcher(),
    io:format("Dispatcher started: ~p~n", [DispatcherPid]),
    timer:sleep(100), % Give dispatcher a moment to start
    submit_task(DispatcherPid, "Process Order #1"),
    submit_task(DispatcherPid, "Generate Report #2"),
    submit_task(DispatcherPid, "Update User Profile #3"),
    submit_task(DispatcherPid, "Send Notification #4"),
    timer:sleep(1000), % Wait for tasks to complete
    io:format("All tasks submitted. Check worker output.~n").

% Starts the dispatcher process
start_dispatcher() ->
    spawn_link(fun() -> dispatcher_loop() end).

% Submits a task to the dispatcher
submit_task(DispatcherPid, Task) ->
    DispatcherPid ! {submit, Task}.

% Dispatcher loop
dispatcher_loop() ->
    receive
        {submit, Task} ->
            % For each task, spawn a new worker process
            WorkerPid = spawn_link(fun() -> worker_process() end),
            WorkerPid ! {do_work, Task, self()}, % Send task and dispatcher's PID
            io:format("Dispatcher ~p assigned task '~s' to Worker ~p~n",
                      [self(), Task, WorkerPid]),
            dispatcher_loop();
        {worker_finished, WorkerPid, Task} ->
            io:format("Dispatcher ~p received completion from Worker ~p for task '~s'~n",
                      [self(), WorkerPid, Task]),
            dispatcher_loop();
        _Other ->
            io:format("Dispatcher ~p received unknown message: ~p~n", [self(), _Other]),
            dispatcher_loop()
    end.

% Worker process loop
worker_process() ->
    receive
        {do_work, Task, DispatcherPid} ->
            io:format("Worker ~p processing task: '~s'~n", [self(), Task]),
            timer:sleep(rand:uniform(300)), % Simulate work time
            io:format("Worker ~p finished task: '~s'~n", [self(), Task]),
            % Report back to the dispatcher
            DispatcherPid ! {worker_finished, self(), Task};
        _Other ->
            io:format("Worker ~p received unknown message: ~p~n", [self(), _Other]),
            ok % Worker just exits if unknown message
    end.

रूपरेखा सिद्धांतों की जाँच

अब तक हमने जो सीखा है, उसके आधार पर विस्तार योग्य और लचीली Erlang/OTP प्रणालियाँ बनाने के लिए निम्नलिखित में से कौन-से प्रमुख रूपरेखा सिद्धांत हैं?

विस्तार करें और दृढ़ बने रहें

अब आपने Erlang/OTP के साथ विस्तार योग्य, लचीली और अत्यधिक उपलब्ध प्रणालियाँ बनाने के मूलभूत रूपरेखा प्रतिरूपों और सर्वोत्तम प्रथाओं का अध्ययन कर लिया है।

  • समवर्ती और पृथक घटकों के लिए Erlang की प्रक्रियाओं और संदेश भेजने की सुविधा का लाभ उठाएँ।
  • 'इसे क्रैश होने दें' सिद्धांत अपनाएँ और पर्यवेक्षकों के साथ दोष क्षेत्र बनाएँ।
  • क्षैतिज रूप से सोचें, डेटा का विभाजन करें और लचीले वितरण के लिए स्थान पारदर्शिता का उपयोग करें।

ये सिद्धांत आपको वितरित वातावरण की माँगों के लिए तैयार सुदृढ़ अनुप्रयोग बनाने में सक्षम बनाते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Erlang सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन” पाठ निःशुल्क है?

हाँ — वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन” में मैं क्या सीखूँगा?

Erlang OTP का उपयोग करके मापनीय, प्रत्यास्थ और अत्यधिक उपलब्ध वितरित प्रणालियाँ बनाने के डिज़ाइन पैटर्न और सर्वोत्तम तरीके सीखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. नेटवर्क विभाजनों को संभालना
  2. ETS और Mnesia से वितरित डेटा
  3. स्केलेबिलिटी और प्रत्यास्थता का डिज़ाइन
  4. नोड के बीच लोड संतुलन और फ़ेलओवर
← वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पर वापस जाएँ