12 Punkte von GN⁺ 2024-11-21 | 3 Kommentare | Auf WhatsApp teilen
  • Eine der starken Funktionen des Erlang-Ökosystems sind Hot Code Updates
  • Diese Funktion ist in fast keiner anderen Runtime möglich und äußerst einzigartig
  • Elixir wurde auf Erlang aufgebaut und unterstützt dieselbe Funktion

Anwendung von Hot Code Updates in Elixir

  • Die standardmäßige Elixir-Release-Methode (mix release) unterstützt Erlang-Hot-Code-Updates nicht standardmäßig
  • Um Hot Code Updates zu implementieren, muss man verschiedene Blogposts konsultieren oder die offizielle Erlang-Dokumentation im Detail studieren
  • Relevante Materialien:

Praxisbeispiele für den Einsatz von Hot Code Updates

  • Hot Code Updates lassen sich in der Praxis grob in zwei Kategorien einteilen:
    1. Einfaches Code-Reloading
      • Beispiel: während der Entwicklung in IEx den Befehl r MyModule oder recompile ausführen
      • Das ist einfach und nützlich, fühlt sich aber eher wie ein Teil eines neuen Compilers oder Builders an
    2. Komplexere Anwendungen
      • Im Nerves-Projekt werden Hot Code Updates häufig genutzt:
        • Wenn man auf eingebetteten Elixir-Geräten Zahlen feinjustiert oder Module ändert, aktualisiert man sie per IEx, statt auf das Hochladen der Firmware und einen Neustart zu warten
        • Bestimmte Teile der Anwendung lassen sich starten/stoppen, oder ein GenServer wird beendet, um seinen Zustand zurückzusetzen
      • Über NervesHub werden Hot Code Updates auf entfernte Geräte angewendet:
        • Beispiel: Beim Debugging einer Echtzeituhr werden I2C-Aufrufe direkt ausgeführt, um Probleme schnell zu identifizieren

Tools und Hinweise zu Hot Code Updates

  • Es besteht die Hoffnung, dass mehr Tooling Hot Code Updates zusätzlich zu Elixirs mix release oder dem bisherigen Tool distillery unterstützt
  • Hot Code Updates erfordern wie Datenbankmigrationen besondere Sorgfalt:
    • Man muss verstehen, wie Abhängigkeiten auf Hot Code Updates reagieren
    • Es gibt verschiedene weitere Themen, die berücksichtigt werden müssen

3 Kommentare

 
bus710 2024-11-22

Dieser Inhalt ist auch ausführlich in Elixir programmieren lernen, dem einzigen koreanischen Übersetzungsbuch über Elixir, enthalten.

 
papillon 2024-11-21

Es ist zwar eine tolle und leistungsstarke Funktion,
aber ich denke, man sollte sie besser nur für Live-Debugging und zur Überprüfung verwenden.

 
GN⁺ 2024-11-21
Hacker-News-Kommentar
  • Bei Discord wurde das Hot Code Loading von BEAM genutzt, um lange Deployment-Zyklen zu verkürzen und Notfall-Updates einzuspielen

    • Es wurde ein Tool entwickelt, das mehrere Module gleichzeitig patchen und Updates im Cluster verteilen konnte
    • Hot Patches wurden über die eingebaute verteilte Funktionalität von Erlang ausgerollt
  • Auf Nerves-Geräten ist Code Reloading nützlich, weil sich Änderungen in Echtzeit testen lassen, was gut für Integrationstests ist

    • Neue Firmware konnte remote getestet und aktualisiert werden, was Kunden zufriedengestellt hat
    • Dateien nach /tmp zu kopieren und danach Code.compile zu verwenden, liefert bessere Fehlermeldungen
    • Es ist einfach, eine Helferfunktion zu schreiben, die den gesamten Code kompiliert und wieder löscht
  • In einem Elixir-Projekt konnte Hot Code Update nicht genutzt werden, aber es hätte den Kunden wohl geholfen

    • Bei komplexen Änderungen kann Hot Code Update eher zusätzliche Probleme verursachen
    • Bei einfachen Änderungen ist es besser, die Auswirkungen so gering wie möglich zu halten
  • Bei kosmi.io werden Hot Code Upgrades erfolgreich eingesetzt

    • Schnelle Entwicklung, Fehlerbehebungen und das Ausrollen von Updates sind dadurch möglich
    • Es werden Distillery und benutzerdefinierte Skripte verwendet, aber eine Standardisierung wäre wünschenswert
  • Durch Nerves und Hot Code Reloading entstand Interesse an Erlang

    • In Produktionsumgebungen ist es nicht immer praktisch, aber es ist ein nützliches Werkzeug zum Aufbau zuverlässiger Systeme
  • Bei der Vorbereitung von Relups muss man sehr vorsichtig sein, und unter Linux gibt es auch die Möglichkeit, einen neuen Server zu starten und Sitzungsdaten zu übertragen

    • Hot Patching kann unbefriedigend sein, weil dabei dieselbe VM dauerhaft weiterläuft
  • Elixir wird auf Embedded Linux ausgerollt, wobei Nerves systemd ersetzt und die BEAM-VM als Prozess 1 startet

    • Dadurch rückt Elixir näher an die Hardware
  • WhatsApp nutzte früher SSH-Skripte, um Hot Reloading auf allen Nodes durchzuführen

  • Hot Code Update ist nützlich, kann aber leicht Fehler begünstigen und wird nur unzureichend unterstützt

    • Die Vorteile von Hot Code Update lassen sich auch durch sorgfältige Rolling Restarts erzielen
    • Mit den Code-Reloading-Funktionen von Erlang lassen sich Werkzeuge zur Diagnose von Problemen in Echtzeit bauen
  • Hot Code Update ist vorteilhaft, wenn Codeänderungen vorgenommen werden müssen, während viele Clients verbunden sind

    • Mit GNU Make wurde Code in die Produktion synchronisiert und Module über eine Debug-Shell geladen