Wo wird Erlang verwendet und warum? [geschlossen]


258

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

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

Es wäre auch interessant, BAD Erlang-Fallstudien aufzulisten (Fälle, in denen Erlang missbraucht wird).


13
Das Problem mit schlechten Fallstudien ist, dass sie nicht wirklich berühmt werden oder das Licht der Welt erblicken.
Eric

2
WHATSAPP verwendet Erlang! Google es für Details
Muzaaya Joshua

18
Warum ist das geschlossen? Ich habe die genaue Frage gegoogelt und wurde hierher geführt.
Canhazbits

EMqtt ist ein sehr beliebter MQTT-Broker und wird heutzutage so häufig im IoT verwendet, das in Erlang mit einer Nachhaltigkeit von 1 Million Benutzern entwickelt wurde.
LAMRIN TAWSRAS

Antworten:


214

Aus der Programmierung Erlang :

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

Viele Unternehmen verwenden Erlang in ihren Produktionssystemen:

Amazon verwendet Erlang zur Implementierung von SimpleDB und stellt Datenbankdienste als Teil der Amazon Elastic Compute Cloud (EC2) bereit.

Yahoo! verwendet es in seinem Social-Bookmarking-Dienst Delicious, der mehr als 5 Millionen Benutzer und 150 Millionen mit Lesezeichen versehene URLs hat.

Facebook nutzt Erlang, um das Backend seines Chat-Dienstes zu betreiben und mehr als 100 Millionen aktive Benutzer zu verwalten.

WhatsApp verwendet Erlang zum Ausführen von Messaging-Servern, wodurch bis zu 2 Millionen verbundene Benutzer pro Server erreicht werden.

T-Mobile verwendet Erlang in seinen SMS- und Authentifizierungssystemen.

Motorola verwendet Erlang in Anrufbearbeitungsprodukten in der öffentlichen Sicherheitsbranche.

Ericsson verwendet Erlang in seinen Support-Knoten, die in GPRS- und 3G-Mobilfunknetzen weltweit verwendet werden.


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

• Der 3D-Unterteilungsmodellierer Wings 3D , der zum Modellieren und Texturieren von Polygonnetzen verwendet wird.

• Das Ejabberd- System, das einen XMPP-basierten Instant Messaging-Anwendungsserver (Extensible Messaging and Presence Protocol) bereitstellt.

• Die dokumentenorientierte CouchDB -Datenbank ohne Schema bietet Skalierbarkeit für Multicore- und Multiserver-Cluster.

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

RabbitMQ , eine Implementierung des AMQP-Messaging-Protokolls. AMQP ist ein aufstrebender Standard für leistungsstarkes Enterprise Messaging.


27
Ramiz Uddin - über welches neue System sprechen Sie, wenn Sie sagen "Nein, ist es nicht?"
Große Schildkröte

10
@ RamizUddin Von welchem ​​neuen System sprichst du, wenn du sagst "Nein, ist es nicht?" (Ich wiederhole nur eine Frage von Great Turtle, die vor ein paar Jahren das @ vor Ihrem Namen vergessen hat - ich denke, dass es trotzdem eine Antwort verdient)
Walter Tross


Facebook hat die Einfachheit und Leistung von WhatsApp ruiniert.
Krishnadas PC

Können Sie den defekten Link für das Buch aktualisieren?
Pradyumnad

83

ejabberd ist eine der bekanntesten erlang-Anwendungen und die, mit der ich erlang gelernt habe.

Ich denke, es ist eines der interessantesten Projekte zum Erlernen von erlang, weil es wirklich auf erlangs Stärke 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 weiterleiten und viele TCP / IP-Verbindungen verarbeiten.

Wir haben also 2 Funktionen:

  • viele Verbindungen behandeln
  • Routen von Nachrichten unter Berücksichtigung einiger Aspekte der Nachricht

Dies sind Beispiele, bei denen erlang glänzt.

viele Verbindungen behandeln

