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

Je voudrais connaître une liste des applications/sites web/solutions les plus courants 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é.

Énumérer de mauvaises études de cas D'Erlang (cas dans lesquels Erlang est mal utilisé) serait également intéressant.

217
demandé sur Roberto Aloi 2009-10-28 13:41:15

11 réponses

À Partir De Programmation Erlang:

Texte Alt 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 en tant que partie de L'Amazon Elastic Compute Cloud (EC2).

Yahoo! l'utilise dans son service de bookmarking social, Délicieux, qui a plus de 5 millions d'utilisateurs et 150 millions d'URL signet.

Facebook utilise Erlang pour alimenter le backend de son service de chat, en manipulant 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 le traitement des appels produits 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 entier.


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

• le modélisateur de subdivision 3D Wings 3D , utilisé pour modéliser et texturer le polygone maille.

• le système Ejabberd , qui fournit un protocole de messagerie et de présence Extensible (XMPP), en fonction de messagerie instantanée (IM) serveur d'applications.

{[0•} * La base de données orientée documentCouchDB "sans schéma", offrant une évolutivité à travers les clusters multicœurs et multiserveurs.

* la bibliothèque MochiWeb qui prend en charge la création de serveurs HTTP légers. Il est utilisé pour alimenter des services tels que MochiBot et MochiAds, qui servent contenu généré dynamiquement à des millions de téléspectateurs par jour.

RabbitMQ , une implémentation de protocole de messagerie AMQP. AMQP est un émergents standard pour la messagerie d'entreprise haute performance.

191
répondu JRL 2015-03-24 07:24:45

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

Je pense que c'est le projet le plus intéressant pour apprendre erlang parce qu'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, routant les messages entre les utilisateurs finaux. Bien sûr, il ya d'autres fonctions, 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 Caractéristiques:

  • 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 évolutif serveurs TCP / IP 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 pas threads, c'est une approche share-nothing, qui est plus simple à concevoir), ejabberd est conçu comme un ensemble de processus erlang (qui peut être distribué sur plusieurs serveurs):

  • processus de connexion client
  • processus du routeur
  • processus de chatroom
  • serveur à serveur processus

Tous échangent des messages.

Les messages D'itinéraire étant donné certains aspects du message

Une autre caractéristique très aimable d'erlang est pattern matching . 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 fonction access. Erlang sélectionnera la version la plus appropriée compte tenu des arguments reçus. (Config est une structure de type #config, qui a un attribut type).

Cela signifie qu'il est très facile et beaucoup plus clair que de chaîner if/else ou switch/case pour créer des règles métier.

Pour conclure

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

  • mise à jour du code à chaud
  • mnesia, base de données relationnelle distribuée (incluse dans la distribution de base)
  • mochiweb, sur sur lesquels la plupart des serveurs http erlang sont construits
  • support binaire (décodage et encodage du protocole binaire facile comme jamais)
  • une grande communauté avec beaucoup de projets open source (ejabberd, couchdb mais aussi webmachine, riak et une flopée de bibliothèque très facile à intégrer)

Moins De Ldc

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

75
répondu Eric 2010-10-20 21:42:37

La liste des applications les plus courantes pour Erlang a été couverte (CouchDb, ejabberd, RabbitMQ etc) mais je voudrais contribuer ce qui suit.

La raison pour laquelle il est utilisé dans ces applications vient de la force de base de Erlang: gestion de l'application disponibilité.

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

  • Évolutivité horizontale (possibilité de distribuer facilement les tâches au-delà des limites de la machine grâce à des communications intra et inter-machines transparentes). 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é en mode natif.

  • Code Hot-Swapping : la possibilité de mettre à jour/Mettre à niveau le code live pendant les opérations

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

  • Supervision : nombreuses stratégies différentes pour la supervision des processus avec des stratégies de redémarrage, des seuils, etc. Aider récupérer de coin-cas / surcharge plus facilement tout en conservant des traces des problèmes pour plus tard dépannage, post-mortem analyse etc.

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

  • Débogage en direct : la possibilité de "se connecter" aux nœuds en direct à volonté aide les activités de dépannage. Le débogage peut être entrepris en direct avec un accès complet à l'état en cours d'exécution de tout processus. Les outils de rapport d'erreur intégrés sont également très utiles (mais parfois un peu difficiles à utiliser).

Bien sûr, je pourrais parler de ses racines, mais cet aspect est quelque peu orthogonal à l'objectif principal (haute disponibilité). La principale composante de la nature fonctionnelle qui contribue généreusement à l'objectif cible est, IMO: "partager rien". Cette caractéristique aide à contenir les "effets secondaires" et à réduire le besoin de synchronisation coûteuse mécanisme.

Je suppose que toutes ces caractéristiques aident à étendre un cas pour l'utilisation D'Erlang dans les applications critiques de l'entreprise.

Une chose Qu'Erlang n'est pas vraiment bon à : traiter de gros blocs de données.

45
répondu jldupont 2009-10-28 13:29:58

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 peut-être L'application Erlang la plus connue jusqu'à présent.

Pourquoi Erlang ? De la vue d'ensemble (mérite d'être lu en entier):

