🍽️ AKKA expliqué simplement

in ULille blockchain • 6 days ago (edited)

🎄🎉C'est bientôt noël... et qui dit noël dit repas de famille !

Eh oui, un repas de famille comme on les aime où tout le monde parle en même temps, alors que mamie nous demande le sel qui est de l'autre de côté de la table, tandis que papa renverse le jus d'orange sur le plat de maman... Les enfants qui sont excités...

Quel ambiance n'est-ce pas ?

En Informatique ce "type" de diner de famille correspond à une approche classique appelé le Multi-threading traditionnel. On gère les ressources de manière manuelle avec ce qu'on appelle des Threads et des Locks... et c'est difficile, fragile et ça plante souvent.

Et maintenant, imaginez que chaque personne est assise à une petite table séparée. Pour demander un verre de jus d'orange, on ne tend pas le bras, on écrit une petite note sur un papier et on la fait passer.

Ainsi, personne ne crie, chacun lit ses notes une par une, calmement.

Un peu particulier voir inimaginable ?

En informatique c'est ce qu'on appelle la manière AKKA.

Ce modèle consiste "simplement" à concevoir des systèmes concurrents, scalables et résilients en évitant les problèmes classiques du Multi-threading traditionnel (les fameux Threads, locks etc.).

Il repose sur certains principes et on va les découvrir dans ce nouveau poste.

Bienvenue à vous la communauté👋, aujourd'hui on plonge dans le monde de l'AKKA pour en comprendre les règles qui y sont instauré et son univers complexe...


Un Acteur

Commençons donc par la base.
Dans le modèle AKKA on parle d'acteur qui est une entité autonome que l'on peut symboliser par le cœur du système.
Cette entité possède trois choses que personne d’autre ne peut toucher :

  1. Un État (State) : il s'agit de ses données (ex: un compteur, une liste d’utilisateurs). C’est privé, et absolument personne de l’extérieur ne peut modifier cet état directement.
  2. Un Comportement (Behavior) : ce qu’il fait quand il reçoit un message (ex: ”Si on me dit ’Bonjour’, je réponds ’Salut’”).
  3. Une boîte aux lettres (Mailbox) : c'est là où arrive les messages.

Ainsi un acteur se base sur ces trois choses pour communiquer.

Peut-être est-il intéressant de parler de comment un acteur communique ?


La Communication

Dans le monde d'Akka, on ne s’appelle pas au téléphone (synchrone) mais on s’envoie plutôt des SMS (asynchrone).
On peut résumer l'idée qu'un acteur communique de la sorte :

  • L’acteur A envoie un message Ă  l’acteur B et passe immĂ©diatement Ă  autre chose. Il n’attend pas la rĂ©ponse bloquĂ© devant son tĂ©lĂ©phone. Il s'agit d'un modèle asynchrone (Fire and Forget).
  • On peut imaginer que les messages sont comme des lettres scellĂ©es. Une fois envoyĂ©s, on ne peut plus modifier le contenu. Cela garantit que l’information reçue est fiable. Il s'agit de l’immutabilitĂ©.

Et donc, concrètement, cela veut dire quoi ? l’envoyeur ne se bloque jamais, ainsi le CPU ne reste pas bloqué à attendre, il peut travailler sur d'autres tâches en parallèle.


La hiérarchie et la tolérance aux pannes ("Let it Crash")

Si on a déjà pu voir que le modèle AKKA peut étrangement et aisément se traduire par des images de vie courante, la partie que l'on va discuter ici est sans doute la plus humaine de toutes.
Les acteurs vivent dans une hiérarchie stricte, comme dans une entreprise ou une armée.

  • Chaque acteur a un parent (celui qui l’a créé).
  • Chaque acteur peut avoir des enfants. Le monde AKKA est rĂ©gi par une philosophie de vie : "Let it crash".

Dans le code classique, on essaie de tout protéger avec des try { ... } catch { ... } partout. C’est en quelque sorte une "micro-gestion défensive".
Avec Akka, si un acteur enfant rencontre une erreur grave (disque plein, bug critique) :

  1. L’enfant meurt (crash).
  2. Son parent est immédiatement notifié.
  3. Le parent décide du sort de l’enfant selon une "stratégie de supervision" :
    • Restart : "RedĂ©marre Ă  zĂ©ro (comme un reboot), on oublie tes problèmes passĂ©s." (un peu comme recommencer la partie dans un jeu vidĂ©o quand on a perdu toutes nos vies...).
    • Resume : "Ignore l’erreur et continue de traiter les messages suivants."
    • Stop : ”Tu es trop malade, je te licencie (arrĂŞte dĂ©finitivement.).”
    • Escalate : "Je ne sais pas gĂ©rer ça, je demande Ă  mon propre parent."

