wake-up-neo.com

Wo wird Erlang angewendet und warum?

Ich möchte eine Liste der häufigsten Anwendungen/Websites/Lösungen kennen, bei denen Erlang verwendet wird, erfolgreich oder nicht.

Es wäre auch sehr dankbar zu erklären, warum es in einer bestimmten Lösung statt in anderen Programmiersprachen verwendet wird.

Interessant wäre auch die Auflistung von BAD Erlang-Fallstudien (Fälle, in denen Erlang missbraucht wird).

244
Roberto Aloi

Von Programmierung Erlang:

Alternativtext http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

Viele Unternehmen setzen Erlang in ihren Produktionssystemen ein:

Amazon implementiert SimpleDB mit Erlang und stellt Datenbankdienste als Teil der Amazon Elastic Compute Cloud (EC2) bereit.

Yahoo! verwendet es in seinem Social-Bookmarking-Dienst Delicious, der über 5 Millionen Benutzer und 150 Millionen mit Lesezeichen versehene URLs verfügt.

Facebook verwendet Erlang, um das Back-End seines Chat-Dienstes mit mehr als 100 Millionen aktiven Benutzern zu versorgen.

WhatsApp verwendet Erlang zum Ausführen von Nachrichtenservern und erreicht bis zu 2 Millionen verbundene Benutzer pro Server.

T-Mobile verwendet Erlang in seinen SMS und Authentifizierungssystemen.

Motorola verwendet Erlang für Anrufbearbeitungsprodukte in der öffentlichen Sicherheitsbranche.

Ericsson verwendet Erlang in seinen Unterstützungsknoten, die in GPRS- und 3G-Mobilfunknetzen weltweit verwendet werden.


Die beliebtesten Open-Source-Erlang-Anwendungen umfassen Folgendes:

• Der 3D-Unterteilungsmodellierer Wings 3D zum Modellieren und Texturieren von Polygonnetzen.

• Das Ejabberd-System , das einen XMPP-basierten Instant Messaging-Anwendungsserver (IM) bereitstellt.

• Die CouchDB “schemafreie” dokumentenorientierte Datenbank bietet Skalierbarkeit über Multicore- und Multiserver-Cluster.

• Die MochiWeb-Bibliothek , die Unterstützung für den Aufbau von Lightweight-HTTP-Servern bietet. Es wird verwendet, um Dienste wie MochiBot und MochiAds zu betreiben, die täglich Millionen von Zuschauern dynamisch generierte Inhalte bereitstellen.

RabbitMQ , eine Implementierung des AMQP-Nachrichtenprotokolls. AMQP ist ein aufstrebender Standard für leistungsstarkes Messaging in Unternehmen.

207
JRL

ejabberd ist eine der bekanntesten und mit der ich erlang gelernt habe.

Ich denke, es ist eines der interessantesten Projekte, um Erlang zu lernen, weil es wirklich auf der Stärke von Erlang aufbaut. (Einige werden jedoch argumentieren, dass es kein OTP ist, aber keine Sorge, es steckt immer noch eine Menge großartiger Codes darin ...)

Warum?

Ein XMPP-Server (wie ejabberd) kann als High-Level-Router angesehen werden, der Nachrichten zwischen Endbenutzern weiterleitet. Natürlich gibt es noch andere Funktionen, aber dies ist der wichtigste Aspekt eines Instant Messaging-Servers. Es muss viele Nachrichten gleichzeitig leiten und viele TCP/IP-Verbindungen verarbeiten.

Wir haben also zwei Funktionen:

  • viele Verbindungen handhaben
  • weiterleiten von Nachrichten unter bestimmten Aspekten der Nachricht

Dies sind Beispiele, bei denen erlang glänzt.

erledige viele Verbindungen

Es ist sehr einfach, skalierbare, nicht blockierende TCP/IP-Server mit erlang zu erstellen. Tatsächlich wurde es entwickelt, um dieses Problem zu lösen. Und da es Hunderttausende von Prozessen erzeugen kann (und nicht threads, ist es ein einfacher zu entwerfender Share-Nothing-Ansatz auf mehrere Server verteilt sein):

  • client-Verbindungsprozess
  • router-Prozess
  • chatroom-Prozess
  • server-zu-Server-Prozesse

Sie alle tauschen Nachrichten aus.

Weiterleiten von Nachrichten zu bestimmten Aspekten der Nachricht

Ein weiteres sehr liebenswertes Merkmal von Erlang ist Pattern Matching . Es wird in der gesamten Sprache verwendet.

Zum Beispiel im Folgenden:

