Où Erlang est-il utilisé et pourquoi? [fermé]

258

Je voudrais connaître une liste des applications / sites Web / solutions les plus courantes où Erlang est utilisé, avec succès ou non .

Expliquer pourquoi il est utilisé dans une solution spécifique au lieu d'autres langages de programmation serait également très apprécié.

En énumérant les études de cas de BAD Erlang (cas dans lesquels Erlang est mal utilisé), il serait également intéressant.

Roberto Aloi
la source
13
Le problème avec les études de cas BAD est qu'elles ne deviennent pas vraiment célèbres ou ne voient pas la lumière du jour.
Eric
2
WHATSAPP utilise Erlang! Google pour plus de détails
Muzaaya Joshua
18
Pourquoi est-ce fermé? J'ai googlé la question exacte et a été conduit ici.
canhazbits
EMqtt est un courtier MQTT très populaire et de nos jours très utilisé dans l'IoT, développé à erlang avec la durabilité d'un million d'utilisateurs.
LAMRIN TAWSRAS

Réponses:

214

De la programmation d'Erlang :

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

De nombreuses entreprises utilisent Erlang dans leurs systèmes de production:

Amazon utilise Erlang pour implémenter SimpleDB, fournissant des services de base de données dans le cadre d'Amazon Elastic Compute Cloud (EC2).

Yahoo! l'utilise dans son service de bookmarking social, Delicious, qui compte plus de 5 millions d'utilisateurs et 150 millions d'URL marquées d'un signet.

Facebook utilise Erlang pour alimenter le backend de son service de chat, gérant plus de 100 millions d'utilisateurs actifs.

WhatsApp utilise Erlang pour exécuter des serveurs de messagerie, atteignant jusqu'à 2 millions d'utilisateurs connectés par serveur.

T-Mobile utilise Erlang dans ses systèmes de SMS et d'authentification.

Motorola utilise Erlang dans les produits de traitement des appels dans l'industrie de la sécurité publique.

Ericsson utilise Erlang dans ses nœuds de support, utilisés dans les réseaux mobiles GPRS et 3G du monde entier.


Les applications open source Erlang les plus populaires sont les suivantes:

• Le modeleur de subdivision 3D Wings 3D , utilisé pour modéliser et texturer des maillages polygonaux.

• Le système Ejabberd , qui fournit un serveur d'application de messagerie instantanée (IM) basé sur le protocole XMPP (Extensible Messaging and Presence Protocol).

• La base de données CouchDB «sans schéma» orientée document, offrant une évolutivité à travers les clusters multicœurs et multiserveurs.

• La bibliothèque MochiWeb qui prend en charge la construction de serveurs HTTP légers. Il est utilisé pour alimenter des services tels que MochiBot et MochiAds, qui fournissent quotidiennement du contenu généré dynamiquement à des millions de téléspectateurs.

RabbitMQ , une implémentation du protocole de messagerie AMQP. AMQP est une nouvelle norme pour la messagerie d'entreprise haute performance.

JRL
la source
27
Ramiz Uddin - de quel nouveau système parlez-vous lorsque vous dites "non, non?"
Great Turtle
10
@RamizUddin de quel nouveau système parlez-vous lorsque vous dites "non, ce n'est pas le cas?" (Je répète juste une question de Great Turtle qui, il y a quelques années, a oublié le @ devant votre nom - je pense que cela mérite quand même une réponse)
Walter Tross
4
facebook s'est éloigné d'erlang: facebook.com/notes/facebook-engineering/… et quora.com/…
A. Binzxxxxxx
Facebook a ruiné la simplicité et les performances de WhatsApp.
Krishnadas PC
Pouvez-vous mettre à jour le lien brisé du livre?
pradyumnad
83

ejabberd est l'une des applications erlang les plus connues et celle avec laquelle j'ai appris erlang.

Je pense que c'est l'un des projets les plus intéressants pour apprendre l'erlang car il s'appuie vraiment sur la force d'erlang. (Cependant, certains diront que ce n'est pas OTP, mais ne vous inquiétez pas, il y a encore une mine de code à l'intérieur ...)

Pourquoi ?

Un serveur XMPP (comme ejabberd) peut être considéré comme un routeur de haut niveau, acheminant les messages entre les utilisateurs finaux. Bien sûr, il existe d'autres fonctionnalités, mais c'est l'aspect le plus important d'un serveur de messagerie instantanée. Il doit acheminer de nombreux messages simultanément et gérer de nombreuses connexions TCP / IP.

Nous avons donc 2 fonctionnalités:

  • gérer de nombreuses connexions
  • acheminer les messages en fonction de certains aspects du message

