- 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:
- 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
- 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
Dieser Inhalt ist auch ausführlich in Elixir programmieren lernen, dem einzigen koreanischen Übersetzungsbuch über Elixir, enthalten.
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.
Hacker-News-Kommentar
Bei Discord wurde das Hot Code Loading von BEAM genutzt, um lange Deployment-Zyklen zu verkürzen und Notfall-Updates einzuspielen
Auf Nerves-Geräten ist Code Reloading nützlich, weil sich Änderungen in Echtzeit testen lassen, was gut für Integrationstests ist
/tmpzu kopieren und danachCode.compilezu verwenden, liefert bessere FehlermeldungenIn einem Elixir-Projekt konnte Hot Code Update nicht genutzt werden, aber es hätte den Kunden wohl geholfen
Bei kosmi.io werden Hot Code Upgrades erfolgreich eingesetzt
Durch Nerves und Hot Code Reloading entstand Interesse an Erlang
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
Elixir wird auf Embedded Linux ausgerollt, wobei Nerves systemd ersetzt und die BEAM-VM als Prozess 1 startet
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
Hot Code Update ist vorteilhaft, wenn Codeänderungen vorgenommen werden müssen, während viele Clients verbunden sind