access(moderator, _Config)->  rw;
access(participant, _Config)->  rw;
access(visitor, #config{type="public"})->  r;
access(visitor, #config{type="public_rw"})->  rw;
access(_User,_Config)->  none.

Das sind 5 verschiedene Versionen der Funktion access. Erlang wählt unter Berücksichtigung der eingegangenen Argumente die am besten geeignete Version aus. (Config ist eine Struktur vom Typ #config mit dem Attribut type).

Das heißt, es ist sehr einfach und viel klarer als das Verketten if/else oder switch/case, um Geschäftsregeln zu erstellen.

Zum Abschluss

Das Schreiben skalierbarer Server ist der springende Punkt bei Erlang. Alles ist darauf ausgelegt, dies einfach zu machen. Zu den beiden vorherigen Funktionen würde ich Folgendes hinzufügen:

  • hot-Code-Upgrade
  • mnesia , verteilte relationale Datenbank (in der Basisverteilung enthalten)
  • mochiweb , auf dem die meisten http-Server aufgebaut sind
  • binärunterstützung (Dekodierung und Kodierung des Binärprotokolls so einfach wie nie zuvor)
  • eine großartige Community mit großartigen Open Source-Projekten (ejabberd, couchdb, aber auch webmachine , riak = und eine Menge Bibliothek sehr einfach einzubetten)

Weniger LOCs

Es gibt auch diesen Artikel von Richard Jones. Er hat eine Anwendung von C++ auf erlang umgeschrieben: 75% weniger Zeilen in erlang.

81
Eric

Die Liste der häufigsten Anwendungen für Erlang wurde bereits behandelt (CouchDb, ejabberd, RabbitMQ usw.), aber ich möchte Folgendes beitragen.

Der Grund für die Verwendung in diesen Anwendungen liegt in der Kernkompetenz von Erlang: Anwendungsverwaltung Verfügbarkeit.

Erlang wurde von Grund auf für die Telekommunikationsumgebung entwickelt, bei der die Verfügbarkeit von Systemen mindestens 5x9 beträgt (99,999% jährliche Betriebszeit). Diese Zahl lässt während eines Jahres nicht viel Raum für Ausfallzeiten! Aus diesem Grund ist Erlang in erster Linie mit folgenden Funktionen ausgestattet (nicht erschöpfend):

  • Horizontale Skalierbarkeit (Möglichkeit zur einfachen Verteilung von Aufträgen über Maschinengrenzen hinweg durch nahtlose Kommunikation zwischen und innerhalb von Maschinen). Die eingebaute Datenbank (Mnesia) wird ebenfalls von der Natur verteilt.

  • Vertikale Skalierbarkeit (Möglichkeit, Jobs auf mehrere Verarbeitungsressourcen auf demselben Computer zu verteilen): SMP wird nativ behandelt.

  • Code-Hot-Swapping: Die Möglichkeit, Code während des Betriebs live zu aktualisieren/zu aktualisieren

  • Asynchron: Die reale Welt ist asynchron, daher wurde Erlang entwickelt, um dieser grundlegenden Natur Rechnung zu tragen. Ein Merkmal, das zu dieser Anforderung beiträgt: Erlang's "freie" Prozesse (> 32000 können gleichzeitig ausgeführt werden).

  • Supervision: viele verschiedene Strategien zur Prozessüberwachung mit Neustartstrategien, Schwellenwerten usw. Hilft dabei, sich leichter von Eckfällen/Überlastungen zu erholen und gleichzeitig die Spuren der Probleme für spätere Fehlerbehebung, Post-Mortem-Analyse usw. Zu behalten .

  • Ressourcenverwaltung: Planungsstrategien, Ressourcenüberwachung usw. Beachten Sie, dass der Standardprozessplaner mit O(1) Skalierung arbeitet.

  • Live-Debugging: Die Fähigkeit, sich bei Live-Knoten nach Belieben "einzuloggen", hilft bei der Fehlersuche. Das Debuggen kann live mit vollem Zugriff auf den laufenden Status jedes Prozesses durchgeführt werden. Auch die eingebauten Fehlerberichterstellungstools sind sehr nützlich (aber manchmal etwas umständlich zu bedienen).

Natürlich könnte ich über seine funktionalen Wurzeln sprechen, aber dieser Aspekt ist etwas orthogonal zum Hauptziel (Hochverfügbarkeit). Die Hauptkomponente der funktionalen Natur, die großzügig zum Ziel beiträgt, ist IMO: "share nothing". Diese Eigenschaft hilft dabei, "Nebenwirkungen" einzudämmen und die Notwendigkeit kostspieliger Synchronisationsmechanismen zu verringern.

Ich denke, all diese Eigenschaften tragen dazu bei, einen Fall für die Verwendung von Erlang in geschäftskritischen Anwendungen zu erweitern.

Eine Sache, in der Erlang nicht wirklich gut ist: Verarbeitung großer Datenblöcke.

47
jldupont

Erlang stammt von Ericsson und wird in einigen Telekommunikationssystemen verwendet.

Außerhalb der Telekommunikation ist CouchDb (eine dokumentenorientierte Datenbank) möglicherweise die bisher bekannteste Erlang-Anwendung.

Warum Erlang? Aus der Übersicht (vollständig lesenswert):

Die Dokument-, Anzeige-, Sicherheits- und Replikationsmodelle, die Abfragesprache für spezielle Zwecke, das effiziente und robuste Festplattenlayout und die gleichzeitige und zuverlässige Funktion der Erlang-Plattform sind sorgfältig aufeinander abgestimmt, um ein zuverlässiges und effizientes System zu gewährleisten.

19
Brian Agnew

Wir haben mit Erlang eine Wettbörse (auch als Prognosemarkt bekannt) aufgebaut. Wir haben Erlang gegenüber einigen der traditionelleren Finanzsprachen (C++, Java etc)) aufgrund der integrierten Parallelität ausgewählt. Die Märkte funktionieren sehr ähnlich wie Telefonvermittlungen. Unser CTO hielt einen Vortrag über unsere Verwendung von Erlang bei CTO talk .

Wir verwenden auch CouchDB und RabbitMQ als Teil unseres Stacks.

19
Jason Trost

Ich habe festgestellt, dass gerade ein Bericht erstellt wird: Erlang in Acoustic Ray Tracing .

Es ist ein Erfahrungsbericht über den Versuch einer Forschungsgruppe, Erlang für die akustische Ray-Tracing-Analyse zu verwenden. Sie fanden heraus, dass es zwar einfacher war, das Programm zu schreiben, aber weniger fehlerhaft war usw. Es skalierte schlechter und lief 10-mal langsamer als ein vergleichbares C-Programm. Ein Punkt, an dem es möglicherweise nicht gut geeignet ist, sind CPU-intensive Szenarien.

Beachten Sie jedoch, dass die Leute, die die Arbeit geschrieben haben, sich in der Phase des ersten Erlang-Lernens befanden und möglicherweise nicht die richtigen Entwicklungsverfahren für CPU-intensives Erlang gekannt haben.

15
CoderTao

Anscheinend hat Yahoo Erlang benutzt, um etwas zu machen, das er Harvester nennt. Artikel dazu hier: http://www.ddj.com/architect/220600332

14
harms

Wofür ist erlang gut?

http://beebole.com/de/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (jerfs Antwort)

Es ist wichtig zu wissen, dass die 4 Teile von Erlang: die Sprache selbst, die Standardbibliotheken für VMs (BEAM, Hipe) (plus Module für Github, CEAN usw.) und die Entwicklungsumgebung ständig aktualisiert/erweitert/verbessert werden. Ich erinnere mich zum Beispiel, dass sich die Gleitkomma-Performance verbessert hat, als der Autor von Wings3d erkannte, dass sie verbessert werden musste (ich kann keine Quelle dafür finden). Und dieser Typ hat gerade darüber geschrieben:

http://marian-dan.com/wordpress/?p=324

Vor ein paar Jahren führten Tim Brays Wide Finder-Werbung und alle Leute, die anfingen, Web-App-Frameworks und HTTP-Server zu entwickeln, (zumindest teilweise) zu einer verbesserten Handhabung von Regex und Binärdateien. Die ganze Arbeit, HiPE und SMP zu integrieren, das Dialysator-Projekt, das Testen mehrerer Einheiten und das Entstehen von Bibliotheken, ist erledigt.

Der Sweet Spot wächst also. Das Schwierige ist, dass die offiziellen Dokumente nicht sehr gut mithalten können und die Mailing-Liste und das Erlang-Blogosphere-Volumen schnell wachsen

11
Gene T

Wir verwenden Erlang, um die Back-End-Muskelkraft für unser Echtzeit-Browser-basiertes Multiplayer-Spiel bereitzustellen Pixza . Wir verwenden kein Flash oder andere Plugins von Drittanbietern, obwohl das Spiel in Echtzeit für mehrere Spieler ausgelegt ist. Wir verwenden stattdessen reine JS- und COMET-Techniken. Und Erlang unterstützt die "Echtheit" von Pixza.

10
ErJab

Ich arbeite für wooga, ein soziales Spielunternehmen, und wir verwenden Erlang für einige unserer Spiele-Backends (im Grunde genommen http apis für Millionen von täglichen Benutzern) und Hilfsdienste wie iOS Push-Benachrichtigungsanbieter, Zahlung usw.

Ich denke, es strahlt wirklich in netzwerkbezogenen Aufgaben und macht es einfach, einfache und komplexe Netzwerkdienste darin zu strukturieren und zu implementieren. Verteilung, Fehlertoleranz und Leistung sind einfach zu erreichen, da Erlang bereits einige der wichtigsten Bestandteile enthält und sie seit langem in kritischen Produktionsinfrastrukturen eingesetzt werden. Es ist also nicht wie "das neue Hip-Technologie-Ding 0.0.2 Alpha".

Ich weiß, dass auch andere Spielefirmen Erlang verwenden. Sie sollten in der Lage sein, Präsentationen darüber auf einer Diashow zu finden.

10
John-Paul Bader

Erlang schöpft seine Stärke aus einer funktionalen Sprache ohne gemeinsames Gedächtnis. Daher ist Erlang nach IMO nicht für Anwendungen geeignet, die direkte Speichermanipulationen erfordern. Bildbearbeitung zum Beispiel.

6
emb