Ce sont des exemples où erlang brille.

gérer de nombreuses connexions

Il est très facile de construire des serveurs TCP / IP évolutifs non bloquants avec erlang. En fait, il a été conçu pour résoudre ce problème. Et étant donné qu'il peut générer des centaines de milliers de processus (et non des threads , c'est une approche de partage rien, qui est plus simple à concevoir), ejabberd est conçu comme un ensemble de processus erlang (qui peuvent être distribués sur plusieurs serveurs):

  • processus de connexion client
  • processus de routeur
  • processus de chat
  • processus serveur à serveur

Tous échangent des messages.

acheminer les messages en fonction de certains aspects du message

Une autre caractéristique très attrayante d'erlang est la correspondance de motifs . Il est utilisé dans toute la langue.

Par exemple, dans ce qui suit:

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.

C'est 5 versions différentes de la accessfonction. Erlang sélectionnera la version la plus appropriée compte tenu des arguments reçus. ( Configest une structure de type#config qui a un typeattribut).

Cela signifie que c'est très facile et beaucoup plus clair que le chaînage if/elseouswitch/case d'établir des règles commerciales.

Envelopper

Écrire des serveurs évolutifs, c'est tout l'intérêt d'Erlang. Tout est conçu pour que cela soit facile. Sur les deux fonctionnalités précédentes, j'ajouterais:

  • mise à niveau de code à chaud
  • mnesia, base de données relationnelle distribuée (incluse dans la distribution de base)
  • mochiweb, sur lequel la plupart des serveurs http erlang sont construits
  • prise en charge binaire (décodage et encodage du protocole binaire plus facile que jamais)
  • une grande communauté avec de grands projets open source ( ejabberd, couchdbmais aussi webmachine, riaket une flopée de bibliothèques très faciles à intégrer)

Moins de LOC

Il y a aussi cet article de Richard Jones. Il a réécrit une application de C ++ vers erlang: 75% de lignes en moins dans erlang.

Eric
la source
6
Pour être juste, presque tout code C ++ réécrit dans un langage moderne réduirait le LOC.
Zack
52

La liste des applications les plus courantes pour Erlang a été couverte (CouchDb, ejabberd, RabbitMQ, etc.) mais je voudrais apporter la contribution suivante.

La raison pour laquelle il est utilisé dans ces applications vient de la force principale d'Erlang: la gestion de la disponibilité des applications .

Erlang a été construit à partir de zéro pour l'environnement des télécommunications, ce qui nécessite que les systèmes répondent à une disponibilité d'au moins 5x9 (99,999% de disponibilité annuelle). Ce chiffre ne laisse pas beaucoup de place aux temps d'arrêt pendant un an! Pour cette raison principalement, Erlang est livré avec les fonctionnalités suivantes (non exhaustives):

  • Évolutivité horizontale (capacité de répartir facilement les travaux à travers les frontières de la machine grâce à des communications intra et inter machine homogènes). La base de données intégrée (Mnesia) est également distribuée par nature.

  • Évolutivité verticale (possibilité de répartir les tâches entre les ressources de traitement sur la même machine): SMP est géré de manière native.

  • Échange à chaud de code : la possibilité de mettre à jour / mettre à niveau le code en direct pendant les opérations

  • Asynchrone : le monde réel est asynchrone, donc Erlang a été construit pour tenir compte de cette nature fondamentale. Une caractéristique qui contribue à cette exigence: les processus "gratuits" d'Erlang (> 32000 peuvent s'exécuter simultanément).

  • Supervision : de nombreuses stratégies différentes pour la supervision des processus avec des stratégies de redémarrage, des seuils, etc.

  • Gestion des ressources : stratégies de planification, surveillance des ressources, etc. Notez que le planificateur de processus par défaut fonctionne avec une mise à l'échelle O (1).

  • Débogage en direct : la possibilité de «se connecter» à volonté aux nœuds en direct facilite les activités de dépannage. Le débogage peut être effectué en direct avec un accès complet à l'état d'exécution de n'importe quel processus. Les outils intégrés de rapport d'erreurs sont également très utiles (mais parfois quelque peu délicats à utiliser).

Bien sûr, je pourrais parler de ses racines fonctionnelles mais cet aspect est quelque peu orthogonal à l'objectif principal (haute disponibilité). Le principal élément de la nature fonctionnelle qui contribue généreusement à l'objectif visé est l'OMI: «ne rien partager». Cette caractéristique permet de contenir les "effets secondaires" et de réduire le besoin de mécanismes de synchronisation coûteux.

