Erlang हॉट कोड अपडेट का उपयोग कैसे करें
(underjord.io)- Erlang ecosystem की शक्तिशाली विशेषताओं में से एक हॉट कोड अपडेट है
- यह सुविधा लगभग दूसरे runtimes में संभव नहीं है और बहुत अनोखी है
- Elixir, Erlang के ऊपर बना है और वही सुविधा सपोर्ट करता है
Elixir में हॉट कोड अपडेट लागू करना
- मानक Elixir release (
mix release) तरीका डिफ़ॉल्ट रूप से Erlang हॉट कोड अपडेट को सपोर्ट नहीं करता - हॉट कोड अपडेट लागू करने के लिए कई blog posts देखनी पड़ती हैं या Erlang के आधिकारिक दस्तावेज़ों का विस्तार से अध्ययन करना पड़ता है
- संबंधित सामग्री:
- Learn You Some Erlang: Relups दस्तावेज़
- AppSignal: Elixir हॉट कोड रीलोडिंग गाइड
हॉट कोड अपडेट के वास्तविक उपयोग के मामले
- व्यावहारिक काम में हॉट कोड अपडेट मोटे तौर पर दो हिस्सों में बंटता है:
- सरल कोड reload
- उदाहरण: development के दौरान
IExमेंr MyModuleयाrecompileकमांड चलाना - यह सरल और उपयोगी है, लेकिन कुछ हद तक नए compiler या builder के हिस्से जैसा महसूस होता है
- उदाहरण: development के दौरान
- अधिक जटिल उपयोग
- Nerves प्रोजेक्ट में हॉट कोड अपडेट का अक्सर उपयोग होता है:
- embedded Elixir devices में नंबर ट्यून करने या मॉड्यूल बदलने के समय, firmware upload और reboot का इंतज़ार करने के बजाय
IExसे अपडेट किया जाता है - application के किसी खास हिस्से को start/stop करना, या
GenServerको बंद करके state रीसेट करना
- embedded Elixir devices में नंबर ट्यून करने या मॉड्यूल बदलने के समय, firmware upload और reboot का इंतज़ार करने के बजाय
- NervesHub के जरिए remote devices पर हॉट कोड अपडेट लागू करना:
- उदाहरण: real-time clock debug करते समय I2C calls सीधे चलाकर समस्या को जल्दी समझना
- Nerves प्रोजेक्ट में हॉट कोड अपडेट का अक्सर उपयोग होता है:
- सरल कोड reload
हॉट कोड अपडेट के टूल और सावधानियाँ
- उम्मीद है कि Elixir के
mix releaseया मौजूदाdistilleryटूल के ऊपर हॉट कोड अपडेट को सपोर्ट करने वाली tooling और बढ़ेगी - हॉट कोड अपडेट में database migration की तरह बहुत सावधानी चाहिए:
- यह समझना ज़रूरी है कि dependencies हॉट कोड अपडेट पर कैसे प्रतिक्रिया देती हैं
- इसके अलावा भी कई अन्य बातों पर विचार करना होता है
3 टिप्पणियां
यह सामग्री देश की एकमात्र Elixir अनुवाद पुस्तक पहली बार सीखने वाली Elixir Programming में भी विस्तार से शामिल है.
यह एक शानदार और शक्तिशाली फीचर है,
लेकिन मेरा मानना है कि इसे सिर्फ real-time debugging और जांच के लिए ही इस्तेमाल करना बेहतर होगा
Hacker News राय
Discord में BEAM hot code loading का उपयोग करके लंबे deployment cycle को छोटा किया गया और emergency updates में इसका इस्तेमाल हुआ
Nerves devices पर code reloading उपयोगी है, और real time में changes test किए जा सकते हैं, इसलिए integration testing के लिए अच्छा है
/tmpमें copy करने के बादCode.compileका उपयोग करना बेहतर error messages देता हैElixir project में hot code updates का उपयोग नहीं किया जा सका, लेकिन लगता है कि यह customers के लिए मददगार होता
kosmi.io में hot code upgrades का सफलतापूर्वक उपयोग हो रहा है
Nerves और hot code reloading के जरिए Erlang में रुचि पैदा हुई
relup तैयार करते समय बहुत सावधानी रखनी चाहिए, और Linux में नया server चलाकर session data transfer करने का तरीका भी है
Elixir को embedded Linux पर deploy किया जाता है, और Nerves systemd को replace करके BEAM VM को process 1 के रूप में boot करता है
WhatsApp पहले SSH scripts का उपयोग करके सभी nodes पर hot reloading करता था
hot code updates उपयोगी हैं, लेकिन इनसे आसानी से गलतियाँ हो सकती हैं और support भी कम है
hot code updates तब फायदेमंद होते हैं जब बहुत सारे clients connected हों और उसी दौरान code changes करने हों