Mit erlang ist es sehr einfach, skalierbare, nicht blockierende TCP / IP-Server zu erstellen. Tatsächlich wurde es entwickelt, um dieses Problem zu lösen. Und da es Hunderttausende von Prozessen erzeugen kann (und keine Threads , es ist ein Share-Nothing-Ansatz, der einfacher zu entwerfen ist), ist ejabberd als eine Reihe von erlang-Prozessen konzipiert (die auf mehrere Server verteilt werden können):

  • Client-Verbindungsprozess
  • Router-Prozess
  • Chatroom-Prozess
  • Server-zu-Server-Prozesse

Alle tauschen Nachrichten aus.

Routen von Nachrichten unter Berücksichtigung einiger Aspekte der Nachricht

Ein weiteres sehr liebenswertes Merkmal von erlang ist der Mustervergleich . 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 accessFunktion. Erlang wählt die am besten geeignete Version unter Berücksichtigung der erhaltenen Argumente aus. ( Configist eine Struktur vom Typ, #configdie ein typeAttribut hat).

Das heißt, es ist sehr einfach und viel klarer als Verketten if/elseoder switch/caseGeschäftsregeln zu erstellen.

Einwickeln

Das Schreiben skalierbarer Server ist der springende Punkt bei erlang. Alles ist so gestaltet, dass es einfach ist. Zu den beiden vorherigen Funktionen möchte ich hinzufügen:

  • Hot-Code-Upgrade
  • mnesia, verteilte relationale Datenbank (in der Basisverteilung enthalten)
  • mochiweb, auf denen die meisten http erlang Server basieren
  • Binärunterstützung (Dekodierung und Kodierung des Binärprotokolls einfach wie immer)
  • eine große Gemeinschaft mit großen Open - Source - Projekten ( ejabberd, couchdbsondern auch webmachine, riakund eine ganze Reihe von Bibliothek sehr einfach zu einbetten)

Weniger LOCs

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


6
Um fair zu sein, würde fast jeder C ++ - Code, der in einer modernen Sprache neu geschrieben wurde, den LOC reduzieren.
Zack

52

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

Der Grund , warum es bei diesen Anwendungen verwendet wird , stammt aus der Kernstärke von Erlang: der Verwaltung von Anwendungsverfügbarkeit .

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

  • Horizontale Skalierbarkeit (einfache Verteilung von Jobs über Maschinengrenzen hinweg durch nahtlose Kommunikation innerhalb und zwischen Maschinen). Die eingebaute Datenbank (Mnesia) ist ebenfalls von Natur aus verbreitet.

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

  • 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 gebaut, um diese grundlegende Natur zu berücksichtigen. Eine Funktion, die zu dieser Anforderung beiträgt: Erlangs "freie" Prozesse (> 32000 können gleichzeitig ausgeführt werden).

  • Überwachung : Viele verschiedene Strategien zur Prozessüberwachung mit Neustartstrategien, Schwellenwerten usw. Hilft bei der leichteren Wiederherstellung nach Eckfällen / Überlastung, während die Probleme für die spätere Fehlerbehebung, Post-Mortem-Analyse usw. beibehalten werden.

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

  • Live-Debugging : Die Möglichkeit, sich nach Belieben bei Live-Knoten anzumelden, hilft bei der Fehlerbehebung . Das Debuggen kann live mit vollem Zugriff auf den laufenden Status eines Prozesses durchgeführt werden. Auch die integrierten Tools zur Fehlerberichterstattung 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 (hohe Verfügbarkeit). Die Hauptkomponente der funktionalen Natur, die großzügig zum Ziel beiträgt, ist IMO: "Nichts teilen". Diese Eigenschaft hilft, "Nebenwirkungen" einzudämmen und den Bedarf an kostspieligen Synchronisationsmechanismen zu verringern.

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

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


4
Könnten Sie Folgendes erklären: "Eine Sache, in der Erlang nicht wirklich gut ist: die Verarbeitung großer Datenblöcke."
Kirill Trofimov

9
Er meint Dinge wie das Dekodieren von MPEG-Daten. Es gibt zu viele numerische Berechnungen, für die Erlang nicht optimiert ist. Wenn bei der Verarbeitung nur große Datenblöcke von einem Ort zum anderen gemischt werden müssen, ist Erlang ziemlich gut darin. (Dateien zu TPC-Sockets usw.)
Christian

4
Sie können gemeinsam genutzte Datenblöcke nicht aktualisieren (in Erlang gibt es keine Zeiger). Daher müssen Daten prozessübergreifend übertragen werden, was wiederum zu Ineffizienzen führt.
Jldupont

Abgesehen davon sagte Ericsson, dass Erlang die Verfügbarkeit von 9x9 erreicht hat.
Jono

Wir denken darüber nach, die hier zitierte Schwäche von Erlang zu verbessern.
Shelby Moore III

19

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 (lesenswert vollständig):

Die Dokument-, Ansichts-, Sicherheits- und Replikationsmodelle, die spezielle Abfragesprache, das effiziente und robuste Festplattenlayout und die gleichzeitige und zuverlässige Natur der Erlang-Plattform sind sorgfältig integriert, um ein zuverlässiges und effizientes System zu gewährleisten.


1
Für einige ihrer Telekommunikationssysteme.
Jldupont

1
CouchDB ist keine OO-Datenbank, sondern eine dokumentenorientierte Datenbank.
Ich gebe schreckliche Ratschläge 5.

5
Ich gebe schreckliche Ratschläge - ja, natürlich. Korrigiert. Ich würde deinen Spitznamen ändern :-)
Brian Agnew