Je suppose que toutes ces caractéristiques aident à étendre l'utilisation de Erlang dans des applications critiques.

Une chose que Erlang n'est pas vraiment bon : le traitement de gros blocs de données.

jldupont
la source
4
Pourriez-vous expliquer ce qui suit: "Une chose à laquelle Erlang n'est pas vraiment bon: traiter de gros blocs de données."
Kirill Trofimov
9
Il veut dire des choses comme le décodage des données MPEG. Il y a trop de calculs numériques pour lesquels Erlang n'est pas optimisé. Si le traitement implique simplement de mélanger de gros blocs de données d'un endroit à un autre, alors Erlang est assez bon dans ce domaine. (Fichiers vers les prises TPC, etc.)
Christian
4
Vous ne pouvez pas mettre à jour des blocs de données partagés (il n'y a pas de pointeurs dans Erlang) et, par conséquent, les données doivent être transférées entre les processus, ce qui se traduit à son tour par des inefficacités.
jldupont
En passant, Ericsson, je crois, a déclaré qu'Erlang avait atteint la disponibilité de 9x9.
Jono
Nous envisageons d' améliorer la faiblesse d'Erlang citée ici.
Shelby Moore III
19

Erlang vient d'Ericsson et est utilisé dans certains de leurs systèmes de télécommunications.

En dehors des télécoms, CouchDb (une base de données orientée documents) est probablement l'application Erlang la plus connue à ce jour.

Pourquoi Erlang? De l' aperçu (mérite d'être lu en entier):

Les modèles de document, de vue, de sécurité et de réplication, le langage de requête spécial, la disposition de disque efficace et robuste et la nature simultanée et fiable de la plateforme Erlang sont tous soigneusement intégrés pour un système fiable et efficace.

Brian Agnew
la source
1
Pour certains de leurs systèmes de télécommunications.
jldupont
1
CouchDB n'est pas une base de données OO, c'est une base de données orientée document.
JE DONNE DES CONSEILS TERRIBLES
5
@Je donne des conseils terribles - oui, bien sûr. Corrigée. Je changerais de surnom :-)
Brian Agnew
Il y avait un langage de concurrence antérieur utilisé par Ericsson appelé PLEX (langage de programmation pour les échanges), qui gérait les échanges téléphoniques numériques à la fin des années 80 jusqu'à maintenant. Je pense que erlang est une version raffinée de PLEX.
user50619
19

Nous avons construit un échange de paris (aka marché de prédiction) en utilisant Erlang. Nous avons choisi Erlang plutôt que certains des langages financiers les plus traditionnels (C ++, Java, etc.) en raison de la concurrence intégrée. Les marchés fonctionnent de manière très similaire aux échanges téléphoniques. Notre CTO a donné une conférence sur notre utilisation d'Erlang lors d'une conférence CTO .

Nous utilisons également CouchDB et RabbitMQ dans le cadre de notre pile.

Jason Trost
la source
10
Juste une note, le lien vers votre conférence est désormais privé.
JDong
15

Je suis tombé sur ce qui est en train de rédiger un rapport: Erlang in Acoustic Ray Tracing .

Il s'agit d'un rapport d'expérience sur la tentative d'un groupe de recherche d'utiliser Erlang pour le traçage de rayons acoustiques. Ils ont constaté que s'il était plus facile d'écrire le programme, moins de bugs, etc. Il évoluait moins bien et fonctionnait 10 fois plus lentement qu'un programme C comparable. Donc, un endroit où il peut ne pas être bien adapté est les scénarios gourmands en ressources processeur.

Notez cependant que les personnes qui ont écrit le document étaient au stade de l'apprentissage d'Erlang et ne connaissaient peut-être pas les procédures de développement appropriées pour Erlang intensif en CPU.

