This shows you the differences between two versions of the page.
apd:laboratoare:10 [2021/12/27 12:47] florin.mihalache [Organizarea unui cluster] |
apd:laboratoare:10 [2023/10/08 16:33] (current) dorinel.filip Move |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 10 - Stabilirea topologiei și alegerea liderului ===== | ===== Laboratorul 10 - Stabilirea topologiei și alegerea liderului ===== | ||
- | + | Documentația de laborator s-a mutat la [[https://mobylab.docs.crescdi.pub.ro/docs/parallelAndDistributed/introduction|această adresă]]. | |
- | În acest laborator vom explora utilizarea MPI în cadrul unei topologii de noduri. Vom învăța să stabilim topologia unei rețele de noduri (folosind algoritmul sondă-ecou / undă-ecou și algoritmul arbore), să alegem un lider (folosind heart-beat) și să determinăm numărul de noduri din topologie folosind un algoritm epidemic. | + | |
- | ==== Organizarea unui cluster ==== | + | |
- | + | ||
- | În cazul unui sistem distribuit, elementul cheie este **comunicarea** între procese. Aceasta dictează performanța sistemului, toleranța la defecte și logica fluxului de transfer de informații între nodurile din cadrul sistemului distribuit. | + | |
- | + | ||
- | Din punct de vedere al arhitecturii, nodurile pot fi organizate în mai multe moduri într-un cluster: | + | |
- | * **grid** -> nodurile sunt organizate pe nivele. Fiecare nod poate comunică cu vecinii pe orizontală și pe verticală. Fluxul informației este vertical și orizontal. Fiecare nod are maxim 4 vecini. | + | |
- | * **inel** -> nodurile sunt organizate în cerc. Fiecare nod vorbește cu vecinii din stânga și din dreapta. Fluxul informației este orizontal. Fiecare nod are doi vecini. | + | |
- | * **arbore** -> nodurile sunt organizate ierarhic, sub forma de arbore. Fluxul informației este vertical. Fiecare nod poate avea un număr nelimitat de vecini. | + | |
- | * **graf** -> nodurile sunt organizate sub forma unui graf. Fiecare nod poate comunica cu unul sau mai mulți vecini. Fluxul informației este abstract. Fiecare nod poate avea un număr nelimitat de vecini. | + | |
- | + | ||
- | În cadrul acestui laborator vom explora organizarea unui sistem sub forma de graf generic. Topologia de mai jos va fi folosită pentru exemplificări în cadrul laboratorului și în cadrul exercițiilor. | + | |
- | + | ||
- | {{ :apd:laboratoare:graph.png?600 |}} | + | |
- | ==== Stabilirea unei topologii ==== | + | |
- | + | ||
- | Exista trei moduri prin care o topologie poate fi stabilita in cadrul unui cluster. Nodurile pot cunoaste starea intregului cluster de la bun inceput, pot cunoaste doar vecinii sau nu pot sti nimic despre starea sistemului. | + | |
- | + | ||
- | Pentru a stabili topologia, clusterul poate opera in doua moduri: | + | |
- | * nodurile pot transmite starea lor celorlalte moduri de mai multe ori pana cand toate nodurile au topologia stabilita. Numarul de dati necesar asigurarii topologiei intre noduri se numeste **convergenta**. Acest mod este simplu de realizat, dar ineficient | + | |
- | * nodurile aleg un **lider** care sa calculeze topologia sistemului | + | |
- | + | ||
- | Problema care se ridica in cazul utilizarii unui lider care sa creeze matricea de topologie, este ca nodurile //nu stiu// calea catre lider, ci doar cine este acest lider. **Arborele de acoperire** rezolva aceasta problema. Pe baza arborelui de acoperire, nodurile trimit informatia pe care o detin catre lider, trecand prin nodurile intermediare care sunt reprezentate de parintii lor in arbore. Nodurile intermediare adauga informatia primita la informatia proprie si o trimit mai departe. In final, liderul are toata informatia sistemului si poate crea matricea de topologie. Matricea este trimisa, apoi, fiecarui nod in parte | + | |
- | + | ||
- | In cadrul acestui laborator vom explora stabilirea topologiei prin alegerea liderului. | + | |
- | + | ||
- | <note tip>In cazul retelelor de calculatoare, ruterele si switchurile sunt organizate sub forma unui cluster unde nodurile nu stiu nimic despre starea sistemului la inceput</note> | + | |
- | + | ||
- | <note important>In cazul alegerii liderului, nu este nevoie sa se cunoasca topologia la inceput, ci doar vecinii cu care nodurile pot interactiona</note> | + | |
- | ==== Alegerea liderului ==== | + | |
- | + | ||
- | Clusterele de noduri pot sa fie ierarhizate sau nu. In cadrul clusterelor bazate pe noduri autonome, nu exista un lider bine stabilit, ci contracte clare de comunicare intre noduri. Pe de alta parte, in clusterele care au lider, unul sau mai multe noduri indeplinesc functii elevate. Printre functiile elevate se numara si //stabilirea si distribuirea topologiei// catre celelalte noduri. | + | |
- | + | ||
- | Liderul reprezinta un nod sau un grup de noduri ales pe baza unei euristici. Euristica poate tine cont de resursele nodului respectiv, de numarul sau natura proceselor care ruleaza pe el sau pur si simplu de lucruri simple, precum //eticheta sa//. | + | |
- | + | ||
- | In cadrul acestui laborator vom explora alegerea liderului bazat pe rank-ul cel mai mare al unui nod. Alegerea liderului se va face pe baza unui algoritm de tipul **heartbeat**. | + | |
- | + | ||
- | === Alegerea liderului. Heartbeat === | + | |
- | + | ||
- | Functionarea unui algoritm **heartbeat** se aseamana cu bataile inimii: | + | |
- | - **sistola** -> partea de "expandare". Informatia este transmisa catre nodurile vecine. | + | |
- | - **diastola** -> partea de "contractie". Informatia este receptata inapoi de la nodurile vecine. | + | |
- | + | ||
- | In cadrul alegerii liderului, algoritmul heartbeat va fi aplicat in felul urmator: | + | |
- | - nodurile vor trimite rankul lor catre vecini | + | |
- | - fiecare nod va calcula //liderul local// in functie de maximul dintre rankul propriu si informaia primita de la vecin | + | |
- | - vecinii vor trimite inapoi liderul lor local catre nodurile de la care au primit mesaj | + | |
- | - nodurile care au trimis mesajul initial isi vor actualiza valoarea liderului local | + | |
- | + | ||
- | Algoritmul se repeta de un numar suficient de ori ca sa se asigure convergenta informatiei. | + | |
- | + | ||
- | <note tip>Un exemplu de rulare a acestui algoritm poate fi observat aici {{:apd:laboratoare:heartbeat_choosing_leader.pdf|}}</note> | + | |
- | + | ||
- | ==== Construirea arborelui de acoperire ==== | + | |
- | + | ||
- | Dupa ce liderul a fost ales, acesta va **initia construirea arborelui de acoperire**. | + | |
- | + | ||
- | <note tip>Scopul arborelui de acoperire este ca fiecare nod sa stie, in orice moment de timp, cum sa ajunga catre lider.</note> | + | |
- | + | ||
- | Arborele de acoperire se reprezinta, cel mai usor, printr-un //vector de tati//. | + | |
- | Constuirea acestui arbore se realizeaza printr-un algoritm de tip **unda - ecou**. | + | |
- | + | ||
- | === Construirea arborelui de acoperire. Unda - ecou === | + | |
- | + | ||
- | Algoritmul unda are doua parti: | + | |
- | + | ||
- | - **Unda** -> toate nodurile, cu exceptia liderului asteapta sa primeasca un mesaj. Liderul initiaza unda. La primirea **primei sonde**, fiecare nod isi noteaza parintele si trimite un mesaj tuturor vecinilor, mai putin celui de la care a primit (părintele său) | + | |
- | - **Ecou** -> se asteapta primirea unui mesaj de la toti vecinii, //mai puțin de la părinte//. Informatiile primite de la vecini sunt agregate intr-un vector de tati si acesta este trimis către părinte. | + | |
- | + | ||
- | La final, liderul va detine vectorul de tati final, care reprezinta **arborele de acoperire**. Arborele de acoperire este apoi distribuit intregului sistem | + | |
- | + | ||
- | + | ||
- | ==== Verificarea topologiei ==== | + | |
- | + | ||
- | Dupa ce liderul a fost ales si topologia a fost distribuita catre toate nodurile, este util ca informatia sa fie validata. Validarea poate implica procese foarte complexe, insa pentru acest laborator vom folosi o validare bazata pe numarul de noduri prezente in cluster. | + | |
- | + | ||
- | Calcularea numarului de noduri se poate realiza folosind un algoritm de tipul **epidemic**. | + | |
- | + | ||
- | === Calcularea numarului de noduri. Epidemic === | + | |
- | + | ||
- | Functionalitatea unui algoritm de tipul **epidemic** se aseamana cu raspandirea unei boli in care exista un pacient 0: | + | |
- | - "pacientul 0" transmite informatia la vecinii sai | + | |
- | - vecinii pacientului 0 devin "infectati" si transmit si ei, mai departe, informatia, catre vecinii lor | + | |
- | + | ||
- | Pentru calcularea numarului de noduri, pacientul 0 va fi nodul lider. Acesta va detine o valoare de inceput, **1**. Toate celelalte noduri detin valoarea **0**. Nodul lider va realiza media aritmetica dintre valoarea sa si valoarea vecinilor sai. Informatia va fi sincronizata in ambele parti. Celalte noduri vor executa aceeasi operatie cu vecinii lor. | + | |
- | + | ||
- | Algoritmul se repeta pana cand se atinge convergenta solutiei. La final, toate nodurile vor detine o aceeasi valoare subunitara. Impartirea lui 1 la aceasta valoare va rezulta in numarul de noduri al clusterului. | + | |
- | + | ||
- | <note tip>Un exemplu de rulare a acestui algoritm poate fi observat aici {{:apd:laboratoare:epidemic_counting_nodes.pdf|}}</note> | + | |
- | + | ||
- | ==== Exerciții ==== | + | |
- | + | ||
- | Pornind de la [[https://github.com/APD-UPB/APD/tree/master/laboratoare/lab10|scheletul de laborator]], va trebui să realizați următoarele sarcini: | + | |
- | - Aflați nodul lider al clusterului folosind un algoritm //heartbeat// | + | |
- | - Realizați arborele de acoperire, plecând din lider, folosind un algoritm //undă-ecou// | + | |
- | - Asigurați-vă ca numărul de elemente din arborele de acoperire a fost stabilit bine prin calcularea numărului de noduri folosind un algoritm //epidemic// | + | |
- | - Folosind arborele de acoperire, trimiteți către lider configurația fiecărui nod și realizați în lider matricea de topologie a clusterului. Distribuiți topologia către toate nodurile | + |