Le document, la vue, la sécurité et modèles de réplication, le spécial langue de requête de but, l'efficace et robuste disque mise en page et la nature concurrente et fiable de la Plate-forme Erlang sont tous soigneusement intégré pour une fiabilité et l'efficacité du système.

19
répondu Brian Agnew 2009-11-05 22:05:52

Nous avons construit un Bourse de Paris (aka marché de prédiction) en utilisant Erlang. Nous avons choisi Erlang sur certains des langages financiers 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 de Erlang à CTO talk .

Nous utilisons également CouchDB et RabbitMQ dans notre pile.

19
répondu Jason Trost 2014-05-08 03:23:55

Je suis tombé sur ceci est en train d'écrire un rapport: Erlang dans Acoustic Ray Tracing.

C'est 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 buggé, etc. Il a mis à l'échelle pire, et effectué 10x plus lent qu'un programme C comparable. Donc, un endroit où il peut ne pas être bien adapté est des scénarios gourmands en CPU.

Notez cependant que les gens ont écrit le papier étaient dans les étapes de la première Erlang d'apprentissage, et peut ne pas avoir connu les procédures de développement appropriées pour Erlang intensif CPU.

14
répondu CoderTao 2014-05-08 02:57:07

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

13
répondu harms 2009-10-28 10:47:58

À 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 VMs(BEAM, hipe) (plus les modules sur github, CEAN, etc.) et de l'environnement de développement sont être régulièrement mis à jour / élargi / amélioré. Par exemple, je me souviens avoir lu que la performance en virgule flottante s'était améliorée lorsque L'auteur de Wings3d s'est rendu compte qu'elle 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) à des regex et des binaires améliorés manutention. Et il y a tout le travail intégrant HiPE et SMP, le projet dialyzer, les tests unitaires multiples et les libs de construction qui surgissent, ..

Donc son sweet spot est en expansion, la chose 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

11
répondu Gene T 2009-10-30 19:08:01

Nous utilisons Erlang pour fournir la puissance musculaire back-end pour notre jeu multi-joueurs basé sur un navigateur en temps réel Pixza . Nous n'utilisons pas Flash ou d'autres plugins tiers, bien que le jeu soit multi-joueurs en temps réel. Nous utilisons des techniques JS et COMET pures à la place. Et Erlang soutient la" really realtimeliness " de Pixza.

10
répondu ErJab 2010-05-25 09:32:28

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 notification push ios, le paiement, etc.

Je pense que cela brille vraiment dans les tâches liées au réseau et qu'il est assez simple de structurer et d'implémenter des services réseau simples et complexes. La Distribution, la tolérance aux pannes et les performances sont faciles à réaliser car Erlang en a déjà des ingrédients clés intégrés et ils sont utilisés depuis longtemps dans l'infrastructure de production critique. 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 aussi Erlang. Vous devriez être en mesure de trouver des présentations sur slideshare à ce sujet.

9
répondu John-Paul Bader 2012-02-22 18:45:41

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

6
répondu emb 2009-10-28 23:58:06