Modélisation Distribuée Asynchrone

On fait de la modélisation distribuée pour travailler à plusieurs sur un même modèle, ce modèle n'étant pas stocké de manière centralisé.

On veut pouvoir travailler en mode déconnecté.

On veut avoir les mises à jours tout en gardant une vue cohérente des données.

Les buts de cette modélisation distribuée asynchrone sont de construire un système de fichier ou une base de données cohérent à partir d'échanges ponctuels d'information entre les participants.

Pourquoi ?

Pourquoi pas centralisée ?

La centralisation pose les problèmes suivants :

Pourquoi pas synchrone ?

Parce que l'accès réseau n'est pas fiable.

Parce que la synchronisation induit des délais longs, il est difficile de travailler intéractivement.

Quels problèmes ?

La cohérence du modèle.

Les solutions classiques imposent que le modèle soit toujours cohérent.

Dans la réalité, si l'on travaille à plusieurs c'est que le modèle est complexe. Il y a donc peu de chances que des modifications contradictoires soient faites simultanément sur la même partie du modèle.

En cas de problème (rarissime) l'être humain le résoud.

C'est l'optique des systèmes de gestion de version de sources.

Historique

NNFS (1995)

Non Networked File System.

Outil permettant d'avoir un système de fichier identique sur des machines n'étant pas connectée entres elles.

Les fichiers peuvent être modifiés sur n'importe quelle machine.

Un medium passe de machine en machine pour faire les mises à jour.

En cas de conflit, si NNFS a fait un ``mauvais´´ choix, l'utilisateur a accès à l'autre version.

Plateforme Dereve (2001)

Le modèle géométrique était modifié en utilisant l'algorithme RCU.

Marche très bien la plupart du temps.

Le dernier à modifier gagne.

Pas de blocage, mais pas asynchrone car en mode connecté.

Prog. Algébrique (2006)

Simplification du noyau Dereve.

Vue fichier du graphe

Noeuds permettant la communication vers des noeuds sur d'autres machines.

Donc pas d'accès au modèle total si pas d'accès au réseau.

TOMUSS (2007)

TOMUSS permet à plusieurs personnes de saisir des notes en mode déconnecté.

Les données sont toutes chargées dans le navigateur, la connexion n'est plus nécessaire ensuite sauf pour les sauvegardes et mises à jour.

L'astuce pour éviter les conflits est de nommer les entités créées avec un identificateur dépendant de la session.

Aucune donnée ne peut être créée avec le même identifiant.

Exemples d'utilisation

ICI

Comment le résoudre

Invariants désirés

Quand on synchronise deux machines, il faut que pour chaque donnée :

Fausses pistes

Le temps est relatif : on ne peut pas ordonner des événements temporels se situant dans des lieux différents.

Entités manipulées

Session ID

La session est un identificateur unique que l'on peut créer comme la concaténation :

Cette création est locale et ne nécessite pas de serveur.

Il y a normalement une seule session par machine. L'utilisateur peut la suspendre et la reprendre.

Value ID

L'identificateur de valeur est le couple :

Version ID

La version d'une valeur est la liste ordonnée de tous les Sessions ID ayant modifié la valeur depuis sa création.

Data

Une donnée peut être de différents types :

Value

Le système ne résoud pas les conflits. Il faut donc qu'une même valeur puisse avoir plusieurs versions.

Une valeur contient :

Algo. synchronisation

L'algorithme est simple au final, mais il est loin d'être trivial.

On fait les trois étapes suivantes :

Fusion

Pour mettre à jour S1 à partir des données de S2 :

Toutes les valeurs présentes dans S2 n'existant pas dans S1 sont recopiées (change l'affichage).

Pour toutes les valeurs de S2 présentes dans S1 on ajoute les versions de la valeur non connues par S1. Cela ne change pas l'affichage.

Mise à jour version

Trois étapes successives :

Pour figer/changer la version récursivement de la valeur :

Pour choisir la version courante dans une liste de versions plus récentes possible :

Trouver les versions nécessaires

Fonctions récursives haut/bas.

Pour chaque version de chaque valeur :

Quand on marque une donnée nécessaire :

Enlève les inutiles

Tant qu'une version inutile a put être enlevée :

Pour chaque valeur, enlève les versions qui respectent les conditions suivantes :

Présent

L'implémentation est écrite en Python et fonctionne en simulant plusieurs sessions avec un seul processus.

Futur

Destruction de valeur

Les valeurs détruites doivent rester dans le modèle afin d'indiquer aux sessions qui ne sont pas au courant qu'il faut détruire la valeur.

Il faut clairement une liste de machines.

Avoir une liste des machines avec la date de synchronisation ne fonctionne pas car on ne connait pas l'état du système à une date passée.

Donc chaque machine indique dans la donnée détruite qu'elle est d'accord. La donnée est détruite quand tout le monde est d'accord.

Interface utilisateur

L'application affiche le modèle avec son interface utilisateur classique auquel on ajoute :

Synchronisation réseau

Il faut un algorithme permettant de minimiser le traffic réseau lors d'un mise à jour.

Utiliser un journal ?

Sécurité

Signer les versions que l'on diffuse.

On ne peut garantir que quelqu'un censure un donnée afin de ne pas la diffuser.

Article

Qui veut écrire un article sur le sujet ?