12 पॉइंट द्वारा GN⁺ 2024-11-21 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • Erlang ecosystem की शक्तिशाली विशेषताओं में से एक हॉट कोड अपडेट है
  • यह सुविधा लगभग दूसरे runtimes में संभव नहीं है और बहुत अनोखी है
  • Elixir, Erlang के ऊपर बना है और वही सुविधा सपोर्ट करता है

Elixir में हॉट कोड अपडेट लागू करना

  • मानक Elixir release (mix release) तरीका डिफ़ॉल्ट रूप से Erlang हॉट कोड अपडेट को सपोर्ट नहीं करता
  • हॉट कोड अपडेट लागू करने के लिए कई blog posts देखनी पड़ती हैं या Erlang के आधिकारिक दस्तावेज़ों का विस्तार से अध्ययन करना पड़ता है
  • संबंधित सामग्री:

हॉट कोड अपडेट के वास्तविक उपयोग के मामले

  • व्यावहारिक काम में हॉट कोड अपडेट मोटे तौर पर दो हिस्सों में बंटता है:
    1. सरल कोड reload
      • उदाहरण: development के दौरान IEx में r MyModule या recompile कमांड चलाना
      • यह सरल और उपयोगी है, लेकिन कुछ हद तक नए compiler या builder के हिस्से जैसा महसूस होता है
    2. अधिक जटिल उपयोग
      • Nerves प्रोजेक्ट में हॉट कोड अपडेट का अक्सर उपयोग होता है:
        • embedded Elixir devices में नंबर ट्यून करने या मॉड्यूल बदलने के समय, firmware upload और reboot का इंतज़ार करने के बजाय IEx से अपडेट किया जाता है
        • application के किसी खास हिस्से को start/stop करना, या GenServer को बंद करके state रीसेट करना
      • NervesHub के जरिए remote devices पर हॉट कोड अपडेट लागू करना:
        • उदाहरण: real-time clock debug करते समय I2C calls सीधे चलाकर समस्या को जल्दी समझना

हॉट कोड अपडेट के टूल और सावधानियाँ

  • उम्मीद है कि Elixir के mix release या मौजूदा distillery टूल के ऊपर हॉट कोड अपडेट को सपोर्ट करने वाली tooling और बढ़ेगी
  • हॉट कोड अपडेट में database migration की तरह बहुत सावधानी चाहिए:
    • यह समझना ज़रूरी है कि dependencies हॉट कोड अपडेट पर कैसे प्रतिक्रिया देती हैं
    • इसके अलावा भी कई अन्य बातों पर विचार करना होता है

3 टिप्पणियां

 
bus710 2024-11-22

यह सामग्री देश की एकमात्र Elixir अनुवाद पुस्तक पहली बार सीखने वाली Elixir Programming में भी विस्तार से शामिल है.

 
papillon 2024-11-21

यह एक शानदार और शक्तिशाली फीचर है,
लेकिन मेरा मानना है कि इसे सिर्फ real-time debugging और जांच के लिए ही इस्तेमाल करना बेहतर होगा

 
GN⁺ 2024-11-21
Hacker News राय
  • Discord में BEAM hot code loading का उपयोग करके लंबे deployment cycle को छोटा किया गया और emergency updates में इसका इस्तेमाल हुआ

    • एक साथ कई modules को patch करने वाला tool बनाया गया और updates को cluster में propagate किया गया
    • Erlang की built-in distribution functionality के जरिए hot patches deploy किए गए
  • Nerves devices पर code reloading उपयोगी है, और real time में changes test किए जा सकते हैं, इसलिए integration testing के लिए अच्छा है

    • remote से नया firmware test और update किया गया, जिससे customers संतुष्ट रहे
    • files को /tmp में copy करने के बाद Code.compile का उपयोग करना बेहतर error messages देता है
    • सभी code को compile और delete करने वाला helper function लिखना आसान है
  • Elixir project में hot code updates का उपयोग नहीं किया जा सका, लेकिन लगता है कि यह customers के लिए मददगार होता

    • complex changes में hot code updates और अधिक समस्याएँ पैदा कर सकते हैं
    • simple changes के लिए न्यूनतम प्रभाव रखना बेहतर है
  • kosmi.io में hot code upgrades का सफलतापूर्वक उपयोग हो रहा है

    • तेज development, fixes, और update deployment संभव है
    • Distillery और custom scripts का उपयोग किया जाता है, लेकिन अच्छा होता अगर यह standardized होता
  • Nerves और hot code reloading के जरिए Erlang में रुचि पैदा हुई

    • production environment में यह बहुत practical नहीं है, लेकिन reliable systems बनाने के लिए उपयोगी tool है
  • relup तैयार करते समय बहुत सावधानी रखनी चाहिए, और Linux में नया server चलाकर session data transfer करने का तरीका भी है

    • hot patching उतना संतोषजनक नहीं लग सकता क्योंकि वही VM लगातार चलती रहती है
  • Elixir को embedded Linux पर deploy किया जाता है, और Nerves systemd को replace करके BEAM VM को process 1 के रूप में boot करता है

    • Elixir को hardware के अधिक करीब रखा जाता है
  • WhatsApp पहले SSH scripts का उपयोग करके सभी nodes पर hot reloading करता था

  • hot code updates उपयोगी हैं, लेकिन इनसे आसानी से गलतियाँ हो सकती हैं और support भी कम है

    • hot code updates के फायदे सावधानीपूर्वक rolling restarts के जरिए भी हासिल किए जा सकते हैं
    • Erlang की code reloading capability का उपयोग करके real time issue diagnosis tools बनाए जा सकते हैं
  • hot code updates तब फायदेमंद होते हैं जब बहुत सारे clients connected हों और उसी दौरान code changes करने हों

    • GNU Make का उपयोग करके code को production में sync किया गया और debug shell के जरिए modules load किए गए