• Aucun résultat trouvé

Le Problème de la concurrence dans un Wiki P2P

1.2 Le Problème de la concurrence dans un Wiki P2P

1.2.1 Opérations concurrentes dans un Wiki P2P

Comme pour toutes les applications multi-utilisateurs, les éditeurs collaboratifs doivent traiter le problème de la concurrence dans les opérations de lecture/écriture du document partagé. Deux opérations sont concurrentes si elles sont émises simultanément d'un point de vue logique, c'est-à-dire aucune des deux ne précède l'autre.

Les problèmes dus à la concurrence d'opérations dans l'édition collaborative sont essen-tiellement liés à des pertes de mises à jour : l'eet d'une opération d'édition est perdu suite à l'exécution d'une opération concurrente qui vient le remplacer (l'écraser). Ce problème est très fréquent : si plusieurs utilisateurs modient simultanément le même document sans aucune coordination, le risque est très grand que les modications apportées par l'un soient perdues lors d'une sauvegarde eectuée par un autre. Ce problème se pose dans l'édition synchrone ou asynchrone.

Plusieurs techniques ont été proposées pour apporter des solutions à ce problème, que l'on peut classer en deux grandes catégories :

les approches exclusives : dont le principe est de garantir un accès exclusif au docu-ment à un seul utilisateur à la fois. On trouve ici des techniques dites de "oor control" ou "turn taking" [25] qui consistent à coordonner les accès dans un tour de rôle, souvent géré à l'aide d'un jeton : seul le détenteur du jeton peut entreprendre des opérations de modication du document. On trouve également des techniques à base de verrouillage associées très souvent à des techniques de partitionnement des objets partagés, comme par exemple dans ShrEdit [40] ou DistView [55]. Un utilisateur souhaitant éditer une partie d'un document demande la pose d'un verrou sur la partition correspondante. Si un verrou est déjà présent, il est mis en attente, sinon il obtient l'accès.

les approches permissives : dont le principe est d'autoriser les modications simulta-nées et de les fusionner à l'aide d'un algorithme dédié [58, 66, 67]. Cette fusion peut se faire en continu, c'est-à-dire au fur et à mesure de la production d'opérations dans un système synchrone [13], ou de manière diérée dans un système asynchrone comme, par exemple, un outil de gestion de versions.

Dans un wiki P2P basé sur un protocole de réplication optimiste, c'est le deuxième type d'approche qui est utilisé, comme nous l'avons déjà rapidement introduit dans la section 1.1.3. Ainsi, dans un wiki P2P, la gestion des opérations concurrentes repose sur le mécanisme de réplication optimiste en charge de diuser une opération introduite sur

un site vers les autres sites, puis d'intégrer les opérations distantes en les fusionnant si nécessaire avec les opérations concurrentes déjà intégrées.

Il est important de souligner une caractéristique essentielle des wiki P2P du point de vue de la gestion de la concurrence. Dans ce type de système, la fusion d'opérations concurrentes se produit :

 sur tous les sites participants au réseau P2P, et non pas seulement sur les sites producteurs des opérations,

 à chaque réception d'une opération, au moment où elle est reçue par un serveur,  elle est donc déclenchée et exécutée par le serveur, en dehors du contrôle des

utili-sateurs,

 elle produit son résultat sur le serveur et ce résultat est public dans le sens où il est immédiatement visible par les visiteurs du wiki.

Ce comportement est assez diérent de celui des systèmes asynchrones classiques. Dans ces systèmes, les fusions sont déclenchées à l'initiative des utilisateurs, an de synchroniser leur espace privé avec de nouvelles valeurs produites dans l'espace public. Cette fusion est réalisée sous leur contrôle, et produisent des résultats dans l'espace privé des utilisateurs.

Ce comportement particulier a des conséquences majeures :

1. au moment de l'enregistrement d'une modication, un utilisateur n'a aucun moyen de connaître l'état nal réel du document ; la connaissance d'opérations concurrentes distantes étant soumise à un délai de propagation, il est possible que des fusions soient réalisées ultérieurement sans qu'il en ait connaissance,

2. ces fusions sont réalisées automatiquement par les serveurs, sans contrôle de la part d'utilisateurs humains. L'état du document après ces fusions n'a donc pas été validé par un auteur, mais résulte d'un calcul. Les algorithmes de fusion, malgré leur ecacité et les propriétés qu'ils peuvent garantir, sont très loin de pouvoir prendre en compte des aspects sémantiques dans tous les cas,