Es gab eine frühere von Ericsson verwendete Parallelitätssprache namens PLEX (Programming Language for Exchanges), die in den späten 80er Jahren bis jetzt digitale Telefonvermittlungen betrieb. Ich denke, erlang ist eine verfeinerte Version von PLEX.
user50619

19

Wir haben mit Erlang eine Wettbörse (auch bekannt als Prognosemarkt) aufgebaut. Wir haben Erlang aufgrund der integrierten Parallelität einigen der traditionelleren Finanzsprachen (C ++, Java usw.) vorgezogen. Märkte funktionieren sehr ähnlich wie Telefonien. Unser CTO hielt einen Vortrag über unsere Verwendung von Erlang beim CTO-Vortrag .

Wir verwenden auch CouchDB und RabbitMQ als Teil unseres Stacks.


10
Nur eine Anmerkung, der Link zu Ihrem Vortrag ist jetzt privat.
JDong

15

Ich bin darauf gestoßen, dass gerade ein Bericht verfasst wird: Erlang in Acoustic Ray Tracing .

Es ist ein Erfahrungsbericht über den Versuch einer Forschungsgruppe, Erlang für die akustische Strahlverfolgung zu verwenden. Sie fanden heraus, dass es zwar einfacher war, das Programm zu schreiben, aber weniger fehlerhaft usw. Es war schlechter skaliert und 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 sich die Leute, die das Papier geschrieben haben, in der Phase des ersten Lernens von Erlang befanden und möglicherweise nicht die richtigen Entwicklungsverfahren für CPU-intensives Erlang gekannt haben.


2
Das Papier ist eine interessante Lektüre. Diese Verallgemeinerung der Eignung wird nicht direkt vorgenommen, sondern es wird darauf hingewiesen, dass Erlang als ungeeignet eingestuft wurde, wenn Sie versuchen, auf einem IBM Cell BE-Prozessor in Playstation 3 bereitzustellen. Außerdem wird angegeben, dass sie mit Erlang unerfahren sind. Mit mehr Erfahrung und geeigneter Hardware sind sie möglicherweise zu einem anderen Ergebnis gekommen. Ich habe den Eindruck, dass ihr Code möglicherweise die Verwendung nicht rekursiver Funktionen enthält. Wenn ja, kann dies dazu beitragen, die Probleme mit Speicher, Speicherbereinigung, Abstürzen und Leistung zu erklären.
Tim

