Erlang, un langage à découvrir

Abonnements, magazines... Notre catalogue complet au bas de cette page.

Erlang est un langage de programmation Open Source(1) fonctionnel, concurrent et distribué. Il est actuellement utilisé dans des logiciels tels que ejabberd (serveur Jabber/XMPP développé par ProcessOne)(2), Apache CouchDB (base de données orientée documents)(3), RabbitMQ (implémentation de AMQP récemment rachetée par VMWare)(4) ou Yaws (serveur HTTP)(5). Parmi les acteurs utilisant Erlang, citons Facebook (système de chat), Amazon (simpleDB) ou GitHub (serveur egitd).

Erlang a été créé à l'origine par Ericson pour être utilisé dans les dispositifs réseaux. Il est par exemple utilisé pour faire fonctionner des équipements GPRS, accélérateurs SSL, répartiteurs de charge (certains boîtiers Althéon) ou switchs ATM, dont le fameux AXD301 d'Ericson, qui peut se targuer de fournir une disponibilité de 9 neuf (99.9999999%, soit 31 ms d'indisponibilité par an...) (6).

Erlang a depuis évolué vers un langage plus généraliste, mais nombre de ses spécificités résultent de son origine dans le monde des réseaux. En effet, les équipements réseaux doivent pouvoir supporter un grand nombre de connexions, ce qui implique de pouvoir gérer de nombreux threads. Erlang est effectivement thread oriented : les threads Erlang sont très légers et très simples à manipuler. Une demi-seconde suffit pour créer facilement 100 000 threads sur un PC de base, chaque thread occupant un minimum de mémoire. Ensuite, comme on l'a vu, le langage doit permettre de limiter au maximum les indisponibilités, même en cas d'erreurs dans le programme ou dans les données traitées. Erlang fournit pour cela un système d'arbre de supervision qui permet de relancer automatiquement une tâche qui se planterait, sans incidence sur le fonctionnement général de l'application. Il est également possible de mettre à jour le code de l'application à chaud, sans interruption de service. Enfin, pour augmenter encore la disponibilité et la performance, les applications doivent pouvoir tourner sur plusieurs noeuds en parallèle. C'est pourquoi il est possible avec Erlang de manipuler les threads distants (c'est-à-dire tournant sur une autre machine physique) de la même manière que les threads locaux, de façon totalement transparente. Des mécanismes de réplication sont également fournis pour partager les données entre les noeuds. Il en résulte que les applications écrites en Erlang peuvent être clusterisées de façon pratiquement automatique.

Jérôme Sautret

S'ABONNER