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.
erlang
case-study
Roberto Aloi
la source
la source
Réponses:
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.
la source
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:
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):
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:
C'est 5 versions différentes de la
access
fonction. Erlang sélectionnera la version la plus appropriée compte tenu des arguments reçus. (Config
est une structure de type#config
qui a untype
attribut).Cela signifie que c'est très facile et beaucoup plus clair que le chaînage
if/else
ouswitch/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:
mnesia
, base de données relationnelle distribuée (incluse dans la distribution de base)mochiweb
, sur lequel la plupart des serveurs http erlang sont construitsejabberd
,couchdb
mais aussiwebmachine
,riak
et 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.
la source
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.
la source
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):
la source
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.
la source
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.
la source
Apparemment, Yahoo a utilisé Erlang pour fabriquer quelque chose qu'il appelle Harvester. Article à ce sujet ici: http://www.ddj.com/architect/220600332
la source
À 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
la source
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.
la source
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.
la source
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.
la source