Nu trebuie să dăm cu banul?
Problema rutajuluiViorica CovaliDefiniția problemeiCelor nefamiliarizați cu terminologia sistemelor distribuite le recomandăm să citească mai întâi coloana din dreapta. În cele ce urmează vom considera că mesajele au lungime fixă prestabilită și nu vom face distincție între mesaj și pachet. Problema rutajului constă în determinarea drumurilor de comunicație între perechi de noduri ale sistemului distribuit. Pentru rezolvarea acestei probleme, fiecare nod trebuie să conțină informații despre topologia rețelei. Aceste informații sunt grupate în tabele de rutaj locale fiecărui nod. Dacă un nod i recepționează un mesaj m cu destinația j, rutajul, utilizând tabelul de rutaj, precizează spre care vecin k al lui i va fi transmis mesajul. Momentul de timp în care rutajul stabilește traseul, depinde de tipul rutajului folosit: rutaj cu canale virtuale sau rutaj dinamic. În cazul rutajului cu canale virtuale, nodurile prin care va trece mesajul pentru a ajunge la destinație sunt stabilite la inițierea sesiunii de comunicație și toate pachetele acestei sesiuni vor urma aceeași cale. Fig.1 Rutajul în rețea cu canale virtuale În cazul rutajului dinamic, decizia se ia în timpul parcurgerii drumului spre destinație, în fiecare nod. Prin urmare, pachetele livrate în aceeași sesiune de comunicare pot avea drumuri diferite. Fig.2 Rutajul dinamic. Problema rutajului poate fi împărțită în două subprobleme: 1. Determinarea tabelelor de rutaj Tabelele de rutaj trebuie să fie calculate la inițializarea rețelei și să fie actualizate la fiecare modificare a topologiei rețelei. 2. Direcționarea pachetului La trimiterea unui pachet în rețea, acesta trebuie să fie direcționat, utilizând tabelele de rutaj. Pentru soluționarea acestor subprobleme, sunt elaborați diverși algoritmi de rutaj. Algoritmul de rutaj este un protocol al nivelului rețea (al modelului OSI) care are ca sarcină coordonarea pachetelor în timpul deplasării lor prin rețea, până ajung la destinație. Obiectivele în proiectarea unui algoritm de rutaj sunt:
În general, pentru îndeplinirea acestor obiective se folosește o colecție de algoritmi a căror complexitate rezultă din următoarele:
În cele ce urmează vom prezenta mai multe metode de rutaj în care vor fi analizate două aspecte ale problemei de rutaj: 1) Alegerea traseului pentru a atinge performanțe mai bune: a) elaborarea algoritmilor de rutaj ce determină drumuri de cost minim; b) elaborarea algoritmilor de rutaj având caracteristici apropiate de cele optime. 2) Al doilea aspect al problemei de rutaj constă în răspândirea informației de control între toate nodurile rețelei, necesară pentru alegerea rutajului, incluzând informația de ieșire din funcțiune și restabilirea liniilor de comunicație și a nodurilor. Există două caracteristici de bază ale rețelei care sunt influențate de algoritmii de rutaj: capacitatea canalului (cantitatea de servicii) și reținerea medie a pachetului (calitatea serviciilor). Rutajul cooperează cu protocolul de coordonare a fluxului în determinarea caracteristicilor prin intermediul mecanismului legături cu reveniri (Fig.3). Există situații, în care cantitatea de informație ce vine din exterior este mai mare decât cea care poate fi deservită, chiar și în cazul unui rutaj optim. Sarcina de a coordona fluxul de informație revine algoritmilor de coordonare a fluxului. Fig.3 Legătura dintre rutaj și coordonarea fluxului. Dacă fluxul de informație apărut de la surse din exterior este relativ mic față de capacitatea canalelor, atunci el va fi integral primit de rețea și vom avea: capacitatea de trecere = fluxul din exterior, în caz contrar capacitatea de trecere = fluxul din exterior - cantitatea de flux respinsă. Una dintre sarcinile de eficiență ale unui sistem cu prelucrare distribuită este de a efectua un număr mai mare de servicii într-un timp mai redus, atât cererilor din interior cât și celor apărute din exterior. Pe lângă componentele fizice ale sistemului distribuit (canalele de comunicații având capacitate mai mare, noduri cu prelucrare rapidă etc.) o mare importanță o are alegerea tipului de rutaj în rezolvarea acestei sarcini. Prin urmare, dacă algoritmul de rutaj reușește să mențină relativ bine o reținere mică a pachetelor în noduri care se găsesc în drum spre destinație, atunci algoritmul de coordonare a fluxului permite intrarea în rețea a unui flux mai mare de informație. Algoritmi de rutaj de bazăScopul algoritmilor de rutaj este de a coordona deplasarea mesajelor prin rețea până ajung la destinație. Pentru atingerea unor performanțe mai bune, algoritmii de rutaj au ca scop determinarea unui traseu bun. Metodele de rutaj folosite în acest scop se bazează pe un șir de algoritmi de determinare a drumurilor optime în grafe. Algoritmii de rutaj se deosebesc în funcție de criteriul de optimalitate al traseului:
Algoritmi de rutaj bazați pe determinarea drumului de cost minimElaborarea algoritmilor din această clasă se bazează pe algoritmii de determinare a drumului de cost minim în grafuri, adaptați la context distribuit. Algoritmii din această clasă trebuie să îndeplinească următoarele criterii:
Algoritmul distribuit și asincron al lui Bellman-FordPrincipiul de bază Algoritmul propus este o adaptare la context distribuit a algoritmului lui Ford inspirat din principiul programării dinamice a lui Bellman. O caracteristică a acestui algoritm constă în faptul că necesită păstrarea unei cantități mici de informație în nodurile rețelei, deoarece pentru fiecare nod este suficientă informația privitoare la lungimile canalelor ce pleacă de la el și numărul nodurilor din rețea. Vom considera că lungimea dij a fiecărei muchii (i,j) este pozitivă și că lungimile lor vor rămâne fixe după momentul de timp t0, moment până la care au loc toate modificările în rețea. Principiul pe care se bazează algoritmul lui Bellman-Ford constă în determinarea distanței minime Di de la nodul i la nodul destinație comun (notat, de exemplu, prin 1) pentru toate nodurile, cu ajutorul următoarelor formule: unde N(i) este mulțimea nodurilor vecine cu i. (În practică pentru fiecare nod destinație se reexecută algoritmul.) Pentru condițiile inițiale algoritmul lui Bellman-Ford determină distanțele minime între nodurile rețelei și destinație. Distanțele Di pot fi determinate distribuit în fiecare nod executându-se iterația (1). Dacă se stabilește o sincronizare, astfel încât nodurile execută concomitent iterația (1) de ordinul h, făcând schimb de rezultate între iterații, atunci pornind cu condițiile inițiale (3), algoritmul termină execuția cel mult în N-1 pași (N - numărul nodurilor în rețea). Stabilirea unei sincronizări în sisteme cu prelucrare distribuită este dificilă, de aceea se folosește o alternativă a acestui algoritm care funcționează în regim asincron și care nu necesită un protocol de inițializare respectiv protocol de reluare a execuției algoritmului. Strategia de execuție constă în modificarea în timp a valorii lui Di folosind noua valoare Dj, primită de la vecinii jÎN(i) și ultimele lungimi, precum și starea canalelor adiacente nodului i după formula: Reprezentarea formală a algoritmuluiÎn orice moment t în fiecare nod ič1 există: Dji(t) - valoarea distanței minime de la j la nodul 1, jÎN(i), care a fost transmisă nodului i ultima dată; Di(t) - valoarea distanței minime de la i la nodul 1, care a fost calculată ultima dată în conformitate cu iterația Bellman-Ford. Distanțele pentru nodul 1 sunt întotdeauna nule. D1(t)=0 pentru orice t ł t0; D1i(t)=0 pentru orice t ł t0 și i, pentru care 1ÎN(i). Fiecare nod i conține lungimile dij pentru toți jÎN(i), care se presupun a fi pozitive și nu se modifică în timp după momentul t0. Presupunem că distanțele dintre noduri nu se modifică decât în momentele t0, t1,...; tm+1 > tm pentru toți m și tmź0 când mź„, în care în fiecare nod ič1 se produce unul din următoarele trei evenimente: 1. Nodul i actualizează Di(t) după formula: și păstrează Dji(t), jÎN(i) neschimbate; 2. Nodul i primește de la jÎN(i) valorile Dj, calculate în j într-un moment de timp anterior, actualizează valorile Dji(t), celelalte păstrându-le neschimbate; 3. Nodul i este liber și toate valorile aflate în nod rămân neschimbate. Fie Ti - mulțimea momentelor de timp în care în nodul i se produc modificări de tip 1 și Tji - mulțimea momentelor de timp în care nodul i primește informații de la j de tipul 2. Presupunem următoarele:
Folosim această formalizare pentru a arăta valabilitatea algoritmului distribuit și asincron. Valabilitatea algoritmului Următoarea propoziție confirmă faptul că, într-o perioadă de timp limitat valorile Di(t) devin egale cu distanțele minime corecte. Propoziție. Există momentul de timp tm, astfel încât Di (t)=Di pentru toți t ł tm, i = 1, ..., N, unde Di este distanța minimă corectă de la nodul i la nodul destinație (aici notat cu 1). Demonstrație: Ideea demonstrației constă în a determina două șiruri (Dik) și () pentru fiecare nod i, care să îndeplinească inegalitățile: Dik Ł Dik+1 Ł Di Ł Ł (4) Dik = Di = pentru fiecare k suficient de mare (5) Aceste șiruri se obțin cu ajutorul algoritmului Bellman-Ford, ce folosește condiții inițiale diferite. Apoi se arată că pentru oricare k și i valorile Di(t) satisfac inegalitățile: Dik Ł Di(t) Ł pentru toți t suficient de mari. Rolul cheie în demonstrație îl joacă proprietatea de monotonie a iterațiilor Bellman-Ford care constă în faptul că, dacă pentru două mărimi scalare Dj' și Dj'' se îndeplinește inegalitatea Dj' ł Dj'' pentru toți jÎN(i), atunci inegalitatea se păstrează și după iterație, adică Din această inegalitate rezultă că dacă Dik sunt șirurile formate în urma iterațiilor Bellman-Ford (1) și (2) cu condițiile inițiale Di0, i = 1, ..., N și este adevărată Di1 ł Di0 pentru orice i, atunci Dik+1 ł Dik pentru toți i și k. Analog, dacă Di1 Ł Di0 pentru orice i, atunci Dik+1 Ł Dik pentru toți i și k. Fie Dik, i = 1, ..., N - iterația de ordinul k a algoritmului Bellman-Ford determinat de iterația (1) și (2) având condițiile inițiale Di0 = „, i=1 și Di0 = 0, iar Dik, i=1, ...,N - iterația de ordinul k cu condițiile inițiale =0, i=1, ...,N. Lemă*). Șirurile (Dik) și () determinate mai sus, îndeplinesc relațiile (4) și (5). Algoritmul lui Bellman-Ford determină drumul de lungime minimă între nodurile rețelei și nodul destinație (fixat). Determinarea drumului de lungime minimă între oricare două noduri se poate face executând în paralel algoritmul lui Bellman-Ford pentru fiecare nod ales ca și destinație. Pentru aceasta toate nodurile i vor avea următoarele declarații de variabile: var disti:tablou[1..N] cu valori în 0..N /* inițializat cu 0 pentru indicele i și cu N altfel */ rutaj:tablou[1..N] cu valori în 1..N constante = { mulțimea vecinilor lui i } /* dij = distanța de la i la vecinul j */ Comportamentul nodului i este următorul: vom nota prin pch(x) - pachetul ce transportă informația x. Inițial /* aceasta se execută pentru un număr oarecare de noduri, dar cel puțin o dată */ Úț înc ł pentru orice jÎvecini livrează pch(disti) spre j Àț În cazul recepționării pch(d) de la j: Úț Înc ł Modif Ź false; ł Úț pentru k=1,N execută ł ł Úț dacă disti[k]>dij+d[k]; ł ł ł atunci disti[k]Źdij+d[k]; ł ł ł rutaji[k]Źj ł ł ł modifŹtrue; ł ł Àț ł Àț ł Úț dacă modif ł ł atunci " r Î vecini: livrează pch(disti) spre r ł Àț Àț Algoritmul prezentat rezolvă prima parte a problemei de rutaj, cea de calculare a tabelelor de rutaj. În cazul rutajului static, tabelele de rutaj se calculează la inițierea sistemului cu prelucrare distribuită și rămân neschimbate pentru întreaga durată de activitate. După calcularea tabelelor de rutaj, funcția algoritmilor de rutaj se reduce la cea de direcționare a pachetelor în rețea, folosind tabelele de rutaj. Comportamentul nodului i este următorul: { Nodul i conține un pachet cu destinație j } Úț dacă j=i ł atunci "livrează pachetul local" ł altfel "trimite pachetul la nodul rutaji[j]" Àț Discuții privind algoritmul La apariția unor modificări de topologie sau privitor la costul parcurgerii unui canal, pentru actualizarea tabelelor de rutaj, se reexecută algoritmul, recalculând întregul tabel de rutaj. Pentru ca algoritmul să fie eficient, intervalul de timp dintre ti și ti+1 trebuie să fie suficient de mare. Prin urmare modificările survenite prea des în sistemele cu prelucrare distribuită ce folosesc astfel de algoritmi duc la ineficiența acestor sisteme. Aceasta este cauzată de unele neajunsuri ale algoritmului, printre care amintim: În unele situații algoritmul necesită un număr mare de iterații pentru calcularea tabelelor de rutaj. Aceasta se întâmplă nu din cauza asincronității algoritmului, ci din cauza alegerii arbitrare a condițiilor inițiale. În situații nefavorabile (de exemplu, de topologie) algoritmul poate necesita prea multe livrări de informații. Bibliografie
Viorica Covali este doctorantă cu frecvență la Universitatea Babeș-Bolyai, Cluj; poate fi contactată prin intermediul redacției. [cuprins] |