Erlang
Langage fonctionnel pour systèmes distribués, tolérants aux pannes et hautement concurrents, privilégié en télécoms et temps réel.
Mis à jour le 2 mai 2026
Erlang est un langage de programmation fonctionnel développé dans les années 1980 par Ericsson pour répondre aux exigences des systèmes de télécommunications nécessitant une disponibilité maximale. Construit autour du modèle d'acteurs et de processus légers, Erlang excelle dans la création de systèmes massivement concurrents, tolérants aux pannes et capables de fonctionner sans interruption pendant des années. Sa machine virtuelle BEAM et son approche « let it crash » en font une solution privilégiée pour les applications critiques exigeant une haute disponibilité.
Fondements
- Paradigme fonctionnel avec immutabilité des données et pattern matching exhaustif
- Modèle d'acteurs avec des milliers de processus légers isolés communiquant par messages
- Tolérance aux pannes intégrée via la supervision hiérarchique et le « hot code swapping »
- Distribution transparente permettant l'exécution sur plusieurs nœuds sans modification du code
Avantages
- Concurrence massive : gestion de millions de processus légers simultanés avec une empreinte mémoire minimale
- Résilience exceptionnelle : système de supervision permettant la récupération automatique des pannes
- Mise à jour à chaud : déploiement de nouvelles versions sans interruption de service
- Latence prévisible : ordonnancement équitable garantissant des temps de réponse constants
- Distribution native : clustering transparent pour la scalabilité horizontale
Exemple concret
-module(chat_server).
-export([start/0, handle_message/2]).
%% Démarrage du serveur de chat
start() ->
spawn(fun() -> loop(#{}) end).
%% Boucle principale gérant les connexions
loop(Users) ->
receive
{join, UserId, Pid} ->
NewUsers = maps:put(UserId, Pid, Users),
broadcast(NewUsers, {user_joined, UserId}),
loop(NewUsers);
{message, From, Content} ->
broadcast(Users, {msg, From, Content}),
loop(Users);
{leave, UserId} ->
NewUsers = maps:remove(UserId, Users),
broadcast(NewUsers, {user_left, UserId}),
loop(NewUsers)
end.
%% Diffusion à tous les utilisateurs
broadcast(Users, Message) ->
maps:foreach(fun(_, Pid) -> Pid ! Message end, Users).
%% Gestionnaire avec supervision
handle_message(Pid, Message) ->
try
Pid ! Message
catch
error:Reason ->
% Le processus redémarre automatiquement
error_logger:error_msg("Message failed: ~p", [Reason])
end.Cet exemple illustre la simplicité avec laquelle Erlang gère la concurrence via le passage de messages. Chaque utilisateur est un processus isolé, et le serveur maintient l'état dans une map immuable. La gestion d'erreurs est déléguée aux superviseurs, permettant une récupération automatique sans complexité additionnelle dans le code métier.
Mise en œuvre
- Installer Erlang/OTP via les gestionnaires de paquets officiels ou asdf pour la gestion des versions
- Structurer l'application en utilisant le framework OTP avec ses behaviors (gen_server, supervisor, application)
- Définir une arborescence de supervision pour isoler les pannes et garantir la résilience du système
- Implémenter les processus métier comme des gen_servers avec gestion d'état et timeout
- Configurer le clustering pour la distribution en définissant les nœuds et la stratégie de réplication
- Utiliser les outils intégrés (observer, debugger, dialyzer) pour le monitoring et l'analyse statique
- Déployer avec des releases OTP pour le packaging et le hot code reloading en production
Conseil pro
Privilégiez la philosophie « let it crash » : plutôt que de gérer défensivement toutes les erreurs, laissez les processus échouer et confiez la récupération aux superviseurs. Cette approche simplifie drastiquement le code et améliore la résilience globale. Utilisez également les behaviors OTP qui encapsulent les patterns éprouvés pour la gestion de processus, réduisant ainsi les bugs et accélérant le développement.
Outils associés
- Elixir : langage moderne s'exécutant sur la BEAM avec une syntaxe plus accessible
- Rebar3 : gestionnaire de build et de dépendances pour les projets Erlang
- Observer : interface graphique intégrée pour le monitoring en temps réel des processus
- Dialyzer : outil d'analyse statique pour la détection des erreurs de types
- RabbitMQ : broker de messages écrit en Erlang, bénéficiant de sa robustesse
- Phoenix : framework web Elixir exploitant les capacités temps réel d'Erlang
Erlang représente un choix stratégique pour les entreprises nécessitant une infrastructure résiliente et évolutive. Sa capacité à maintenir des millions de connexions simultanées avec une disponibilité de 99,9999999% (nine nines) en fait une solution incontournable pour les télécommunications, les systèmes financiers, les messageries instantanées et toute application où l'interruption de service n'est pas une option. L'écosystème BEAM, enrichi par Elixir, continue d'évoluer tout en conservant la stabilité légendaire d'Erlang.
Parlons de votre projet
Besoin d'expertise sur le sujet ?
Nos experts vous accompagnent de la stratégie à la mise en production. Échangeons 30 min sur votre projet.

