cours algorithme répartie

Upload: amadeous09

Post on 07-Jul-2015

373 views

Category:

Documents


1 download

TRANSCRIPT

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN

CHAPITRE II LA COMMUNICATIONversion du 21 novembre 2002

1 IntroductionDans ce chapitre, nous nous focaliserons sur la communication aussi bien travers le mode de communication entre les entits qu' travers le comportement du rseau dans la fonction de transit. Tout d'abord, nous reviendrons sur la rception de messages. Un des avantages de la rception asynchrone est qu'un message est immdiatement trait (moyennant l'ventuel retard d l'arrive d'un message lors de l'excution d'une primitive de service). Dans le cas d'une rception synchrone, si l'application n'est pas immdiatement intresse par l'arrive d'un message celui-ci doit tre stock pour un usage ultrieur. Quelque soit la taille prvue du tampon des messages, un dbordement est toujours possible si un mcanisme adquat n'est pas prvu. Ce mcanisme s'appelle le contrle de flux et nous l'tudierons la fois dans un environnement local [Boc79] et dans un environnement tendu o les entits sont les noeuds de routage et o le graphe de communication n'est plus une cliq ue. Un des objectifs de l'algorithmique rpartie est la recherche de la symtrie car celle-ci est souvent synonyme de simplicit et d'efficacit de conception. Un des moyens d'y parvenir est de rendre les primitives de rception et d'mission quasiment identiques tout au moins en ce qui concerne la synchronisation. Ceci nous conduit au concept de rendez-vous que nous dvelopperons dans la troisime section. Enfin, nous montrerons que le fait que les canaux d'un rseau soient fifo n'empche pas des comportements pathologiques dans le transit des messages. Aussi nous dvelopperons le concept de rseau fifo qui garantit l'absence de tels comportements et nous montrerons comment muler un rseau fifo au dessus d'un rseau asynchrone quelconque. Au coeur de cette problmatique, se trouve l' ordre causalentre vnements d'une excution sur lequel nous reviendrons plusieurs reprises.

Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad

1

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN

2. Contrle de flux2.1 Contrle point point : le modle producteur / consommateur 2.1.1 Description du problme Considrons deux sites, P le producteur et C le consommateur, tels que le producteur envoie des messages au consommateur via un canal (unidirectionnel). Lorsque l'application du producteur veut envoyer un message au consommateur elle appelle la primitive produire(m) o m est un paramtre par valeur de message. Lorsque l'application du consommateur veut recevoir un message du producteur, elle appelle la primitive consommer(m) o m est un paramtre par rfrence de message. La vitesse dexcution de P ntant assujettie aucune contrainte, il est possible que le rythme de production et dmission de messages de P soit suprieur au rythme avec lequel C les consomme. Dans une telle situation, quelque soit le nombre d'emplacements prvus pour stocker les messages reus et non encore consomms, ceux-ci peuvent se trouver occups alors quun nouveau message arrive. Ncessairement soit le nouveau message est rejet, soit l'un des messages stocks est cras par le nouvel arrivant. Nous devons donc mettre en place un contrle de flux pour prvenir ce problme. 2.1.2 Description de la solution Afin de rsoudre ce problme d lasynchronisme des sites P et C, une solution consiste asservir la production et lmission des messages par le site P des informations de consommation fournies par C. Le producteur disposera ainsi d'autorisations de produire (initialement gales la taille du tampon du consommateur). A chaque envoi, celui-ci consomme une autorisation. De son ct, le consommateur envoie une autorisation la fin de chaque appel consommer signifiant qu'une place s'est libre dans le tampon. Bien entendu, le consommateur ne peut consommer que si son tampon n'est pas vide. 2.1.3 Algorithme Nous dbutons notre spcification par les deux variables de contrle de chacun des sites. Nbmess, la variable du consommateur indiquant le nombre de messages dans le tampon Nbcell, la variable du producteur indiquant le nombre d'autorisations D'autre part la gestion du tampon chez le consommateur amne dfinir les variables suivantes : T, le tampon de taille N contenant les messages consommer in, l'indice d'insertion dans le tampon out, l'indice d'extraction du tampon Le tampon est gr de manire circulaire : lorsqu'un indice est en fin de tableau, il est remis zro. Algorithme du producteur Var Nbcell : entier initialis N; Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad 2

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN

produire(m) Dbut Attendre(Nbcell>0); envoyer_(C,m); Nbcell = Nbcell - 1; Fin sur_rception_de(C,Ack) Dbut Nbcell = Nbcell + 1; Fin Algorithme du consommateur Var Nbmess : entier initialis 0; in,out : 0..N-1 initialis 0;

