
Warum erreicht Elixir / Phoenix eine so hohe Akzeptanz in der Softwareentwicklungsbranche? Was sind die besten Anwendungsfälle dieser Sprache? Gibt es irgendwelche Nachteile bei der Verwendung? Wir haben mit Sergiy Kukunin, einem Full-Stack-Entwickler bei
Spotlight und Elixir-Experten, gesprochen, um Antworten auf diese und andere Fragen zu finden.
Ivan: Warum wird Elixier so beliebt?
Sergey: Elixir bietet Prinzipien, die in anderen Sprachen selten erfüllt werden. Es basiert auch auf Erlang, das zum Aufbau von Telekommunikationsnetzen verwendet wird. Als Ergebnis verfügen wir über ein äußerst zuverlässiges Tool für Projekte mit hoher Auslastung, das sich im Laufe der Zeit bewährt hat.
Dies ist wichtig, da sich der technologische Fortschritt der Hardware in den letzten Jahren verlangsamt. Die Leistung eines Kerns der CPU hat die physikalische Grenze von 5 GHz erreicht. Das einzige, was die Hersteller entwickelt haben, um die Leistung der Hardware zu steigern, ist die Verwendung von immer mehr Kernen.
Das Problem bei diesem Ansatz ist, dass Sie Software benötigen, die mit mehreren Kernen gleichzeitig arbeiten kann. Die klassischen Programmiersprachen sind für solche Aufgaben schlecht geeignet. Wenn wir beispielsweise in C über Multithreading sprechen, wissen wir, dass es gemeinsam genutzten Speicher und mehrere Threads gibt, die um Ressourcen konkurrieren können. Unter solchen Bedingungen ist es aufgrund zufälliger Rennbedingungen und Segmentierungsfehler schwierig, einen zuverlässigen Code für Projekte mit hoher Last zu erstellen.
Elixir löst dieses Problem effektiv, indem es einen neuen Ansatz für Multithreading einführt.
Was sind die Hauptvorteile dieser Technologie?
Das erste wesentliche Merkmal der Sprache, das sich aus ihrer funktionalen Natur ergibt, ist die Unveränderlichkeit. Sobald wir die Datenstruktur erstellt und geladen haben (es gibt keine Objekte in funktionalen Sprachen), können wir sie nicht mehr ändern, außer indem wir sie erneut von Grund auf neu erstellen.
Einerseits hebt diese Besonderheit die Eintrittsschwelle für die Verwendung von Elixir an, da Sie nicht einen Teil einer Anwendung auswählen und versuchen können, dort wiederholt etwas aufzuzeichnen, und am Ende alles in Betrieb ist. Auf der anderen Seite plant der Ingenieur dadurch die Architektur einer App gründlicher.
Die virtuelle Elixir-Maschine ist buchstäblich ein Mini-Betriebssystem, bei dem jeder Prozess seinen eigenen Speicherplatz hat. Kein anderer Prozess kann sich darauf einlassen und seine Ressourcen ausleihen. Ein Prozess kann lediglich eine Nachricht an einen anderen Prozess senden, ohne zu steuern, wie die Nachricht verarbeitet wird. Da es sich um eine funktionale Sprache handelt, gibt es auch keine Datenstrukturen, die nicht zwischen Prozessen übertragen werden können, auch nicht über das Netzwerk (im Gegensatz zu dem in den objektorientierten Sprachen verwendeten Ansatz).
Das Schreiben von Elixir-Code ist aufgrund der zahlreichen Einschränkungen, die für die Laufzeit gelten, schwieriger und dauert länger als das Erstellen von Elementen mit Java. Die allgemeine Zuverlässigkeit einer Anwendung ist jedoch sehr hoch.
Gibt es Alternativen zu Elixir?
Der ähnlichste Ansatz sind die in der Go-Sprache verwendeten Coroutinen. Auch Pythons Greenlets und Fasern in Ruby bieten einen ähnlichen Ansatz, aber es gibt keine so robuste und schnelle Laufzeit, um sie auszuführen. Der Entwickler sollte entscheiden, wie diese Coroutinen ausgeführt werden sollen, während Erlang dies alles selbst erledigt.
Jedes Werkzeug hat seine Nachteile. Was sind sie für Elixier?
Elixir ist heute ein produktionsfähiges Werkzeug, aber das gesamte Sprachökosystem ist noch etwas zu jung. Dies bedeutet insbesondere, dass Sie sich nicht einfach bei Stack Overflow anmelden und eine Antwort auf eine Ihrer möglichen Fragen finden können, wie Sie dies beispielsweise bei Ruby tun können. Ja, es gibt Bücher, Kurse und einige Blogs, aber Sie müssen Ihre Forschungen und Experimente kontinuierlich durchführen, um viele alltägliche Aufgaben zu lösen. Dies ist der Hauptnachteil für mich.
Außerdem ist es schwieriger, Elixir-Apps zu testen, da Unit-Tests weniger hilfreich sind und Sie sich mehr auf Integrations-Apps konzentrieren müssen. Beachten Sie jedoch, dass fast alle Elixir-Funktionen sauber sind, was Unit-Tests vereinfacht: Für jeden Eingang gibt es einen einzigen Ausgang.
Können Sie den Fall beschreiben, wenn Elixir maximale Ergebnisse liefert?
Wenn Sie nicht wirklich die Notwendigkeit haben, Hochlasten mit Millionen von Anfragen zu unterstützen, die von Ihrer App verarbeitet werden, ist Elixir kein Tool, das Sie verwenden sollten. Elixir ist jedoch eine perfekte Lösung für echte Hochlastprojekte. Möglicherweise schreiben Sie nicht einmal Ihre gesamte App damit, aber die Verwendung von Elixir für die heißesten Teile eines Systems ist immer eine gute Idee.
Im Zeitalter eines dynamischen Internets, in dem Benutzer sehr hohe Geschwindigkeiten und eine sofortige Reaktion jeder Website erwarten, insbesondere inhaltsbezogene Ressourcen. Wenn Sie beispielsweise über eine Online-Mediensendung mit vielen gleichzeitigen Verbindungen von Tausenden von Lesern verfügen, die sofort über Neuigkeiten informiert werden möchten, erleichtert der Wechsel zu Elixir Ihr Leben erheblich.
Persönliche Erfahrung: Bei einem Projekt hatten wir eine Node.js-Webanwendung, mit der bis zu 20.000 Verbindungen gleichzeitig aufrechterhalten werden konnten. Nach dem Umzug zu Elixir stieg diese Zahl auf 80.000, ohne dass sich die Geschäftslogik oder die Änderungen geändert hätten. Dieses Ergebnis war allein aufgrund der besseren Effizienz der von uns verwendeten Sprache möglich.
Elixir ermöglicht das Erstellen von Dingen, die noch vor wenigen Jahren undenkbar waren, wie das Erstellen von Online-Spielen, die mithilfe von Web-Sockets vollständig serverseitig gerendert werden. Es gibt sogar ein Beispiel für das Web-Snake-Spiel, das auf Elixir ohne JavaScript-Code geschrieben wurde.
Entwickler sollten jedoch verstehen, dass es keine Silberkugel gibt. Elixir kann Ihnen nicht mehr geben, als die virtuelle Erlang-Maschine ursprünglich berechtigt war. Es übersetzt nur eine neue Syntax, damit der alte, aber gute Compiler, den Ericsson Ende der 90er Jahre erstellt hat, sie verstehen kann. Dies ist ein perfektes Beispiel dafür, wie bewährte Technologie in Kombination mit einer neuen Technologie Entwicklern neue Möglichkeiten eröffnen kann, aber es gibt immer einige Einschränkungen.
Was raten Sie zu Beginn der Anwendung von Elixir? Welche Technologie sollte man studieren, um schneller einsatzbereit zu sein?
Nun, die Syntax von Elixir hat einige Gemeinsamkeiten mit Ruby. Die Sprachen sind völlig unterschiedlich, aber es ist immer gut, Symbole und Elemente zu sehen, an die Sie gewöhnt sind. Am einfachsten ist es, einige der neuen Elixir-kompatiblen Webentwicklungs-Frameworks zu verwenden. Das beliebteste Webframework für Elixir ist Phoenix. Probieren Sie es unbedingt aus, besonders wenn Sie es gewohnt sind, Ruby on Rails zu verwenden. Dies vereinfacht die Entwicklung und macht die App dennoch schneller und zuverlässiger.