J'aimerais connaître la liste des applications/sites Web/solutions les plus courants pour lesquels Erlang est utilisé, avec succès ou non.
Expliquer pourquoi il est utilisé dans une solution spécifique plutôt que dans d’autres langages de programmation serait également très apprécié.
Il serait également intéressant d’énumérer les études de cas de BAD Erlang (cas dans lesquels Erlang est mal utilisé).
De Programmation Erlang:
• Amazon utilise Erlang pour implémenter SimpleDB, en fournissant des services de base de données dans le cadre de Amazon Elastic Compute Cloud (EC2).
• Yahoo! l'utilise dans son service de partage de signets, Delicious, qui compte plus de 5 millions d'utilisateurs et 150 millions d'URL enregistrées.
• Facebook utilise Erlang pour alimenter l’arrière-plan de son service de chat, avec plus de 100 millions d’utilisateurs actifs.
• WhatsApp utilise Erlang pour exécuter des serveurs de messagerie, ce qui permet d'atteindre jusqu'à 2 millions d'utilisateurs connectés par serveur.
• T-Mobile utilise Erlang dans ses SMS) systèmes d’authentification.
• Motorola utilise Erlang dans les produits de traitement des appels de 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 dans le monde entier.
• Le modeleur de subdivision 3D Wings 3D , utilisé pour modéliser et texturer des mailles de polygones.
• Le système Ejabberd , qui fournit un serveur d'applications de messagerie instantanée basé sur le protocole de messagerie extensible (XMPP).
• La base de données orientée document "sans schéma" CouchDB , offrant une évolutivité entre 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 quotidiennement du contenu généré de manière dynamique à des millions de téléspectateurs.
• RabbitMQ , implémentation du protocole de messagerie AMQP. AMQP est une norme émergente pour la messagerie d'entreprise hautes performances.
ejabberd est l’une des applications les plus connues d’Erlang et celle avec laquelle j’ai appris l’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 de l'erlang. (Cependant, certains diront que ce n'est pas OTP, mais ne vous inquiétez pas, il y a encore un fardeau de code génial à 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 plusieurs messages simultanément et gérer un grand nombre de connexions TCP/IP.
Nous avons donc 2 fonctionnalités:
Ce sont des exemples où erlang brille.
gère de nombreuses connexions
Il est très facile de créer des serveurs TCP/IP évolutifs, non bloquants, avec erlang. En fait, il a été conçu pour résoudre ce problème. Et comme il peut générer des centaines de milliers de processus (et non pas threads, il s’agit d’une approche sans partage, plus simple à concevoir), ejabberd est conçu comme un ensemble de processus erlang (qui peut être répartis sur plusieurs serveurs):
Tous échangent des messages.
route les messages étant donné certains aspects du message
Une autre caractéristique très attrayante de erlang est filtrage par motif . 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 en fonction des arguments reçus. (Config
est une structure de type #config
qui a un attribut type
).
Cela signifie que c'est très facile et beaucoup plus clair que d'enchaîner if/else
ou switch/case
pour établir des règles de gestion.
Pour conclure
Ecrire 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 sont construits la plupart des serveurs http erlangejabberd
, couchdb
mais aussi webmachine
, riak
= et une bibliothèque très facile à 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 en erlang.
La liste des applications les plus courantes pour Erlang a été couverte (CouchDb, ejabberd, RabbitMQ, etc.), mais j'aimerais apporter les contributions suivantes.
La raison pour laquelle il est utilisé dans ces applications provient de la force principale d'Erlang: gestion de l'application disponibilité.
Erlang a été entièrement conçu pour l'environnement des opérateurs télécoms, ce qui exige que les systèmes répondent à une disponibilité minimale de 5x9 (99,999% de temps de fonctionnement annuel). Ce chiffre ne laisse pas beaucoup de place aux temps d'arrêt pendant une année! Pour cette raison, Erlang est livré avec les fonctionnalités suivantes (non exhaustives):
Évolutivité horizontale (possibilité de répartir facilement les tâches entre plusieurs machines grâce à des communications transparentes intra et inter machine). La base de données intégrée (Mnesia) est également distribuée par nature.
Évolutivité verticale (possibilité de distribuer des tâches sur plusieurs ressources de traitement sur le même ordinateur): SMP est géré de manière native.
Code Hot-Swapping: possibilité de mettre à jour/mettre à jour le code en direct pendant les opérations
Asynchrone: le monde réel est asynchrone, Erlang a donc été construit pour tenir compte de cette nature fondamentale. Une caractéristique qui contribue à cette exigence: les processus "libres" d'Erlang (> 32 000 peuvent être exécutés simultanément).
Supervision: nombreuses stratégies différentes pour la supervision de processus avec stratégies de redémarrage, seuils, etc. Aide à récupérer plus facilement dans les situations critiques/la surcharge tout en conservant des traces des problèmes pour un dépannage ultérieur, une analyse post mortem, 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).
Live debugging: la possibilité de "se connecter" à volonté aux nœuds actifs facilite les activités de dépannage. Le débogage peut être entrepris en direct avec un accès complet à l'état d'exécution de tout processus. De plus, les outils de rapport d'erreur intégrés sont très utiles (mais parfois difficiles à utiliser).
Bien sûr, je pourrais parler de ses racines fonctionnelles, mais cet aspect est un peu orthogonal à l'objectif principal (haute disponibilité). La principale composante de la nature fonctionnelle qui contribue généreusement à l'objectif visé est, IMO: "ne rien partager". Cette caractéristique aide à contenir les "effets secondaires" et à réduire le recours à des mécanismes de synchronisation coûteux.
Je suppose que toutes ces caractéristiques aident à étendre le cas d'utilisation d'Erlang dans des applications critiques.
ne chose que Erlang n’est pas vraiment douée: traiter de gros blocs de données.
Erlang vient d’Ericsson et est utilisé dans certains de leurs systèmes de télécommunication.
En dehors des télécommunications, CouchDb (une base de données orientée document) est probablement l’application Erlang la plus connue à ce jour.
Pourquoi Erlang? De la aperç (à lire intégralement):
Les modèles de document, de vue, de sécurité et de réplication, le langage de requête spécifique, la structure de disque efficace et robuste et la nature concurrente et fiable de la plate-forme Erlang sont tous soigneusement intégrés pour un système fiable et efficace.
Nous avons construit un bourse de paris (marché de la prédiction) en utilisant Erlang. Nous avons choisi Erlang par rapport à certains 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 à celle des échanges téléphoniques. Notre CTO a décrit notre utilisation. de Erlang à CTO talk .
Nous utilisons également CouchDB et RabbitMQ dans notre pile.
Je suis tombé sur le fait que je suis 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 même s'il était plus facile d'écrire le programme, moins de boguet, etc., il était moins performant et exécutait 10 fois plus lentement qu'un programme en C comparable. Donc, un scénario où il ne convient peut-être pas très bien est celui des scénarios gourmands en ressources CPU.
Notez cependant que les auteurs du document en étaient au stade de la première étape d'apprentissage d'Erlang et qu'ils ne connaissaient peut-être pas les procédures de développement appropriées pour Erlang, qui nécessite beaucoup de ressources en processeur.
Apparemment, Yahoo a utilisé Erlang pour fabriquer quelque chose qu’il appelle Harvester. Article à ce sujet ici: http://www.ddj.com/architect/220600332
En quoi l'erlang est-il bon?
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 comprendre que les 4 parties d'Erlang: le langage lui-même, les bibliothèques standard de VM (BEAM, hipe) (plus des modules sur github, CEAN, etc.) et l'environnement de développement sont régulièrement mises à jour/développées/améliorées. Par exemple, je me souviens avoir lu que les performances en virgule flottante s'étaient améliorées lorsque l'auteur de Wings3d avait compris qu'il était nécessaire de 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 ceux qui commençaient à créer des infrastructures d'applications Web et des serveurs HTTP conduisaient (au moins en partie) à une meilleure gestion des regex et des fichiers binaires. Et il y a tout le travail d'intégration de HiPE et SMP, du projet de dialyseur, des tests d'unités multiples et de la construction de librairies, ..
La difficulté réside donc dans le fait que la documentation officielle ne peut pas suivre très bien, et le volume de la liste de diffusion et de la blogosphère erlang augmente rapidement.
Nous utilisons Erlang pour fournir la puissance musculaire nécessaire à notre jeu multi-joueurs basé sur un navigateur vraiment temps réel Pixza . Nous n'utilisons ni Flash ni aucun autre plugin tiers, bien que le jeu soit multi-joueurs en temps réel. Nous utilisons à la place des techniques pures JS et COMET. Et Erlang soutient le "réel" temps réel "de Pixza.
Je travaille pour wooga, une société de jeux sociaux et nous utilisons Erlang pour certains de nos backends de jeux (essentiellement des http pour des millions d'utilisateurs quotidiens) et des services auxiliaires tels que le fournisseur de notifications ios Push, le paiement, etc.
Je pense que cela brille vraiment dans les tâches liées au réseau et rend assez simple la structure et la mise en œuvre de services réseau simples et complexes. La distribution, la tolérance aux pannes et les performances sont faciles à atteindre car Erlang intègre déjà certains des ingrédients clés et est utilisé 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.
Erlang tire sa force d'un langage fonctionnel sans mémoire partagée. Par conséquent IMO, Erlang ne conviendra pas pour les applications nécessitant des manipulations de mémoire en place. Retouche d'image par exemple.