Dove viene utilizzato Erlang e perché? [chiuso]


258

Vorrei sapere un elenco delle applicazioni / siti Web / soluzioni più comuni in cui viene utilizzato Erlang, con successo o meno .

Sarebbe molto apprezzato anche spiegare perché viene utilizzato in una soluzione specifica anziché in altri linguaggi di programmazione.

Elencare i casi di studio BAD Erlang (casi in cui Erlang viene utilizzato in modo improprio) sarebbe interessante.


13
Il problema con i case study BAD è che non diventano famosi o vedono la luce del giorno.
Eric,

2
WHATSAPP utilizza Erlang! Google it per i dettagli
Muzaaya Joshua

18
Perché è chiuso? Ho cercato su Google la domanda esatta e sono stato condotto qui.
Canhazbits il

EMqtt è un broker MQTT molto popolare e oggigiorno si sta abituando così tanto all'IoT, sviluppato in erlang con 1 milione di utenti di sostenibilità.
LAMRIN TAWSRAS,

Risposte:


214

Dalla programmazione di Erlang :

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

Molte aziende utilizzano Erlang nei loro sistemi di produzione:

Amazon utilizza Erlang per implementare SimpleDB, fornendo servizi di database come parte di Amazon Elastic Compute Cloud (EC2).

Yahoo! lo utilizza nel suo servizio di social bookmarking, Delicious, che ha oltre 5 milioni di utenti e 150 milioni di URL preferiti.

Facebook utilizza Erlang per alimentare il back-end del suo servizio di chat, gestendo oltre 100 milioni di utenti attivi.

WhatsApp utilizza Erlang per eseguire server di messaggistica, raggiungendo fino a 2 milioni di utenti connessi per server.

T-Mobile utilizza Erlang nei suoi sistemi SMS e di autenticazione.

Motorola utilizza Erlang nei prodotti di elaborazione delle chiamate nel settore della pubblica sicurezza.

Ericsson utilizza Erlang nei suoi nodi di supporto, utilizzati nelle reti mobili GPRS e 3G in tutto il mondo.


Le più popolari applicazioni Erlang open source includono:

• Il modellatore di suddivisione 3D Wings 3D , utilizzato per modellare e strutturare mesh poligonali.

• Il sistema Ejabberd , che fornisce un server di applicazioni di messaggistica istantanea (IMMP) basato su Extensible Messaging and Presence Protocol (XMPP).

• Il database orientato ai documenti "senza schema" di CouchDB , che offre scalabilità tra cluster multicore e multiserver.

• La libreria MochiWeb che fornisce supporto per la creazione di server HTTP leggeri. Viene utilizzato per alimentare servizi come MochiBot e MochiAds, che servono quotidianamente contenuti generati dinamicamente a milioni di spettatori.

RabbitMQ , un'implementazione del protocollo di messaggistica AMQP. AMQP è uno standard emergente per la messaggistica aziendale ad alte prestazioni.


27
Ramiz Uddin - di quale nuovo sistema stai parlando quando dici "No, non lo è?"
Great Turtle,

10
@RamizUddin di quale nuovo sistema stai parlando quando dici "No, non lo è?" (Sto solo ripetendo una domanda di Great Turtle che un paio di anni fa ha dimenticato la @ davanti al tuo nome - Penso che meriti comunque una risposta)
Walter Tross


Facebook ha rovinato la semplicità e le prestazioni di WhatsApp.
Krishnadas PC

Puoi aggiornare il link non funzionante per il libro?
pradyumnad,

83

ejabberd è una delle applicazioni erlang più conosciute e quella con cui ho imparato erlang.

Penso che sia uno dei progetti più interessanti per l'apprendimento di Erlang perché si sta davvero basando sulla forza di Erlang. (Tuttavia alcuni sosterranno che non è OTP, ma non preoccuparti che ci sia ancora un sacco di ottimo codice all'interno ...)

Perché ?

Un server XMPP (come ejabberd) può essere visto come un router di alto livello, instradando i messaggi tra gli utenti finali. Naturalmente ci sono altre funzionalità, ma questo è l'aspetto più importante di un server di messaggistica istantanea. Deve instradare molti messaggi contemporaneamente e gestire molte connessioni TCP / IP.

Quindi abbiamo 2 caratteristiche:

  • gestire molte connessioni
  • instradare i messaggi dati alcuni aspetti del messaggio

Questi sono esempi in cui brilla erlang.

gestire molte connessioni

