Ich mag diese Tools wirklich, wenn es um die Parallelität geht, mit der sie umgehen können.
Erlang scheint eine viel stabilere Lösung zu sein, erfordert jedoch viel mehr Lernen und viel Eintauchen in das Paradigma der funktionalen Sprache. Und es sieht so aus, als ob Erlang es viel besser macht, wenn es um CPUs mit mehreren Kernen geht (reparieren Sie mich, wenn ich falsch liege).
Aber welches soll ich wählen? Welches ist kurz- / langfristig besser?
Mein Ziel ist es, ein Tool zu erlernen, mit dem sich meine Webprojekte unter hoher Last einfacher skalieren lassen als mit herkömmlichen Sprachen.
concurrency
erlang
multicore
node.js
user80805
quelle
quelle
Antworten:
Ich würde Erlang ausprobieren. Obwohl es eine steilere Lernkurve sein wird, werden Sie mehr daraus machen, da Sie eine funktionale Programmiersprache lernen werden. Da Erlang speziell für die Erstellung zuverlässiger, gleichzeitig ablaufender Systeme entwickelt wurde, lernen Sie gleichzeitig viel über die Erstellung hoch skalierbarer Dienste.
quelle
Ich kann nicht für Erlang sprechen, aber ein paar Dinge, die über Node nicht erwähnt wurden:
Schauen Sie sich das Video auf Yahoo Blog von Ryan Dahl an, dem Typ, der tatsächlich Node geschrieben hat. Ich denke, das wird Ihnen helfen, eine bessere Vorstellung davon zu bekommen, wo sich der Knoten befindet und wohin er geht.
Beachten Sie, dass sich der Knoten noch in einem späten Entwicklungsstadium befindet und daher einige Änderungen vorgenommen wurden - Änderungen, die früheren Code beschädigt haben. Angeblich ist es jedoch an einem Punkt, an dem Sie erwarten können, dass sich die API nicht zu stark ändert. Wenn Sie also nach etwas suchen, das Spaß macht, würde ich sagen, dass Node eine gute Wahl ist.
quelle
Ich bin ein langjähriger Erlang-Programmierer, und diese Frage veranlasste mich, einen Blick auf node.js zu werfen. Es sieht verdammt gut aus.
Es scheint, dass Sie mehrere Prozesse erzeugen müssen, um mehrere Kerne nutzen zu können. Ich kann jedoch nichts über das Einstellen der Prozessoraffinität sehen. Sie könnten das Task-Set unter Linux verwenden, aber es sollte wahrscheinlich parametrisiert und im Programm festgelegt werden.
Mir ist auch aufgefallen, dass die Plattformunterstützung möglicherweise etwas schwächer ist. Insbesondere sieht es so aus, als müssten Sie unter Cygwin für Windows-Unterstützung ausgeführt werden.
Sieht aber gut aus.
Bearbeiten
Node.js bietet jetzt native Unterstützung für Windows.
quelle
Ich schaue mir die gleichen zwei Alternativen an, die Sie für mehrere Projekte sind.
Bisher ist das beste Rasiermesser, mit dem ich mich für ein bestimmtes Projekt zwischen ihnen entschieden habe, ob ich Javascript verwenden muss. Ein vorhandenes System, das ich migrieren möchte, ist bereits in Javascript geschrieben, daher wird die nächste Version wahrscheinlich in node.js ausgeführt. Andere Projekte werden in einigen Erlang-Webframeworks durchgeführt, da keine zu migrierende Codebasis vorhanden ist.
Eine weitere Überlegung ist, dass Erlang weit über mehrere Kerne hinaus skaliert und auf ein ganzes Rechenzentrum skaliert werden kann. Ich sehe keinen integrierten Mechanismus in node.js, mit dem ich einem anderen JS-Prozess eine Nachricht senden kann, ohne sich darum zu kümmern, auf welchem Computer er sich befindet, aber dieser ist auf den niedrigsten Ebenen direkt in Erlang integriert. Wenn Ihr Problem nicht groß genug ist, um mehrere Computer zu benötigen, oder wenn nicht mehrere kooperierende Prozesse erforderlich sind, spielt dieser Vorteil wahrscheinlich keine Rolle. Sie sollten ihn daher ignorieren.
Erlang ist in der Tat ein tiefer Pool, in den man eintauchen kann. Ich würde empfehlen, zuerst ein eigenständiges Funktionsprogramm zu schreiben, bevor Sie mit dem Erstellen von Web-Apps beginnen. Ein noch einfacherer erster Schritt, da Sie mit Javascript vertraut zu sein scheinen, besteht darin, JS in einem funktionaleren Stil zu programmieren. Wenn Sie jQuery oder Prototype verwenden, haben Sie diesen Pfad bereits eingeschlagen. Versuchen Sie, zwischen reiner funktionaler Programmierung in Erlang oder einem seiner Verwandten (Haskell, F #, Scala ...) und funktionalem JS zu wechseln.
Wenn Sie mit der funktionalen Programmierung vertraut sind, suchen Sie nach einem der vielen Erlang-Webframeworks. Sie sollten Ihre App wahrscheinlich nicht direkt auf etwas Niedriges schreiben, wie
inets
zu diesem späten Zeitpunkt. Schauen Sie sich zum Beispiel so etwas wie Stickstoff an.quelle
Während ich mich persönlich für Erlang entscheiden würde, gebe ich zu, dass ich ein wenig voreingenommen gegenüber JavaScript bin. Mein Rat ist, dass Sie einige Punkte bewerten:
Erlang hat das parallel verteilte System für Parallelität und netzwerktransparente Systeme wirklich optimiert. Je nachdem, was genau das Projekt ist, kann die Verfügbarkeit einer ausgereiften Implementierung eines solchen Systems die Probleme beim Erlernen einer neuen Sprache überwiegen. Es gibt auch zwei andere Sprachen, die auf Erlang VM funktionieren, die Sie verwenden können: Ruby / Python-ähnliche Reia und Lisp-Flavored Erlang .
Eine weitere Option ist die Verwendung von beiden, insbesondere wenn Erlang als eine Art "Hub" verwendet wird. Ich bin mir nicht sicher, ob Node.js ein Fremdfunktionsschnittstellensystem hat, aber wenn ja, hat Erlang eine C-Bibliothek, damit externe Prozesse wie jeder andere Erlang-Prozess mit dem System verbunden werden können.
quelle
Es sieht so aus, als ob Erlang für die Bereitstellung auf einem relativ Low-End-Server (512 MB 4-Core-AMD-VM mit 2,4 GHz) eine bessere Leistung erbringt. Dies ist auf die Erfahrung von SyncPad beim Vergleich von Erlang- und Node.j- Implementierungen ihrer virtuellen Whiteboard-Serveranwendung zurückzuführen.
quelle
Es gibt eine weitere Sprache auf derselben VM wie erlang -> Elixir
Es ist eine sehr interessante Alternative zu Erlang.
Außerdem verfügt es über ein schnell wachsendes Webframework, das auf it-> Phoenix Framework basiert
quelle
WhatsApp könnte niemals das Maß an Skalierbarkeit und Zuverlässigkeit erreichen, ohne https://www.youtube.com/watch?v=c12cYAUTXXs zu erhalten
quelle
Ich werde Erlang dem Knoten vorziehen. Wenn Sie Parallelität wünschen, kann Node aufgrund ihrer geringen Prozesse durch Erlang oder Golang ersetzt werden.
Erlang ist nicht leicht zu erlernen, erfordert also viel Aufwand, aber seine Community ist aktiv, sodass sie Hilfe erhalten kann. Dies ist nur der Grund, warum die Leute Node bevorzugen.
quelle