• Aucun résultat trouvé

Chapitre 5 ContextAA – Considérations architecturales

5.6 Interaction entre Hôtes

5.6.4 Actions différées

La mention « action différée » dans la figure 15 tient au fait que les requêtes soumises par 𝑎 dans

publier sont au mieux desservies lors de la prochaine étape consommer de 𝑎. Tout Agent dans

ContextAA doit être rédigé en tenant pour acquis que ses requêtes ne seront pas desservies avant un ou plusieurs cycles d’opération supplémentaires.

La pratique préconisée pour les Agents de ContextAA est de planifier en fonction du futur mais d’agir sur le présent : un Agent 𝑎 publie ses besoins sous forme de requêtes pour du Contexte dans 𝑆𝑎, et agit sur la base du contenu dans 𝑆𝑎, or il est possible qu’aucune action n’ait permis de mettre 𝑆𝑎 à jour entre la publication des besoins de 𝑎 et sa prochaine opportunité d’agir.

La mention presque à jour portant sur 𝑁 à la fin de §5.6.3 est une considération au cœur des actions des Agents dans ContextAA, au sens où il est tout à fait normal (et commun) qu’un Agent 𝑎 ∈ ℎ opère à un instant 𝑡 sur du Contexte qui n’est techniquement plus valide pour ℎ.

156 Un exemple d’une telle situation apparaît à la figure 18 :

Hôte h Hôte h’ Agent a Consommer Agir Publier Consommer Agir Publier Objet autonome PortScanner Agent PortScannerAgent Signale la déconnexion de h’ Constate la déconnexion de h’ Consommer Agir Publier Consommer Agir Publier déconnexion de h’

Ici, a estime (par

Nh) que h’ est

encore connecté à

h… ce qui est

inexact

En effet, dans la situation décrite par la figure 18 :

 un objet autonome PortScanner, jouant le rôle de Découvreur, constate la déconnexion d’un Hôte ℎ′ de son propre Hôte ℎ;

 PortScanner envoie une description de cette nouvelle réalité à un Agent, PortScannerAgent, à travers un canal de Contexte;

 ultérieurement, PortScannerAgent constate la déconnexion de ℎ et est en mesure de décrire

cette réalité dans 𝑆;

 entre-temps, 𝑎 a traversé son cycle normal d’opérations et a opéré au moins une itération de ce cycle avec, dans 𝑆, un descriptif inexact de la situation de ℎ dans l’espace, soit 𝑁 ⊂ 𝑆∧ ℎ′

𝑁;

 exprimé autrement, l’état de 𝑁 à l’instant 𝑡 n’est pas nécessairement isomorphe avec la topologie réseau de ℎ, et 𝑎 opère strictement sur la base de 𝑁.et non pas sur celle de la topologie réseau réelle.

157

Il existe plusieurs modèles de cohérence systémique pour les systèmes répartis, chacun avec ses coûts, ses avantages et ses inconvénients [98]. Un objectif classique de systèmes répartis est ce qu’on pourrait nommer la cohérence systémique globale, soit l’aspiration à un idéal selon lequel il serait raisonnable de s’attendre à ce que l’ensemble des composants d’un système ait une acception commune d’un état partagé donné. Comme le met en relief l’explication ci-dessus, ContextAA ne vise pas la cohérence systémique globale, privilégiant une cohérence interne à chaque Agent 𝑎 et respectueuse de son cadre ontique. Le raisonnement réalisé par 𝑎 se fait sur la base du Contexte cumulé dans 𝑆ℎ et dans 𝑆𝑎, dont la correspondance avec ce qui est externe à ℎ est indirecte et

différée.

La raison derrière ce choix est à la fois philosophique et pragmatique :

 sur le plan pragmatique, assurer une cohérence systémique globale entraînerait un coût prohibitif, forçant un effort algorithmique assurant que ∀𝑎, 𝑎′: 𝐴, ∀ℎ, ℎ: 𝐻, 𝑎 ∈ ℎ⋀𝑎∈ ℎ, 𝑎 et

𝑎′ soient en accord sur la réponse à toute requête 𝑐: 𝐶(𝑐 ∈ 𝑂𝑎∧ 𝑐 ∈ 𝑂𝑎′). Ceci signifie qu’à tout

le moins dans le cas où ℎ ∈ 𝑁′ ∧ ℎ′∈ 𝑁, aucune divergence dans ce qui aura été rapporté à la

fois lors de l’application de 𝑐 pour 𝑎 et de 𝑐 pour 𝑎′ ne doit être constatée. Ceci rejoint l’approche

de plusieurs bases de données NoSQL [98] qui, pour des raisons d’efficacité, visent plutôt une cohérence éventuelle qu’une cohérence systémique globale;

 sur le plan philosophique, une exigence de cohérence systémique globale ne nous semble pas correspondre à la réalité empirique d’un système réparti ouvert. En l’absence de connectivité totale et d’une autorité centrale sur les données, comme dans le cas d’une base de données centralisée par exemple, les données accumulées – le Contexte acquis – par un composant à travers son cheminement sont fortement influencées par ce cheminement, et il est en général difficile de qualifier un cheminement d’objectivement meilleur qu’un autre a posteriori. En résumé, il nous semble plus pertinent, pour un système réparti déployé dans l’espace intelligent ouvert tel que ContextAA, de mettre de côté toute préoccupation de cohérence systémique globale pour insister sur l’importance de la cohérence interne d’un Agent. Cette position tient au fait que tout savoir obtenu de composants dans un système réparti est essentiellement périmé, une photographie du passé en quelque sorte, et que ce constat s’applique aussi aux lectures des horloges relatives des nœuds. Il est possible d’imposer une sorte d’ordonnancement systémique par un mécanisme algorithmique tel que les horloges vectorielles [52], mais ContextAA préconise l’approche, plus légère sur le plan protocolaire, selon laquelle il vaut mieux ne pas chercher à déterminer un tel ordre total.

La stabilité de 𝑆𝑎 pendant l’action de 𝑎 permet d’exprimer consommer, agir et publier pour 𝑎 de

manière « naïve », sans considérer la concurrence et ses risques, donc de raisonner sur le présent, au sens de 𝑎. Cette liberté a un prix : opérer sur un Contexte qui peut ne pas être à jour, qui est au mieux le plus récent Contexte obtenu par 𝑎. Le monde représenté par 𝑆𝑎 est stable aux yeux de 𝑎

pendant que 𝑎 agit, sans poser de jugement sur la qualité objective du Contexte logé dans 𝑆𝑎 au

158