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

हॉट कोड लोडिंग और अपग्रेड

Erlang की हॉट कोड लोडिंग की अनूठी क्षमता का अन्वेषण करें और चल रही प्रणालियों में बिना रुकावट लाइव सॉफ़्टवेयर अपग्रेड करें

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

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

हॉट कोड लोडिंग क्या है

Erlang की हॉट कोड लोडिंग एक विशिष्ट सुविधा है! इसकी मदद से आप किसी चल रहे अनुप्रयोग को रोके बिना उसका कोड अपडेट कर सकते हैं। कल्पना कीजिए कि किसी वेबसाइट का बैकएंड उपयोगकर्ताओं को सेवा देते समय भी बदला जा रहा है और कोई सेवा-विराम नहीं हो रहा!

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

Erlang कोड का प्रबंधन कैसे करता है

Erlang वर्चुअल मशीन (BEAM) कोड मॉड्यूल का एक अनोखे तरीके से प्रबंधन करती है। प्रत्येक मॉड्यूल के लिए, यह मेमोरी में दो लोड किए गए संस्करण रख सकती है: एक 'पुराना' संस्करण और एक 'नया' संस्करण।

  • जब कोई प्रक्रिया शुरू होती है, तो वह कोड के 'नए' संस्करण को चलाती है।
  • यदि आप कोई मॉड्यूल फिर से लोड करते हैं, तो उसके फ़ंक्शन के लिए आने वाली नई कॉल सबसे नवीनतम 'नए' संस्करण का उपयोग करेंगी।
  • हालाँकि, मौजूदा प्रक्रियाएँ उस कोड को चलाती रहती हैं जिसके साथ वे लोड हुई थीं, जब तक कि वे *फिर से लोड किए गए* मॉड्यूल के किसी फ़ंक्शन को कॉल न करें या उन्हें स्पष्ट रूप से बदलने के लिए न कहा जाए।

सरल मॉड्यूल री-लोडिंग

आप Erlang शेल में किसी मॉड्यूल को इंटरैक्टिव तरीके से फिर से लोड कर सकते हैं। l(Module) फ़ंक्शन ('load' का संक्षिप्त रूप) कोड पथ से मॉड्यूल के नवीनतम संस्करण को संकलित और लोड करता है।

आइए एक छोटा उदाहरण देखते हैं। हम एक सरल गणितीय मॉड्यूल परिभाषित करेंगे, फिर एक फ़ंक्शन बदलकर उसे फिर से लोड करेंगे।

मॉड्यूल री-लोड का प्रदर्शन

पहले my_math.erl बनाएँ:

फिर Erlang शेल में इसे c(my_math) से संकलित करें। my_math:add(1, 2) को कॉल करें। अब फ़ाइल में add/2 फ़ंक्शन को *बदलकर* X + Y + 10 कर दें। सहेजें। l(my_math) चलाएँ और फिर से my_math:add(1, 2) को कॉल करें। नया परिणाम देखें!

-module(my_math).
-export([add/2]).

add(X, Y) -> X + Y.

स्थिति माइग्रेशन चुनौती

सिर्फ़ कार्यात्मक बदलावों के लिए सरल री-लोडिंग ठीक काम करती है, जैसे हमारा my_math उदाहरण। लेकिन यदि कोई चल रही प्रक्रिया, विशेष रूप से GenServer जैसा OTP व्यवहार, ऐसी आंतरिक स्थिति रखती हो जिसकी संरचना बदल गई है, तो क्या होगा?

यदि आप केवल कोड फिर से लोड करते हैं, तो चल रहा GenServer अभी भी अपनी पुरानी स्थिति-प्रारूप को रखे रहता है। नया कोड यह नहीं समझ पाएगा कि उसकी व्याख्या कैसे करनी है, जिससे क्रैश हो सकता है। हमें पुरानी स्थिति को नई स्थिति में 'रूपांतरित' करने का तरीका चाहिए।

`code_change/3` का परिचय

OTP व्यवहार code_change/3 नामक एक विशेष कॉलबैक फ़ंक्शन प्रदान करते हैं। यह फ़ंक्शन हॉट कोड अपग्रेड के दौरान स्थिति माइग्रेशन संभालने के लिए विशेष रूप से बनाया गया है।

जब आप किसी चल रही OTP प्रक्रिया को उसका कोड अपग्रेड करने के लिए कहते हैं, तो Erlang मॉड्यूल के *नए* संस्करण में इस फ़ंक्शन को कॉल करेगा। यही वह अवसर है जब आप प्रक्रिया की पुरानी आंतरिक स्थिति को नए प्रारूप में बदल सकते हैं।

`code_change/3` कॉलबैक

GenServer में code_change का सिग्नेचर इस प्रकार दिखता है:

code_change(OldVsn, State, Extra) -> {ok, NewState}

  • OldVsn: उस कोड का संस्करण *जिससे अपग्रेड किया जा रहा है*।
  • State: प्रक्रिया की वर्तमान आंतरिक स्थिति (पुराने प्रारूप में)।
  • Extra: अतिरिक्त तर्क, जिनका अक्सर उपयोग नहीं होता।
  • आपको {ok, NewState} लौटाना होगा, जहाँ NewState नए प्रारूप में रूपांतरित स्थिति है।

GenServer अपग्रेड: स्थिति रूपांतरण