Ainsi, cela crée des systèmes autoguérisseurs (ou Self-healing systems), cela veut dire qu'aucune gestion extérieure n'est nécessaire.

Pour clarifier, avec AKKA, les acteurs peuvent être dits locaux (local actors), cela veut dire qu'ils sont situés au sein de la même machine. Ou ils peuvent être dits distribués (distributed actors), cela veut dire qu'ils s'étendent sur différentes machines.

Dans tous les cas, les acteurs ne communiquent que par messages, et cela ne change rien quant Ă  leur fonctionnement.

On pourrait se poser la question de s'il y a quelque chose qui change entre envoyer un SMS Ă  un voisin de palier ou Ă  un ami au Japon ?
Et la réponse est non. Le geste est le même : "Écrire message -> Envoyer".


La transparence de localisation

Dans AKKA, le code pour envoyer un message à un acteur local (dans la même RAM) est identique au code pour l’envoyer à un acteur sur un serveur à l’autre bout du monde.

Vous pouvez commencer avec votre application sur un seul serveur. Si elle devient virale, vous configurez AKKA pour lancer des acteurs sur 50 serveurs. Vous ne changez pas une ligne de votre logique métier. C’est le framework qui gère le réseau.

Et voilà, c'est ça AKKA !

Donc si vous ne devez retenir que trois choses du poste d'aujourd'hui, AKKA :

  1. C'est une isolation totale : c'est-à-dire qu'un acteur est un peu comme une forteresse. Pas de partage de mémoire = pas de bugs de concurrence classiques.

  2. Tout est message : on ne bloque jamais l’exécution. C’est fluide, rapide et réactif.

  3. C'est une résilience structurelle : les parents surveillent les enfants. Si une partie du système plante, elle est redémarrée proprement sans faire tomber tout le serveur.


Limites

Même si sur la forme AKKA semble simple à comprendre, il reste complexe à implémenter. Car si, au sein d'une application, on réfléchit généralement sous forme de "fonctions" à appeler. Avec AKKA, on parle de messages et de flux asynchrones. Cela implique la bonne définition des types de messages à utiliser. Précisément, comme on n'a pas accès directement à l'acteur, il faut réaliser chaque interaction sous forme de message, ce qui peut rendre la chose relativement lourde.

Il est également difficile de déboguer, parfois plus difficile qu'un code impératif classique (surtout quand on cumule le nombre d'acteurs). Car l'asynchronisme impacte l'ordre d'arrivée des messages et la prédiction de ces derniers.

AKKA doit être utilisée de manière très minutieuse et attentive, sinon on peut se retrouver perdu dans son propre système.


Conclusion

Et donc, quand l'utiliser ?

Bien entendu, ça ne sert à rien d'utiliser AKKA pour faire un simple site web ”Hello World”, c’est comme vouloir utiliser un tank pour aller chercher le pain...

On utilise globalement Akka pour :

  • Les systèmes Ă  fort trafic (Streaming, IoT, RĂ©seaux sociaux).
  • Les applications qui ne doivent jamais s’arrĂŞter (Finance, TĂ©lĂ©coms).
  • Les jeux vidĂ©o multijoueurs (oĂą chaque joueur est un Acteur qui gère son Ă©tat).

Références et documentation additionnelle

Si vous désirez aller plus loin voici quelques ressources supplémentaires pour parcourir en détail le Monde d'AKKA 👇

Sort:  

!INDEED
Your post has been manually reviewed for curation by the Principality of Bastion.

separator2.png

Ithara GaĂŻan
Principality of Bastion - Our Leit Motiv? Uniti Crescimus.

Principality's site | Ithara's Artist Page | Principality's Discord | Our Twitch Channel

You may TRAIL this account (or @hive-143869) if you like the curation we do, or join our discord to know more about what we do.

Congratulations @toj1! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

You received more than 10 upvotes.
Your next target is to reach 50 upvotes.

You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP