Verbinden von Elixir- und Go-Backends mit einem Crystal-Wrapper
2025-06-19
Das Mozi-Team musste eine neue Elixir Phoenix LiveView-Anwendung mit einem bestehenden Go-Backend verbinden. Sie untersuchten NIFs und Ports, entschieden sich aber letztendlich für den C-Node-Ansatz von Erlang und verwendeten Crystal, um einen C-Wrapper zur Verbesserung der Wartbarkeit zu schreiben. Dies entkoppelt die Codebasen sowohl zur Kompilierzeit als auch zur Laufzeit. `Node.list` in Elixir wird verwendet, um die Verbindung zum C-Knoten zu erkennen, und S6 für Neustarts im Container. Obwohl es einen Performance-Malus beim Überschreiten der C/Go-Grenze gibt, ist dies für ihren Anwendungsfall akzeptabel. Das Ergebnis ist eine elegante Kombination aus drei Sprachen (Elixir, Crystal, Go), die die Wartbarkeit verbessert.
Entwicklung