• Aucun résultat trouvé

Couche de routage P2P

5.3 Choix des protocoles

5.4.2 Couche de routage P2P

Afin d’impl´ementer la couche de routage P2P Pastry ainsi que la couche de communi-cation de groupe, l’utilisation du package FreePastry [32], une impl´ementation open-source de Pastry par Rice university, a ´et´e faite.

La version de FreePastry utilis´ee9 supporte les trois types de couches de transport suivants :

Le mode “direct” : permet d’effectuer une simulation de Pastry localement, c’est-`a-dire sans aucune communication r´eseau en ´emulant un r´eseau de noeuds Pastry.

Le mode “RMI” : permet d’utiliser comme couche de transport Java RMI.

Le mode “Wire” : utilise une communication par sockets.

Le but ici est donc de cr´eer un nouveau mode “Web Service”. Tout ces modes de communication ont leur propre version des trois fichiers suivants (du mode RMI dans ce cas-ci) :

RMINodeHandle.java : repr´esente une r´ef´erence vers un noeud Pastry qui sera uti-lis´ee par exemple dans le leaf set. Cette classe impl´emente les diff´erents appels des m´ethodes d’un noeud distant. Celle-ci sera donc la partie cliente de la couche de transport.

8Classe compos´ee d’attributs primitifs ou d’objets d’autres classes simples et appel´ee classe de erialisation dans la suite.

9Version 1.3.1.

RMIPastryNode.java : repr´esente un noeud en tant que tel qui va impl´ementer les diff´erentes m´ethodes accessibles au monde ext´erieur. Il s’agira donc ici de la partie serveur de la couche de transport.

RMIPastryNodeFactory.java : permet de construire une instance d’unPastryNode, d’ini-tialiser l’ensemble de ses tables ainsi que ses diff´erents dispositifs de communication.

Cette classe permettra ´egalement la connexion du noeud cr´e´e `a un noeud distant du r´eseau.

La suite de cette section d´etaillera donc ces diff´erents fichiers du mode “Web Service”

cr´e´e ainsi que certains d´etails de s´erialisation.

WSNodeHandle.java

Cette classe, h´eritant de la classe DistNodeHandle10, devra contenir une r´ef´erence vers le noeud distant associ´e de fa¸con `a permettre ais´ement les appels de m´ethodes via le service web. Pour ce faire, un attribut de type WSRemoteNodeI(qui est l’interface du service web) est cr´e´e et initialis´e en suivant les instructions d´ecrites `a la section 5.4.1. De plus, cette classe impl´emente les m´ethodes suivantes :

void doSend(Message msg) : il s’agit de la m´ethode qui va effectuer l’envoi en tant que tel d’un message vers le noeud distant auquel fait r´ef´erence cet objet. Elle va

´egalement traiter le probl`eme de non-joignabilit´e du noeud distant ou tout autre probl`eme menant `a l’´echec de l’envoi en marquant ce dernier comme susceptible d’ˆetre mort. Cette mortalit´e sera v´erifi´ee, par la suite, par le noeud local lors du ra-fraˆıchissement du leaf set. Dans le cas d’un envoi r´eussi, le noeud distant sera marqu´e comme vivant.

void receiveMessageImpl(Message msg) : cette m´ethode est appel´ee en pratique pour envoyer un message vers le noeud distant. Celle-ci va ins´erer ce message dans une file d’attente de messages `a envoyer. D’ailleurs, ce sera cette file qui fera appel `a la m´ethode doSendci-dessus.

void doPing() : comme son nom l’indique, cette m´ethode permet de v´erifier si le noeud distant est vivant. Pour ce faire, la m´ethode va essayer de r´ecup´erer l’identifiant du

noeud distant (via la m´ethode getNodeId()du service web distant) et modifier le sta-tut de vie de ce dernier, en cons´equence de la r´eussite ou de l’´echec de cette op´eration.

Un constructeur de s´erialisation : ce constructeur aura pour tˆaches d’initialiser les di-vers attributs du handle et surtout d’initialiser le proxy qui permettra les connexions vers le service web du noeud distant.

WSPastryNode.java

WSPastryNode est une classe qui a pour tˆaches d’impl´ementer les diverses m´ethodes du service web et prendre en charge des files d’attente pour l’envoi et la r´eception de messages.

Pour ce faire, un tel objet aura deux processus charg´es de v´erifier le contenu de chacune des deux files et d’effectuer l’envoi ou la r´eception via l’appel de fonctions ad´equates. Il est

`