È molto semplice creare server TCP / IP scalabili non bloccanti con erlang. In effetti, è stato progettato per risolvere questo problema. E dato che può generare centinaia di migliaia di processi (e non thread , è un approccio share-nothing, che è più semplice da progettare), ejabberd è progettato come un insieme di processi erlang (che possono essere distribuiti su più server):

  • processo di connessione client
  • processo del router
  • processo di chatroom
  • processi da server a server

Tutti si scambiano messaggi.

instradare i messaggi dati alcuni aspetti del messaggio

Un'altra caratteristica molto adorabile di erlang è la corrispondenza dei motivi . È usato in tutta la lingua.

Ad esempio, di seguito:

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.

Sono 5 diverse versioni della accessfunzione. Erlang selezionerà la versione più appropriata alla luce degli argomenti ricevuti. ( Configè una struttura di tipo #configche ha un typeattributo).

Ciò significa che è molto semplice e molto più chiaro del concatenamento if/elseo switch/casedella creazione di regole aziendali.

Per concludere

Scrivere server scalabili, questo è il punto centrale di Erlang. Tutto è progettato per renderlo facile. Alle due funzionalità precedenti, aggiungerei:

  • aggiornamento del codice a caldo
  • mnesia, database relazionale distribuito (incluso nella distribuzione di base)
  • mochiweb, su cui sono basati la maggior parte dei server erlang http
  • supporto binario (decodifica e codifica del protocollo binario facile come sempre)
  • una grande comunità con grandi progetti open source ( ejabberd, couchdbma anche webmachine, riake una serie di librerie molto facili da incorporare)

Meno LOC

C'è anche questo articolo di Richard Jones. Ha riscritto un'applicazione da C ++ a erlang: 75% in meno di righe in erlang.


6
Ad essere onesti, quasi ogni codice C ++ riscritto in un linguaggio moderno ridurrebbe il LOC.
Zack

52

L'elenco delle applicazioni più comuni per Erlang è stato trattato (CouchDb, ejabberd, RabbitMQ ecc.) Ma vorrei contribuire con il seguente.

Il motivo per cui viene utilizzato in queste applicazioni deriva dal punto di forza di Erlang: la gestione della disponibilità delle applicazioni .

Erlang è stato costruito da zero per l'ambiente telco che richiede che i sistemi soddisfino almeno la disponibilità 5x9 (tempo di attività annuale del 99,999%). Questa cifra non lascia molto spazio ai tempi di inattività durante un anno! Per questo motivo principalmente, Erlang viene caricato con le seguenti funzionalità (non esaustive):

  • Scalabilità orizzontale (capacità di distribuire facilmente i lavori oltre i confini della macchina attraverso comunicazioni interne e interne alla macchina senza interruzioni). Anche il database integrato (Mnesia) è distribuito per natura.

  • Scalabilità verticale (capacità di distribuire i lavori attraverso le risorse di elaborazione sulla stessa macchina): SMP è gestito in modo nativo.

  • Scambio di codice : la possibilità di aggiornare / aggiornare il codice in tempo reale durante le operazioni

  • Asincrono : il mondo reale è asincrono, quindi Erlang è stato costruito per tenere conto di questa natura di base. Una caratteristica che contribuisce a questo requisito: i processi "liberi" di Erlang (> 32000 possono essere eseguiti contemporaneamente).

  • Supervisione : molte diverse strategie per la supervisione del processo con strategie di riavvio, soglie, ecc. Aiuta a recuperare più facilmente da casi angolari / sovraccarico, pur mantenendo tracce dei problemi per la successiva risoluzione dei problemi, analisi post mortem ecc.

  • Gestione delle risorse : strategie di pianificazione, monitoraggio delle risorse ecc. Si noti che lo scheduler di processo predefinito opera con il ridimensionamento O (1).

  • Debug live : la possibilità di "accedere" a nodi live a piacimento aiuta le attività di risoluzione dei problemi. Il debug può essere eseguito in tempo reale con pieno accesso a qualsiasi stato di esecuzione del processo. Anche gli strumenti integrati per la segnalazione degli errori sono molto utili (ma a volte un po 'scomodi da usare).

Ovviamente potrei parlare delle sue radici funzionali ma questo aspetto è in qualche modo ortogonale all'obiettivo principale (alta disponibilità). La componente principale della natura funzionale che contribuisce generosamente all'obiettivo target è, IMO: "non condividere nulla". Questa caratteristica aiuta a contenere "effetti collaterali" e riduce la necessità di costosi meccanismi di sincronizzazione.

Immagino che tutte queste caratteristiche aiutino a estendere un caso per l'utilizzo di Erlang in applicazioni business-critical.

Una cosa a cui Erlang non è veramente bravo : elaborare grandi blocchi di dati.


4
Potresti spiegare quanto segue: "Una cosa su cui Erlang non è molto bravo: elaborare grandi blocchi di dati".
Kirill Trofimov,

9
Intende cose come la decodifica dei dati mpeg. Esistono troppi calcoli numerici per i quali Erlang non è ottimizzato. Se l'elaborazione comporta solo lo shuffle di grandi blocchi di dati da un luogo all'altro, allora Erlang è abbastanza bravo. (File su socket TPC, ecc.)
Christian,

4
Non è possibile aggiornare blocchi di dati condivisi (non ci sono puntatori in Erlang) e quindi i dati devono essere trasferiti attraverso processi che a loro volta si traducono in inefficienze.
jldupont,

A parte questo, credo che Ericsson abbia affermato che Erlang ha raggiunto la disponibilità di 9x9.
Jono,

Stiamo pensando di migliorare la debolezza di Erlang citata qui.
Shelby Moore III,

19

Erlang proviene da Ericsson ed è utilizzato in alcuni dei loro sistemi di telecomunicazione.

Al di fuori delle telecomunicazioni, CouchDb (un database orientato ai documenti) è probabilmente l'applicazione Erlang più conosciuta finora.

Perché Erlang Dalla panoramica (vale la pena leggere per intero):

Il documento, la vista, i modelli di sicurezza e replica, il linguaggio di query per scopi speciali, il layout del disco efficiente e robusto e la natura concorrente e affidabile della piattaforma Erlang sono tutti attentamente integrati per un sistema affidabile ed efficiente.


1
Per alcuni dei loro sistemi di telecomunicazione.
jldupont,

1
CouchDB non è un database OO, è un database orientato ai documenti.
CONSIGLIO TERRIBILE

5
@I CONSIGLI TERRIBILI - sì, certo. Corretto. Vorrei cambiare il tuo soprannome :-)
Brian Agnew,

C'era un precedente linguaggio di concorrenza utilizzato da Ericsson chiamato PLEX (Programming Language for Exchanges), che gestiva i centralini telefonici digitali fino alla fine degli anni '80. Penso che Erlang sia una versione raffinata di PLEX.
user50619

19

Abbiamo costruito uno scambio di scommesse (noto anche come mercato di previsione) utilizzando Erlang. Abbiamo scelto Erlang su alcuni dei linguaggi finanziari più tradizionali (C ++, Java ecc.) A causa della concorrenza integrata. I mercati funzionano in modo molto simile agli scambi di telefonia. Il nostro CTO ha tenuto un discorso sul nostro uso di Erlang durante il CTO .

Usiamo anche CouchDB e RabbitMQ come parte del nostro stack.


10
Solo una nota, il link al tuo discorso è ora privato.
JDong,

15

Mi sono imbattuto in questo è in procinto di scrivere un rapporto: Erlang in Acoustic Ray Tracing .

È un rapporto di esperienza sul tentativo di un gruppo di ricerca di usare Erlang per Acoustic Ray Tracing. Hanno scoperto che mentre era più facile scrivere il programma, meno buggy, ecc. Ridimensionava peggio ed eseguiva 10 volte più lentamente di un programma C comparabile. Quindi un punto in cui potrebbe non essere adatto sono gli scenari ad alta intensità di CPU.

Si noti, tuttavia, che la gente ha scritto che il documento era nelle fasi del primo apprendimento di Erlang e potrebbe non aver conosciuto le procedure di sviluppo adeguate per Erlang ad alta intensità di CPU.


2
L'articolo è una lettura interessante. Non rende direttamente tale generalizzazione sull'idoneità, indica che hanno trovato Erlang inadatto se si sta tentando di distribuire su un processore IBM Cell BE, presente nella Playstation 3. Indica inoltre che non hanno esperienza con Erlang. Con più esperienza e hardware adeguato potrebbero essere arrivati ​​a una conclusione diversa. Ho l'impressione che il loro codice possa aver incluso l'uso di funzioni non ricorsive della coda; in tal caso, potrebbe essere utile spiegare i loro problemi con la memoria, la garbage collection, gli arresti anomali e le prestazioni.
Tim

3
Penso che tu abbia letto male l'articolo. L'incapacità di funzionare su un processore Cell era sfortunata, ma era solo una nota a margine. La differenza di prestazioni 12x tra un C ++ e un'implementazione di Erlang in esecuzione su una piattaforma x86 era il vero problema, combinato con il fatto che non si ridimensionava linearmente. Detto questo, erano nuovi nella lingua e potrebbero aver preso alcuni percorsi di codice poco saggi ... tale è la vita. Sono curioso del ridimensionamento non lineare però.
CoderTao,

4
Sono corretto sul problema delle prestazioni 12x rispetto a Intel rispetto a Cell, ma sostengo che Erlang può adattarsi bene a scenari difficili della CPU. Questo non vuol dire che non hanno ragione: questo potrebbe davvero essere un problema in cui una buona soluzione C ++ batterà sempre una buona soluzione Erlang. Forse questo va in qualche modo a servire da promemoria per alcune persone che Erlang, come qualsiasi altra tecnologia, non è un proiettile d'argento e brillerà solo se usato nel modo giusto nel posto giusto.
Tim

14

Apparentemente, Yahoo ha usato Erlang per creare qualcosa che chiama Harvester. Articolo a riguardo qui: http://www.ddj.com/architect/220600332


4
Leggendo dall'articolo: "Mentre Harvester è stato originariamente scritto in Perl, i costrutti di concorrenza di alto livello di Erlang - insieme ai principi di progettazione OTP - lo rendono una piattaforma ideale per la creazione di applicazioni affidabili, tolleranti ai guasti e scalabili come Harvester. Il servizio risultante è più scalabile, disponibile, affidabile e in grado di rispettare gli accordi di servizio più rigorosi (SLA) su una base di codice più leggera e sforzi di sviluppo meno costosi ". Grazie mille :)
Roberto Aloi,

11

A cosa serve erlang?

http://beebole.com/en/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/ (risposta del jerf)

È importante rendersi conto che le 4 parti di Erlang: il linguaggio stesso, le librerie standard VM (BEAM, hipe) standard (oltre ai moduli su github, CEAN, ecc.) E l'ambiente di sviluppo vengono costantemente aggiornati / ampliati / migliorati. Ad esempio, ricordo di aver letto che le prestazioni in virgola mobile sono migliorate quando l'autore di Wings3d ha capito che doveva migliorare (non riesco a trovare una fonte per questo). E questo ragazzo ha appena scritto al riguardo:

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

Un paio di anni fa, la pubblicità Wide Finder di Tim Bray e tutte le persone che iniziarono a fare framework per app Web e server HTTP portano (almeno in parte) a migliorare la gestione di regex e binari. E c'è tutto il lavoro che integra HiPE e SMP, il progetto dializzatore, test di unità multiple e la creazione di librerie che nascono, ..

Quindi il suo punto debole si sta espandendo, La cosa difficile è che i documenti ufficiali non riescono a tenere il passo molto bene, e la mailing list e il volume della blogosfera stanno crescendo rapidamente


10

Stiamo usando Erlang per fornire la potenza muscolare del back-end per il nostro gioco multi-player Pixza basato su browser in tempo reale . Non utilizziamo Flash o altri plug-in di terze parti, sebbene il gioco sia multiplayer in tempo reale. Utilizziamo invece tecniche JS e COMET pure. Ed Erlang sostiene la "realtà reale" di Pixza.


10

Sto lavorando per Wooga, una società di giochi sociali e usiamo Erlang per alcuni dei nostri back-end di gioco (fondamentalmente apis http per milioni di utenti giornalieri) e servizi ausiliari come provider di notifiche push iOS, pagamenti ecc.

Penso che brilli davvero nelle attività relative alla rete e lo rende piuttosto semplice strutturare e implementare allo stesso modo servizi di rete semplici e complessi. La distribuzione, la tolleranza agli errori e le prestazioni sono facili da ottenere perché Erlang ha già alcuni degli ingredienti chiave incorporati e vengono utilizzati a lungo in infrastrutture di produzione critiche. Quindi non è come "la nuova tecnologia dell'anca 0.0.2 alfa".

So che anche altre società di giochi usano Erlang. Dovresti essere in grado di trovare presentazioni su slideshare a riguardo.


6

Erlang trae la sua forza dall'essere un linguaggio funzionale senza memoria condivisa. Quindi IMO, Erlang non sarà adatto per applicazioni che richiedono manipolazioni di memoria sul posto. Modifica delle immagini per esempio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.