3
Ich denke, Sie haben den Artikel falsch verstanden. Die Unfähigkeit, auf einem Cell-Prozessor zu laufen, war unglücklich, aber es war nur eine Randnotiz. Der 12-fache Leistungsunterschied zwischen einer C ++ - und einer Erlang-Implementierung, die auf einer x86-Plattform ausgeführt wird, war das eigentliche Problem, kombiniert mit der Tatsache, dass sie nicht linear skaliert wurde. Das heißt, sie waren neu in der Sprache und haben möglicherweise ein paar unkluge Codepfade eingeschlagen ... so ist das Leben. Ich bin allerdings neugierig auf die nichtlineare Skalierung.
CoderTao

4
Ich stehe in Bezug auf das 12-fache Leistungsproblem in Bezug auf Intel versus Cell korrigiert, aber ich behaupte, dass Erlang für CPU-herausfordernde Szenarien gut geeignet sein kann. Das heißt nicht, dass sie nicht richtig sind: Dies könnte wirklich ein Problem sein, bei dem eine gute C ++ - Lösung immer eine gute Erlang-Lösung schlägt. Vielleicht erinnert dies einige Leute daran, dass Erlang wie jede andere Technologie keine Silberkugel ist und nur dann leuchtet, wenn es am richtigen Ort richtig eingesetzt wird.
Tim

14

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


4
Lesen Sie aus dem Artikel: "Während Harvester ursprünglich in Perl geschrieben wurde, machen Erlangs Parallelitätskonstrukte auf hoher Ebene - zusammen mit den OTP-Entwurfsprinzipien - es zu einer idealen Plattform für die Erstellung zuverlässiger, fehlertoleranter und skalierbarer Anwendungen wie Harvester. Der daraus resultierende Service ist skalierbarer, verfügbarer, zuverlässiger und in der Lage, strengere Service-Level-Agreements (SLA) auf einer leichteren Codebasis und weniger teuren Entwicklungsaufwand einzuhalten. " Vielen Dank :)
Roberto Aloi

11

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/ (Antwort von Jerf)

Es ist wichtig zu wissen, dass Erlangs 4 Teile: die Sprache selbst, die Standardbibliotheken der VMs (BEAM, hipe) (plus Module auf Github, CEAN usw.) und die Entwicklungsumgebung ständig aktualisiert / erweitert / verbessert werden. Ich erinnere mich zum Beispiel, dass ich gelesen habe, dass sich die Gleitkomma-Leistung verbessert hat, als der Autor von Wings3d erkannte, dass sie verbessert werden muss (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 anfangen, Web-App-Frameworks und HTTP-Server zu erstellen, (zumindest teilweise) zu einer verbesserten Handhabung von Regex und Binärdateien. Und es gibt all die Arbeit, die HiPE und SMP integriert, das Dialysatorprojekt, das Testen mehrerer Einheiten und das Entstehen von Bibliotheken, die entstehen.

Der Sweet Spot wächst also. Das Schwierige ist, dass die offiziellen Dokumente nicht sehr gut mithalten können und die Mailingliste und das Volumen der erlangenden Blogosphäre schnell wachsen


10

Wir verwenden Erlang, um die Back-End-Muskelkraft für unser wirklich browserbasiertes Echtzeit-Multiplayer-Spiel Pixza bereitzustellen . Wir verwenden kein Flash oder andere Plugins von Drittanbietern, obwohl das Spiel ein Echtzeit-Multiplayer ist. Wir verwenden stattdessen reine JS- und COMET-Techniken. Und Erlang unterstützt die "echte Aktualität" von Pixza.


10

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

Ich denke, es glänzt wirklich bei netzwerkbezogenen Aufgaben und macht es ziemlich einfach, einfache und komplexe Netzwerkdienste gleichermaßen darin zu strukturieren und zu implementieren. Verteilung, Fehlertoleranz und Leistung sind leicht zu erreichen, da in Erlang bereits einige der wichtigsten Inhaltsstoffe integriert sind und diese seit langem in kritischen Produktionsinfrastrukturen eingesetzt werden. Es ist also nicht wie "die neue Hip-Technologie-Sache 0.0.2 Alpha".

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


6

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.