3. ce document dont le contenu résulte d'une fusion automatique est cependant public : il est accessible par tous les visiteurs autorisés du site et pas seulement à ses auteurs. Ces conséquences sont illustrées dans un petit scénario présenté dans la gure 1.7. Dans ce scénario, une page contenant un texte est répliquée sur deux sites (éventuellement plus). Le contenu de cette page est modié par 2 utilisateurs opérant chacun sur l'un des 2 sites. On suppose que les deux utilisateurs agissent sans coordination, chacun réalisant la modication qui lui semble appropriée. L'un remplace donc le mot serpent par merle, alors que le second, de manière concurrente, remplace le mot oiseau par reptile. Chacun enregistre son changement, qui est appliqué localement sur chacun des sites

immédiate-1.2. Le Problème de la concurrence dans un Wiki P2P

Fig. 1.7  Opérations concurrentes dans un wiki P2P

ment. Chacun des deux utilisateurs observe à ce moment là un contenu qui lui semble cohérent et correspondant à ses intentions, mais n'a aucune conscience du changement réalisé par l'autre utilisateur.

Ensuite, le moteur de réplication fait son travail : les deux changements sont diusés sur les réseaux, reçus par les diérents sites, dont les sites émetteurs, et fusionnés pour produire un nouveau contenu tenant compte des deux modications. Rappelons que cette fusion est opérée sur tous les sites, de manière automatique et sans contrôle de la part des utilisateurs. Cette fusion produit une nouvelle valeur : un texte dans lequel serpent est remplacé par merle et oiseau par reptile. Il faut remarquer que ce contenu respecte parfaitement les conditions de convergence (le même état est obtenu sur les diérents sites) et de préservation des intentions des utilisateurs (les deux modications sont intégrées). Ce contenu ne satisferait probablement aucun des deux auteurs, et pourtant c'est le contenu accessible par tous les visiteurs accédant au wiki sur l'un des sites du réseau. Remarquons que ce problème se produit sur tous les sites du réseau, qu'ils soient émetteurs d'une modication ou non. De plus, les auteurs des modications ne sont avertis du problème que dans le cas où, après avoir sauvegardé une modication, ils font un nouvel accès à la page et en examine le contenu avec attention. Enn, soulignons que le problème n'est pas dû à l'algorithme de fusion : de nombreux algorithmes fusionneront les modications de l'exemple sans détecter de conits (les modications ont lieu sur des lignes diérentes). Le problème est lié au fait que la fusion est réalisée dans l'espace public et en dehors du contrôle des utilisateurs.

1.2.2 Rendre les utilisateurs conscients de la concurrence

Pour remédier à ce problème, nous proposons une approche basée sur la conscience de groupe.

Notre proposition consiste à étendre le moteur de wiki avec un mécanisme rendant les visiteurs et les auteurs du wiki conscients du statut d'une page vis-à-vis de la concurrence. Nous appellerons un tel mécanisme un mécanisme de conscience de la concurrence.

Ce mécanisme doit permettre d'une part aux visiteurs d'un wiki d'être informés du fait qu'une page a été produite par un algorithme de fusion sans avoir été relue par son ou ses auteurs. D'autre part, il doit aider les auteurs d'une page à résoudre les éventuels problèmes de consistance de son contenu qui seraient dus à la concurrence. Cela passe par la compréhension de l'état courant de la page ainsi que de son historique.

Plus concrètement, ce mécanisme doit permettre aux visiteurs et auteurs d'un wiki de répondre au questions suivantes :

1. La page visualisée a-t-elle été produite par un auteur humain, ou bien a-t-elle été produite par l'algorithme de fusion déclenché par le serveur ? En d'autres termes, le contenu visualisé a-il-été validé par un auteur humain ?

2. Dans le cas où la page visualisée résulte d'une fusion, quelles régions de la page sont concernées par cette fusion ? Quel est l'impact de cette fusion sur le contenu observé ?

3. Dans l'historique d'une page, quelles versions sont le résultat d'une fusion et quelles versions sont le résultat d'une édition par un auteur ? Quelles modications concur-rentes ont produit une version fusionnée ?

Par ailleurs, il est important que le mécanisme que nous allons proposer fonctionne dans le contexte prévu pour un wiki P2P et ne remette pas en cause ses propriétés. Cela signie concrètement que ce mécanisme doit fonctionner dans un cadre P2P totalement décentralisé, éventuellement à grande échelle avec des noeuds pouvant joindre et quitter le réseau à tout moment. De plus, le mécanisme de conscience de concurrence doit être sans eet sur la correction du système : la convergence à terme et le respect des intentions doivent être conservés.

Nous reviendrons plus en détail sur les objectifs de notre travail dans la section 1.4. Dans la section suivante, nous présentons rapidement les approches existantes en matière de concurrence et de conscience de la concurrence dans les systèmes existants.

1.3. Concurrence et conscience de groupe dans les systèmes collaboratifs

1.3 Concurrence et conscience de groupe dans les