Was macht Erlang für Cloud-Anwendungen geeignet?

9

Wir starten ein neues Projekt und implementieren die Instanziierung einer Openstack-Cloud durch unser Unternehmen (siehe http://www.openstack.org/ ). Das Projekt ist ein Sicherheitswerkzeug für unser Unternehmen. Wir betreiben derzeit viele hundert dedizierte Server für Sicherheitstools und verschieben sie in unsere Unternehmen, um Openstack zu instanziieren.

Andere Projekte in meinem Unternehmen verwenden erlang derzeit in mehreren verteilten Serveranwendungen, und andere Fragen und Antworten weisen darauf hin, dass erlang in mehreren gängigen Cloud-Diensten verwendet wird. Ich versuche andere davon zu überzeugen, zu überlegen, wo dies auf unser Projekt anwendbar sein könnte.

Was sind die Stärken von erlang für die Cloud-Programmierung? Wo sind Bereiche, in denen Erlang besonders geeignet ist?

Duncan
quelle
15
Definieren Sie "Wolke" und wir können Ihnen sagen, was Sie wissen möchten. Der Begriff "Cloud" ist Marketingsprache und bedeutet für jede Person, die ihn verwendet, etwas anderes.
Ich dachte, Openstack Cloud würde ausreichen, um zu definieren, worauf wir implementieren. Siehe openstack.org . Oder fordern Sie weitere Informationen zum Projekt an? Es ist ein Sicherheitswerkzeug für unser Unternehmen. Wir betreiben derzeit viele hundert dedizierte Server für Sicherheitstools und verschieben sie in unsere Unternehmen, um Openstack zu instanziieren.
Duncan
Ich habe die Frage bearbeitet, um sie hoffentlich zu verbessern und das Marketing-Problem zu beseitigen. Mein Problem ist die Auswahl des besten Werkzeugs für den Job. Ich bin ein Neuling bei Stackexchange, also habe ich nicht den Dreh raus.
Duncan
1
Insbesondere ist der Begriff "Cloud" nebulös und bedeutet nichts Bestimmtes. Es handelt sich um Marketing. Sie haben immer noch nicht definiert, was tatsächlich etwas als Cloud-Anwendung qualifiziert . Persönlich weiß ich, was ich weiß, was ich denke , dass es bedeutet, ich bin sicher , dass es angesichts der Frage nicht das ist, was Sie denken , dass es bedeutet .
"der Begriff 'Wolke' ist nebulös" - gut! Es bedeutet virtuelles Etwas und Sie sollten angeben, ob dieses "Etwas" Software, Betriebssystem, eine einzelne Maschine, mehrere Maschinen und ein Netzwerk oder etwas anderes ist.
GlenPeterson

Antworten:

8

Abgesehen von der Tatsache, dass Erlang speziell für die Ausführung in gleichzeitigen / parallelisierten / verteilten Situationen entwickelt wurde, werden folgende zwei Haupttechniken eingesetzt, um dies zu ermöglichen:

Keine Nebenwirkungen:

Das heißt, wenn Sie einer Funktion Daten geben, für die sie ausgeführt werden soll, wirkt sich dies nur in sehr strengen Fällen auf andere Elemente im System / im laufenden Prozess aus. Dies bedeutet, dass, wenn Sie eine Funktion 300 Mal gleichzeitig ausführen, keine dieser 300 Ausführungen der Funktion eine der anderen beeinflusst.

Die Implementierungstechnik zur Sicherstellung, dass keine Nebenwirkungen auftreten, wird als "Unveränderlichkeit" bezeichnet, was ungefähr bedeutet, dass sie nicht mutiert (geändert) werden darf. Dies bedeutet, dass der Wert dieser Variablen möglicherweise nicht geändert wird, sobald Sie eine Variable erstellen. Erlang implementiert dieses Verhalten mit "Einzelzuweisung". Nachdem Sie einer Variablen einen Wert zugewiesen haben, können Sie ihr möglicherweise keinen Wert mehr zuweisen.

X = 1.
X = 2. // This is not a valid operation

Dies stellt sicher, dass kein Code versehentlich den Wert von X ändert, was zu einer Race-Bedingung führt. Daher ist er von Natur aus threadsicher und die gleichzeitige Verwendung wird trivial. Dies ist ein sehr ungewöhnliches Verhalten unter Softwaresprachen und die größte Art und Weise, wie Erlang es schafft, für die gleichzeitige Ausführung so gut geeignet zu sein.

Das Schauspielermodell:

Dies ist eine besondere Art der Modellierung, die gezeigt hat, dass die Implementierung und Verwaltung der gleichzeitigen Verarbeitung für Entwickler sehr einfach ist. Direkt aus Wikipedia (http://en.wikipedia.org/wiki/Actor_model):

Das Schauspieler-Modell übernimmt die Philosophie, dass alles ein Schauspieler ist. Dies ähnelt der Objektphilosophie, die von einigen objektorientierten Programmiersprachen verwendet wird, unterscheidet sich jedoch darin, dass objektorientierte Software normalerweise sequentiell ausgeführt wird, während das Actor-Modell von Natur aus gleichzeitig ausgeführt wird. Ein Akteur ist eine Recheneinheit, die als Antwort auf eine empfangene Nachricht gleichzeitig: eine endliche Anzahl von Nachrichten an andere Akteure senden kann; eine endliche Anzahl neuer Akteure schaffen; Geben Sie das Verhalten an, das für die nächste empfangene Nachricht verwendet werden soll. Es gibt keine angenommene Reihenfolge für die obigen Aktionen und sie könnten parallel ausgeführt werden. Die Entkopplung des Absenders von gesendeten Kommunikationen war ein grundlegender Fortschritt des Actor-Modells, das asynchrone Kommunikations- und Kontrollstrukturen als Muster für die Weitergabe von Nachrichten ermöglichte.

Jimmy Hoffa
quelle
Über die "Keine Nebenwirkungen" sagen Sie "Dies ist ein sehr ungewöhnliches Verhalten unter Software-Sprachen" - ich bin ein bisschen überrascht darüber. Können Java und C # das heute nicht? Welche Sprachen kennen Sie, die beim Aufrufen einer Funktion Nebenwirkungen haben müssen?
NoChance
3
@EmmadKareem Es geht nicht darum, ob Sie ein Programm ohne Nebenwirkungen schreiben können . Wie Sie bereits bemerkt haben, können Sie dies in Java oder C # tun. Es geht darum, ob die Standardeinstellung nebenwirkungsfrei ist und ob dies vom Compiler unterstützt wird. In Java können Sie dem Compiler beispielsweise nicht mitteilen, dass diese Methode keine Nebenwirkungen hat. Dies bedeutet wiederum, dass der Compiler Sie nicht warnen kann, wenn Sie gegen die Regeln verstoßen!
Andres F.
@EmmadKareem Ich sage nicht, dass es unmöglich ist, C # oder Java ohne Nebenwirkungen zu schreiben (obwohl äußerst selten), sondern dass nur sehr wenige Programmiersprachen strenge Richtlinien in die Sprache integriert haben, die Funktionen mit Nebenwirkungen von denen ohne trennen.
Jimmy Hoffa
Es wäre großartig, wenn Java eine @ NoSideEffects-Annotation hätte, um eine Methode zu erstellen, mit der der Compiler angewiesen wird, keine Nebenwirkungen für diese Methode zu erzwingen. In meinem eigenen Code denke ich gerne, dass Methoden häufig keine Nebenwirkungen haben. Sicher, einige Methoden müssen Mutatoren in einer Sprache wie Java sein, aber viele nicht. Vor allem, wenn Sie unveränderliche Objekte in Ihren Designs bevorzugen.
GlenPeterson
Jimmy Hoffa und @AndresF., Vielen Dank für Ihre Klarstellungen.
NoChance
9

Erlang ist besonders stark im Concurrent / Parallelized Computing. Tatsächlich wurde es ursprünglich genau für diesen Zweck entwickelt. Es hat nichts mit Cloud zu tun, außer dass häufig rechenintensive Anwendungen parallelisiert und in "Cloud" -Instanzen bereitgestellt werden, um das Erweitern / Verkleinern der Kapazität bei Bedarf zu vereinfachen.

Der Rest ist nur Marketing.

Brei
quelle
7
Erlang wurde für fehlertolerantes Computing entwickelt. Es ist nur so, dass verteiltes Rechnen eine Voraussetzung dafür ist (wie können Sie ein Ergebnis zuverlässig zurückgeben, wenn jemand versehentlich Kaffee über Ihre einzelne Maschine verschüttet, Sie benötigen mindestens zwei Maschinen), und paralleles und gleichzeitiges Rechnen sind nur Sonderfälle des verteilten Rechnens, so Erlang ist auch gut darin. Aber dafür wurde es nicht entwickelt.
Jörg W Mittag
1
@ JörgWMittag Solange wir Haare spalten ... ja, es war das Ziel , Fehlertoleranz zu erreichen. Es erreicht dies durch Parallelisierung. Es wurde entwickelt , um dies in den digitalen AX-Telefonieschalter zu implementieren , der zwei isolierte, parallele Berechnungsrohre trug, von denen eines als Hot-Standby fungierte.
Pap
1
Ja, tut mir leid, ich hätte klarer sein sollen: Cloud Computing wird per Definition ziemlich verteilt und wird oft (nicht immer, aber normalerweise) von Clustern kostengünstiger und vor allem unzuverlässiger Maschinen implementiert , die jedoch einen zuverlässigen Service bieten sollen. Das macht Erlang so gut.
Jörg W Mittag
3

Ein Aspekt der Cloud, der sich von herkömmlichen Hardwarebereitstellungen unterscheidet, ist die Leichtigkeit, mit der Sie bei Bedarf neue Instanzen starten können. Die Möglichkeit, andere Knoten und Prozesse auf anderen Knoten zu überwachen, macht es relativ einfach, hochdynamische Systeme zu erstellen, mit denen VMs hinzugefügt oder entfernt und nach Bedarf verwaltet werden können.

Dies gilt insbesondere dann, wenn Sie Ihr System mit dem OTP-Framework (Open Telecom PLatform) von erlang erstellen, das sowohl Struktur als auch Mechanismen (Supervisor-Bäume) bietet, um das Erstellen einiger hochentwickelter Dinge mit weitaus weniger Effrot zu unterstützen, als Sie sich vorstellen. Erlang erledigt alle kniffligen Dinge, damit Sie nicht müssen.

Garry Hodgson
quelle