a noter que l’ensemble des comportements d´ecrits dans la section Pastry du chapitre 2 est assur´e par les classes parentes (en particulier la classePastryNode). Les diff´erentes m´ethodes impl´ement´ees pour le service web sont les suivantes :

LeafSetMessage getLeafSetM() : cette m´ethode a pour buts de r´ecup´erer le leaf set du noeud courant et de retourner comme r´esultat ce leaf set au format s´erialis´e.

RouteSetMessage[ ] getRouteRow(int row) : comme son nom l’indique, cette m´ethode va r´ecup´erer une ligne de la table de routage du noeud local et retourner cette ligne au format s´erialis´e comme r´esultat.

remoteReceiveMessage(SerMessage msg, NodeId hopDest) : cette m´ethode va d´es´erialiser le message et appeler une autre m´ethode locale, de mˆeme nom, qui va ajouter ce

der-nier `a la file d’attente de r´eception. Il est `a noter que le polymorphisme est utilis´e `a ce stade, ´etant donn´e que les messages sont de types sp´ecialis´es multiples. De plus, la phase de d´es´erialisation aura pour mission de tester les types de fa¸con `a reconstruire un message avec le bon type.

Il est `a noter que la m´ethode permettant de r´ecup´erer l’identifiant du noeud est impl´ement´ee par la classePastryNode. En effet, celle-ci ne n´ecessite aucun traitement sp´ecifique `a la couche P2P mais sera juste rendue disponible au monde ext´erieur.

WSPastryNodeFactory.java

Cette classe a pour tˆaches de permettre la construction d’un WSPastryNode ainsi que l’initialisation de ce dernier. Pour ce faire, WSPastryNodeFactory impl´emente les m´ethodes suivantes :

NodeHandle generateNodeHandle(InetSocketAddress address) : Cette m´ethode va permettre de renvoyer unNodeHandle(de type WSNodeHandle) dont le proxy vers le noeud distant aura pr´ealablement ´et´e initialis´e. L’utilisation de celle-ci est faite lors du d´emarrage d’un noeud afin de construire une r´ef´erence vers le noeud (de boots-trap), qui sera utilis´e lors de la phase d’initialisation. Il est `a noter que l’adresse pass´ee en param`etre `a cette m´ethode se verra convertie au format URI pour la construction du proxy.

PastryNode newNode(bootstrap,nodeId) : Permet de cr´eer unWSPastrynodequi sera initialis´e `a partir du noeud distant bootstrap. En pratique, cette m´ethode est appel´ee par une autre m´ethode (de mˆeme nom) qui se chargera de g´en´erer l’identifiant du noeud. Apr`es avoir effectu´e les diff´erentes op´erations concernant la publication du service web (d´ecrites `a la section 5.4.1), cette m´ethode va initialiser le leaf set ainsi que la table de routage du noeud cr´e´e. De plus, elle va initialiser les diff´erents ges-tionnaires de messages particuliers (comme la demande de maintenance du leaf set) et y transmettre certains messages, d´emarrant ainsi la proc´edure de connexion au r´eseau.

M´ethode de proximit´e : WSPastryNodeFactory impl´emente ´egalement une m´ethode per-mettant de d´eterminer le noeud le plus proche entre deux selon une m´etrique de proxi-mit´e. Dans cette application, cette m´etrique d´efinit le temps total mis par la deman-de/r´eponse de l’identifiant du noeud distant. Cette m´ethode ainsi que des m´ethodes de requˆete de tables diverses seront utilis´ees lors de l’initialisation du noeud.

Documents relatifs