CoderTao
la source
2
Le document est une lecture intéressante. Cela ne fait pas directement cette généralisation sur l'adéquation, cela indique qu'ils ont trouvé Erlang inadapté si vous essayez de déployer sur un processeur IBM Cell BE, trouvé sur la Playstation 3. Il indique également qu'ils ne connaissent pas Erlang. Avec plus d'expérience et de matériel adapté, ils sont peut-être arrivés à une conclusion différente. J'ai l'impression que leur code peut avoir inclus l'utilisation de fonctions non récursives; si c'est le cas, cela peut expliquer en partie leurs problèmes de mémoire, de récupération de place, de plantages et de performances.
Tim
3
Je pense que vous avez mal lu l'article. L'incapacité à fonctionner sur un processeur Cell était regrettable, mais ce n'était qu'une note secondaire. La différence de performances 12x entre une implémentation C ++ et une implémentation Erlang fonctionnant sur une plate-forme x86 était le vrai problème, combinée avec le fait qu'elle n'était pas mise à l'échelle de façon linéaire. Cela dit, ils étaient nouveaux dans le langage et ont peut-être emprunté quelques chemins de code imprudents ... telle est la vie. Je suis cependant curieux de savoir la mise à l'échelle non linéaire.
CoderTao
4
Je suis corrigé sur le problème des performances 12x en ce qui concerne Intel contre Cell, mais je maintiens qu'Erlang peut être bien adapté aux scénarios difficiles du processeur. Cela ne veut pas dire qu'ils n'ont pas raison: cela pourrait vraiment être un problème où une bonne solution C ++ battra toujours une bonne solution Erlang. Peut-être que cela sert à rappeler à certaines personnes qu'Erlang, comme toute autre technologie, n'est pas une solution miracle et qu'elle ne brillera que si elle est utilisée correctement au bon endroit.
Tim
14

Apparemment, Yahoo a utilisé Erlang pour fabriquer quelque chose qu'il appelle Harvester. Article à ce sujet ici: http://www.ddj.com/architect/220600332

nuit
la source
4
Lecture de l'article: "Alors que Harvester a été initialement écrit en Perl, les constructions de concurrence de haut niveau d'Erlang - ainsi que les principes de conception OTP - en font une plate-forme idéale pour créer des applications fiables, tolérantes aux pannes et évolutives comme Harvester. Le service résultant est plus évolutif, disponible, fiable et capable de se conformer à des accords de niveau de service (SLA) plus stricts sur une base de code plus légère et à des efforts de développement moins coûteux. ". Merci beaucoup :)
Roberto Aloi
11

À quoi sert 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/ (réponse de Jerf)

Il est important de réaliser que les 4 parties d'Erlang: le langage lui-même, les bibliothèques standard des machines virtuelles (BEAM, hipe) (plus les modules sur github, CEAN, etc.) et l'environnement de développement sont régulièrement mis à jour / étendus / améliorés. Par exemple, je me souviens avoir lu que les performances en virgule flottante se sont améliorées lorsque l'auteur de Wings3d s'est rendu compte qu'il devait s'améliorer (je ne trouve pas de source pour cela). Et ce gars vient d'écrire à ce sujet:

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

Il y a quelques années, la publicité Wide Finder de Tim Bray et tous les gens qui commencent à faire des frameworks d'applications Web et des serveurs HTTP conduisent (au moins en partie) à une meilleure gestion des regex et des binaires. Et il y a tout le travail d'intégration de HiPE et SMP, le projet dialyseur, des tests unitaires multiples et des librairies de création qui surgissent, ..

Donc, son sweet spot s'élargit, Le plus difficile est que les documents officiels ne peuvent pas suivre très bien, et la liste de diffusion et le volume de la blogosphère erlang augmentent rapidement

Gene T
la source
10

Nous utilisons Erlang pour fournir la puissance musculaire dorsale à notre jeu multijoueur en temps réel Pixza basé sur un navigateur . Nous n'utilisons pas Flash ou tout autre plugin tiers, bien que le jeu soit multijoueur en temps réel. Nous utilisons plutôt des techniques JS et COMET pures. Et Erlang soutient le "vraiment réel" de Pixza.

ErJab
la source
10

Je travaille pour wooga, une société de jeux sociaux et nous utilisons Erlang pour certains de nos backends de jeu (essentiellement des API http pour des millions d'utilisateurs quotidiens) et des services auxiliaires comme le fournisseur de notifications push ios, le paiement, etc.

Je pense qu'il brille vraiment dans les tâches liées au réseau et qu'il est assez simple de structurer et de mettre en œuvre des services réseau simples et complexes. La distribution, la tolérance aux pannes et les performances sont faciles à réaliser car Erlang possède déjà certains des ingrédients clés intégrés et ils sont utilisés depuis longtemps dans les infrastructures de production critiques. Donc, ce n'est pas comme "la nouvelle technologie de la hanche 0.0.2 alpha".

Je sais que d'autres sociétés de jeux utilisent également Erlang. Vous devriez pouvoir trouver des présentations sur SlideShare à ce sujet.

John-Paul Bader
la source
6

Erlang tire sa force d'être un langage fonctionnel sans mémoire partagée. Par conséquent, l'OMI, Erlang ne sera pas adapté aux applications qui nécessitent des manipulations de mémoire en place. Édition d'image par exemple.

emb
la source