consommer(m) Dbut Attendre(Nbmess > 0); m = T[out]; out = (out + 1) % N; Nbmess = Nbmess - 1; envoyer_(P,Ack); Fin sur_rception_de(P,m) Dbut T[in] = m; in = (in + 1) % N; Nbmess = Nbmess + 1; Fin Remarque : Lorsque la valeur de l'indice in est gale celle de out, ceci signifie soit que le tampon est plein soit qu'il est vide. Aussi il est ncessaire d'introduire la variable Nbmess pour tester l'existence d'un message dans le tampon. 2.1.3 Un exemple de droulement produire(m) Site P m Site C consommer(m') Ack dpt de m incrmentation

Figure 2.1 : Un extrait d'une excution du producteur / consommateur

Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad

3

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN 2.1.4 Vrification de l'algorithme Nous nous limiterons ici la preuve du non dbordement du tampon. Nous allons dmontrer que pour tout tat accessible, l'galit suivante est vrifie : Nbmess+Nbcell+Nbt=N o Nbt dsigne le nombre de messages en transit (application ou acquittement). Ceci garantit qu'un message d'application arrivant ne trouve jamais le tampon plein. Nous le dmontrons par induction. L'galit est vrifie initialement. Supposons la vraie dans un tat donn et examinons l'effet de chacune des primitives : aprs un appel produire, Nbcell est dcrment et Nbt est incrment aprs un appel consommer, Nbmess est dcrment et Nbt est incrment aprs une rception d'un message, Nbmess est incrment et Nbt est dcrment aprs une rception d'un acquittement, Nbcell est incrment et Nbt est dcrment Dans tous les cas, l'galit reste vrifie. 2.1.4 Une amlioration possible L'envoi de messages d'acquittement peut se rvler coteux puisque le contenu informatif de ces messages est nul : seule leur arrive provoque une incrmentation. Une amlioration lmentaire consiste remarquer que sur une liaison bidirectionnelle, chaque site (selon le canal) joue le rle du producteur et du consommateur. Il suffit alors de retarder (selon un dlai configurer) l'envoi des acquittements. Si, avant l'expiration du dlai, un message d'application doit tre envoy, on lui adjoint le nombre d'acquittements retards et ceci moindre cot. Dans le cas contraire, on envoie un message d'aquittements multiples, ce message tant envoy sur un canal peu occup (donc sans gne pour l'application). Dans tous les cas, on rarme un nouveau "time-out" lors du prochain acquittement envoyer. 2.2 Gnralisation aux producteurs multiples On considre une gnralisation du modle producteur-consommateur dans lequel on a p sites de production P1,,Pp et toujours un seul site de consommation C. Comme dans le modle prcdent, le consommateur dispose d'un tampon de stockage de N cellules (figure 2.2).

P1,,Pi ,,Pp

C Tampon

Figure 2.2 : p producteurs et un consommateur

Les interfaces qui dfinissent le service sont inchanges : produire(m) et consommer(m). Une application vidente de ce schma est la gestion des requtes dans un modle client-serveur : les producteurs sont les clients et le consommateur est le serveur. On ne s'intresse pas ici au traitement des requtes.

Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad

4

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN Le principal problme soulev par ce modle est le partage du tampon entre les diffrents producteurs. 2.2.1 Une premire solution par partage statique La solution la plus simple consiste partager a priori (do le caractre statique de la solution) les N emplacements entre les p producteurs. Le site Pi se voit attribuer Ni places avec Ni = N (ce qui implique N p). Ds lors il n' y a plus comptition entre les producteurs puisquils ne partagent plus de ressources. D' un certaine manire, cette solution consiste appliquer la solution prcdente pour p canaux de communication moyennant un multiplexage des messages lors de la consommation. Chaque site producteur ne communique quavec le consommateur : au niveau du contrle, le rseau logique est une toile dont le site C est le centre. Malheureusement cette solution conduit une sous-utilisation des ressources. Considrons la situation o seuls q ( i alors S i retarde sa rponse S j sinon il rejette cette requte.

ack req

S1 rej req req S2 rej

S3

Figure 2.7 : Asymtrie de comportement La figure 2.7 illustre l'application de cette rgle l'exemple prcdent : S1 retarde sa rponse, S3 (respectivement S2) rejette la demande de S2 (respectivement S1). S1 peut rpondre favorablement S3 et un rendez-vous aura lieu.

Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad

17

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN Dans le cas gnral, l'absence d'interblocage se vrifie par un raisonnement similaire celui dvelopp lors de la structuration des tampons en notant qu'un site ne peut tre bloqu que par un site d'identit infrieure. Exemple 2 Soit une application rpartie sur deux sites S1 et S2. Supposons que l'application du site S1 dsire un rendez-vous avec S2. Comme prcdemment, le service met une requte de rendez-vous. A la rception, le service du site S2 dont l'application n'est pas cet instant interesse par un rendez-vous rejette la requte. Que doit faire le service du site S1 la rception de ce rejet? Il pourrait aprs un dlai, remettre sa requte. Ceci soulve le problme de la configuration du dlai : trop court, il peut engendrer un trafic inutile sur le rseau; trop long, il peut retarder le fonctionnement de l'application. On remarque que dans le contexte du rendez-vous, il est inutile de retransmettre une requte. Quand l'application du site S2 souhaitera un rendez-vous, son service enverra une requte aussitt accepte. Autrement dit, puisqu'il faut tre deux pour le rendez-vous, il suffit qu' tout instant l'un des deux ait l'initiative du rendez-vous. La mise en oeuvre de cette prise d'initiative se fait par l'intermdaire d'un jeton par paire de sites {i,j}. Le site qui possde le jeton a le droit d'envoyer une requte et il perd ce droit avec l'envoi de telle sorte qu'il n'y aura jamais de rmission et ceci sans perdre la possibilit du rendez-vous. La rpartition initiale des jetons sur les sites est arbitraire ; par commodit de programmation, on donnera un jeton associ une paire de sites au site de plus grande identit. 3.3 Graphe d'tat d'un service de rendez-vous Avant d'crire l'algorithme, nous allons en donner une reprsentation abstraite l'aide d'un graphe d'tat du service d'un site. Les tats sont reprsents par les noeuds du graphe et les arcs correspondent aux transitions d'tats. Chaque transition respecte la syntaxe : garde actions o la garde est une expression boolenne traduisant les conditions d'occurence de la transition et les actions indiquent les modifications des variables locales du service. La garde ou les actions peuvent tre omises. De plus, afin de rendre plus compacte la reprsentation, nous notons j?m la rception d'un message m venant du site j par le service et j!m l'envoi par le service au site j du message m. Lorsque l'application du site i n'a pas appel la primitive de rendez-vous, le service est au repos. A l'appel de la primitive de rendez-vous RV, la variable Ei est initialise avec le sous-ensemble des sites, possibles correspondants du rendez-vous. Le site passe l'tat encours. Dans cet tat, le site recherche un candidati c'est dire un site de Ei pour lequel il possde le jeton associ la paire {i,candidati}. La prsence des jetons est mmorise dans le tableau de boolens jetoni. Aprs l'envoi d'une requte candidati, le service passe alors l'tat attente-sans-retarder. A la rception d'un acquittement, il passe l'tat succs puis au retour de la primitive (ayant renvoy l'application le site retenu) de nouveau au repos. En cas de rejet, il retourne encours pour rechercher un autre candidati. Alors que le site est dans l'tat attente-sansretarder, celui-ci peut recevoir une requte qui lui conviendrait; il applique alors la procdure dcrite dans l'exemple 1 et passe l'tat attente-en-retardant o le site retard est indiqu par la variable retardi. Dans cet tat, quelque soit la rponse du

Cours dalgorithmique rpartie Joyce El Haddad et Serge Haddad

18

Universit Paris-Dauphine : IUP GMI, IUP MIAGE, DESS SITN candidati, le site i passera l'tat succs avec ventuellement un changement d'identit de candidati. Il devra de toutes faons envoyer une rponse retardi. Dans un tat o le site n'est pas en cours de service (repos) ou ventuellement bloqu (encours, attente-sans-retarder, attente-en-retardant), il faut prendre en compte les ventuelles rceptions de requtes. Deux cas mritent une explication. Si l'on reoit une requte dans l'tat attente-en-retardant on la rejette car, de toutes faons, on est assur d'un rendez-vous. Si l'on reoit une requte d'un site de Ei dans l'tat encours, on l'accepte et on passe directement l'tat succs.

j?reqj!rej;jetoni[j]=V repos RV(Ei)

renvoyer(candidati) j?rejretardei!ack; candidati=retardi succs j?req et j Ei j!ack;candidati=j; jetoni[j]=V

j?ack retardi!rej j?reqj!rej; jetoni[j]=V attente en retardant j?ack en cours j?req et jEi j!rej; jetoni[j]=V jEi et jetoni[j]=V j!req;candidati=j; jetoni[j]=F

j?req et jEi et j>i jetoni[j]=V;retardi=j

j?req et (j Ei ou j