मान लीजिए कि कोई GenServer एक सरल काउंटर को पूर्णांक के रूप में संग्रहीत करता है। हम इसे अपग्रेड करके काउंटर को #{value => integer()} मानचित्र के रूप में संग्रहीत करना चाहते हैं।

code_change/3 फ़ंक्शन पुरानी पूर्णांक स्थिति प्राप्त करेगा और नई मानचित्र स्थिति लौटाएगा। इससे यह सुनिश्चित होता है कि अपडेट किए गए कोड और स्थिति संरचना के साथ GenServer सुचारु रूप से चलता रहे।

GenServer `code_change/3` उदाहरण

यहाँ my_counter_v2 में code_change/3 कैसा दिखेगा, इसका एक सरल उदाहरण है। यदि हमारी पुरानी स्थिति केवल एक पूर्णांक (जैसे 10) थी और नई स्थिति #{value => 10} होनी चाहिए, तो रूपांतरण सीधा है:

यह रूपांतरण निर्बाध अपग्रेड के लिए महत्वपूर्ण है।

-module(my_counter_v2).
-behaviour(gen_server).

-export([start_link/0, get_count/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, 
         terminate/2, code_change/3]).

start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

get_count() -> gen_server:call(?MODULE, get_count).

init([]) -> {ok, #{value => 0}}.

handle_call(get_count, _From, State) -> 
    {reply, maps:get(value, State), State};
handle_call(_Request, _From, State) -> 
    {reply, not_understood, State}.

handle_cast(_Msg, State) -> {noreply, State}.

handle_info(_Info, State) -> {noreply, State}.

terminate(_Reason, _State) -> ok.

code_change(_OldVsn, OldState, _Extra) when is_integer(OldState) -> 
    io:format("~p: Upgrading state from ~p~n", [?MODULE, OldState]),
    {ok, #{value => OldState}};
code_change(_OldVsn, State, _Extra) -> 
    io:format("~p: No upgrade needed for state ~p~n", [?MODULE, State]),
    {ok, State}.

अपग्रेड की सर्वोत्तम प्रक्रियाएँ

हॉट कोड लोडिंग शक्तिशाली है, लेकिन इसके लिए सावधानीपूर्वक योजना बनाना आवश्यक है:

  • अच्छी तरह परीक्षण करें: उत्पादन में परिनियोजित करने से पहले हमेशा परीक्षण वातावरण में अपने अपग्रेड मार्गों का परीक्षण करें।
  • पिछली संगतता: आवश्यकता होने पर कई पिछले संस्करणों को संभालने के लिए code_change/3 तैयार करें।
  • छोटे, क्रमिक बदलाव: एक ही अपग्रेड में स्थिति संरचना में बहुत बड़े बदलाव करने से बचें। उन्हें छोटे, प्रबंधनीय चरणों में बाँटें।
  • रिलीज़ प्रबंधन: उत्पादन में हॉट कोड अपग्रेड आम तौर पर 'रिलीज़ हैंडलर' द्वारा प्रबंधित किए जाते हैं, जैसे OTP अनुप्रयोगों में release_handler। ये नए कोड को लोड करने और कई प्रक्रियाओं तथा नोड्स में स्थिति बदलावों के समन्वय की प्रक्रिया को स्वचालित करते हैं।

त्वरित जाँच: हॉट कोड लोडिंग

आपने Erlang की हॉट कोड लोडिंग और स्थिति बदलावों को संभालने का तरीका सीखा है। Erlang के code_change/3 कॉलबैक के बारे में निम्नलिखित में से कौन-से कथन TRUE हैं?

पुनरावलोकन: लाइव अपग्रेड

इस पाठ में हमने Erlang की शक्तिशाली हॉट कोड लोडिंग सुविधा का अध्ययन किया, जो अनुप्रयोगों को बिना सेवा-विराम के अपग्रेड करने देती है। हमने सीखा:

  • Erlang मॉड्यूल के 'पुराने' और 'नए' संस्करणों को लोड करके रख सकता है।
  • सरल कोड बदलावों को l(Module) से फिर से लोड किया जा सकता है।
  • GenServers जैसी स्थिति-युक्त प्रक्रियाओं के लिए, कोड संरचना बदलने पर प्रक्रिया की आंतरिक स्थिति को रूपांतरित करने हेतु code_change/3 कॉलबैक आवश्यक है।
  • सफल हॉट कोड अपग्रेड के लिए सावधानीपूर्वक योजना और परीक्षण अत्यंत महत्वपूर्ण हैं।

यह अनोखी क्षमता Erlang के दोष-सहिष्णु और अत्यधिक उपलब्ध सिस्टमों की आधारशिला है!

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

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

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

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

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

क्या “हॉट कोड लोडिंग और अपग्रेड” पाठ निःशुल्क है?

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

“हॉट कोड लोडिंग और अपग्रेड” में मैं क्या सीखूँगा?

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

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

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

“हॉट कोड लोडिंग और अपग्रेड” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. Erlang रिलीज़ बनाना
  2. हॉट कोड लोडिंग और अपग्रेड
  3. रिलीज़ संस्करण-निर्धारण और परिनियोजन
  4. रिलीज़ कॉन्फ़िगरेशन और बूट स्क्रिप्ट
← वितरित और विफलता-सहिष्णु प्रणालियों की Erlang OTP प्रोग्रामिंग पर वापस जाएँ