Introduction au modèle d’acteurs
Rémi SHARROCK, Télécom Paris
Historique
Carl Hewitt + Bishop and Steiger 1973
Irene Greif 1973: sémantique opérationelle
Henry Baker 1975: lois axiomatiques d’un système d’acteurs
Gul Agha 1985: grande dissertation
L’entreprise Ericsson (Agner Krarup Erlang) ~1985 l’utilise massivement
-> langage Erlang (Ericsson Language)
Concurrence, parallélisme et répartition
La concurrence: condition qui existe quand au moins 2 “processus” “avancent” mais peuvent rentrer en une sorte de conflit.
Le parallélisme: condition qui existe quand au moins 2 “processus” s’exécutent en même temps à un instant donné.
La concurrence est donc une condition plus générale qui peut intégrer le parallélisme virtuel. C’est à dire la sensation que 2 processus “avancent” mais pourtant il n’y a qu’un processus qui s’exécute à chaque fois à tout instant.
La répartition: condition qui existe quand au moins 2 “processus” s’exécutent dans deux endroits différents (géographiquement, physiquement), avec parallélisme ou concurrence. La répartition est donc encore plus générale.
Le modèle d’acteurs
Un modèle conceptuel de répartition (concurrence et parralélisme possibles).
Un acteur est l’unité fondamentale dans ce modèle. Tout est acteur.
Les acteurs ne ne sont en général pas en concurrence entre eux sauf s’ils sont liés à un élément externe au modèle d’acteurs (cas très particulier qu’il faut éviter si possible en ayant UN SEUL ACTEUR PAR ELEMENT EXTERNE).
Les acteurs ne partagent pas de mémoire.
Les acteurs communiquent par messages.
Un acteur
Une entité très légère (en mémoire pile/tas) qui a une adresse, qui s’exécute sur son propre “processus” (autonome), qui a son propre état, qui n’a pas d’état partagé et qui peut recevoir des messages dans une boîte à messages. Un acteur peut traiter un seul message à la fois.
Axiomes des acteurs: En réponse à un message reçu, un acteur peut:
Il n’y a pas d’ordre dans ces actions possibles, elles peuvent s’exécuter en parallèle. Si plusieurs messages sont reçus en même temps, un seul est traité les autres attendent dans la boite à message.
Une boite à messages
Contient les messages en attente de traitement pour un acteur.�Est liée à un seul acteur.�Est de type FIFO: First In First Out�Pour mettre un message dans la boite à message il faut connaître l’adresse de l’acteur concerné.
Si plusieurs messages sont reçus en même temps, un seul est traité les autres attendent dans la boite à message. De toutes façons “en même temps” n’est pas possible donc il y aura un ordre et donc une file FIFO.
Un message
Un message contient au minimum une adresse (plusieurs adresses possibles dans des cas particuliers) d’un acteur (de plusieurs acteurs dans des cas particuliers).
Un message est une entité immutable: ne peut pas être modifié après sa création.
Un message doit pouvoir transiter entre les acteurs, même si les acteurs s’exécutent sur des machines distantes.
Dans le modèle d’acteurs, un message est envoyé directement, comme une lettre à la poste (ou un SMS), contrairement à une conversation téléphonique, il n’y a pas besoin d’établir une connexion (allo/allo).
Le modèle de calcul d’un acteur et d’un système d’acteurs
Pour un acteur
Calcul : comportement (dynamique)
Stockage : modèle d’états non partagés.
Communication : par messages
Un seul message est traité à la fois.
Un acteur peut bloquer (mais il faut éviter) pour attendre (en général un message ou un élément externe au système d’acteurs).
Pour un système d’acteurs
Plusieurs acteurs peuvent s’exécuter en même temps.
Plusieurs messages peuvent transiter dans le système en même temps.
Régit par un protocole = un algorithme réparti.
Le gardien du système est en général le superviseur du premier acteur créé.
Un système de systèmes réparti
Plusieurs systèmes d’acteurs peuvent s’interconnecter pour former un système de systèmes d’acteurs réparti.
Les systèmes sont répartis géographiquement.�Un acteur appartient à un seul système à un instant t mais peut migrer vers un autre système (si l’implémentation le permet).
Un acteur contient alors une adresse locale au système dont il appartient et une adresse distante pour les autres systèmes dont il ne fait pas partie.
Un système tolérant aux fautes
Un acteur qui crée un autre acteur va être son superviseur par défaut pour vérifier son fonctionnement (s’il est toujours vivant par exemple).
Un superviseur peut déléguer ses tâches de supervision à un autre acteur qui devient superviseur à sa place.
Un superviseur peut évidemment être supervisé par un autre superviseur.
Un superviseur peut redémarrer un acteur supervisé ou peut rediriger des messages destinés à un supervisé vers un autre acteur qu’il supervise (à vérifier quand même).
Un superviseur est alerté quand un de ses supervisés meurt/ne fonctionne plus.
Avantages et inconvénients du modèle d’acteurs
Avantages:
Facile à passer à l’échelle
Tolérant aux fautes
Réparti géographiquement
Pas d’état partagé
Inconvénients:
Les acteurs peuvent bloquer
Les boites de messages peuvent déborder
Introduction par Carl Hewitt lui-même
Disponible aussi sur youtube:
Intro rapide par quelqu’un d’autre: https://www.youtube.com/watch?v=ELwEdb_pD0k
Un exemple grande échelle: netflix avec les microservices