Sunteți pe pagina 1din 13

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatica i Tehnologii Informaionale

Raport
Disciplina: Programarea Aplicaiilor distribuite

Laboratorul nr. 2

Tema: Colecii distribuite de date

A efectuat: studentul grupei TI-111 Voloceai Petru

A verificat: lector superior Dumitru Ciorb

Chiinu 2014
Cuprins
Scopul lucrrii....................................................................................................................................................3
Obiectivul lucrrii...............................................................................................................................................3
1 Sisteme distribuite...........................................................................................................................................3
1.1 Introducere..........................................................................................................................................3
1.2 Caracteristici.......................................................................................................................................4
1.3 Arhitecturi...........................................................................................................................................5
1.4 Protocoalele de comunicare TCP i UDP...........................................................................................5
2 Realizarea lucrrii............................................................................................................................................7
2.1 Descrierea sistemului..........................................................................................................................7
2.2 Proiectarea sistemului.........................................................................................................................8
2.3 Implementarea sistemului...................................................................................................................9
2.5 Exemplu............................................................................................................................................11
Concluzie..........................................................................................................................................................12
BIBLIOGRAFIE..............................................................................................................................................13

3
Scopul lucrrii
- Studiul protocoalelor de transport TCP/IP n contextul undei aplicaii coninnd colecii distribuite de
date.

Obiectivul lucrrii
- Utilizarea protocolului UDP n transmisiuni de tip unicast i multicast;
- Utilizarea protocolului TCP n transmisiuni de date;
- Procesarea coleciilior de date.

1 Sisteme distribuite

1.1 Introducere

Prin sistem distribuit de calcul sau sistem informatic distribuit se nelege o mulime de programe peste o
reea de noduri (calculatoare, multiprocesoare, procesoare paralele masive, staii de lucru, clustere, grid ..)
care au acces fiecare la o memorie proprie (dar pot avea acces si la anumite memorii comune partajate),
fiind conectate ntre ele prin niste linii de comunicaie (fir, fibr optic, unde radio, satelii), avand diverse
topologii de conexiune (magistral comun, stea, ...), sistemul fiind conceput cu scopul partajrii unor
resurse sau/si pentru rezolvarea concurent a unor aplicaii paralele sau paralelizabile.
Motivaia pentru construirea si utilizarea sistemelor capabile de calcul paralel vine din nevoia de a reduce
timpul de calcul prin diviziunea unei probleme mari n sub-probleme ce se pot rezolva simultan pe structuri
de calcul adecvate, iar sistemele informatice distribuite rspund cerinelor de simultaneitate a calcului
paralel si au n plus faciliti de a putea partaja unele resurse scumpe: hardware (imprimante, discuri,
scanere, faxuri) si software (pagini web, baze de date, fisiere).
Din punct de vedere al investiiei n echipamente, costurile se pot reduce considerabil, dac se utilizeaz
un sistem distribuit care partajeaz unele resurse hardware scumpe (imprimante, servere cu baze de date,
plci pentru achiziie de date, discuri, scanere, faxuri etc.), dar si a unor produse software cu licene scumpe
(medii de programare, limbaje de programare, programe utilitare, programe pentru achiziii de date etc.).
Acest lucru se face de obicei n organizaii (instituii, ntreprinderi) prin organizarea sistemului de calcul
ntr-o reea Intranet n care este reglementat accesul distribuit la resurse.
Utilizatorii propriu-zisi a sistemelor distribuite de tip Internet sau intranet sunt n multe cazuri mai puin
preocupai de costurile resurselor folosite, fiind interesai mai mult de funcionalitatea modalitii de
partajare a resurselor de care trebuie s se foloseasc n aplicaiile lor.
Partajarea resurselor se face ncepand de la indivizi foarte apropiai (de exemplu, membri unei familii sau
colegi de serviciu care folosesc aceeasi imprimant sau coopereaz n mod direct prin partajarea unor fisiere

4
comune dintr-un intranet local) si pan la indivizi care nu se cunosc ntre ei si nici nu intr vreodat n
contact (de exemplu, utilizatorii unor motoare de cutare pe Internet).
In cadrul partajrii resurselor ntr-un sistem distribuit denumirea de serviciu este considerat ca o parte
distinct a unui sistem care face managementul unei colecii de resurse asemntoare si face public
funcionalitatea lor utilizatorilor si aplicaiilor care apeleaz la ele. Dac, de exemplu invocm un fisier
partajat cu ajutorul unui serviciu pentru fisiere, accesul se face de fapt printr-o serie de operaii: read, write,
delete.
Termenul de server se refer la un program care ruleaz (proces) pe un computer dintr-o reea si care
accept cereri de la computere din reea, iar cei care trimit cereri poart numele de clieni, funcionalitatea
fiind asigurat prin protocolul client/ server.
Intr-un sistem distribuit care este modelat prin folosirea programrii orientate obiect, resursele pot fi
ncapsulate ca obiecte si pot fi accesate de asa numiii client object prin cererea unei metode de la server
object.

1.2 Caracteristici

Un sistem distribuit este menit s conecteze n mod facil resursele de calcul de utilizatorii acestora. De
asemenea, trebuie s menin transparent pentru utilizator faptul c aceste resurse sunt distribuite fizic ntr-o
reea. Trebuie s fie un sistem deschis, care s accepte extinderi ulterioare i s fie poat fi cu uurin
redimensionat.

In ceea ce privete transparena, acest concept se poate aplica mai multor aspecte ale sistemelor distribuite:
- accesul transparen n ceea ce privete diferena dintre modul de reprezentare i organizare a
datelor, precum i maniera n care acestea, ca i resurse, sunt accesate;
- localizarea transparen n ceea ce privete distribuia fizic a componentelor sistemului;
- migrarea transparena faptului c o resurs poate fi mutat fizic dintr-un loc ntr- altul;
- re-localizarea transparena mutrii unei resurse dintr-un loc ntr-altul, n timp ce resursa este
utilizat n sistem;
- replicarea transparena procesului de replicare a unei resurse n cadrul sistemului;
- concurena transparen n ceea ce privete situaia n care o resurs este utilizat
(partajat) n mod concurenial de mai muli utilizatori;
- indisponibilitatea unei resurse este transparent faptul c o anumit resurs din
sistem nu mai poat fi accesat i c se urmeaz o procedur de recuperare a
datelor;
- persistena transparen n ceea ce privete stocarea unei resurse n memorie sau pe disc.

5
In ceea ce privete posibilitile de redimensionare a unui sistem distribuit, existena a diferite forme de
centralizare n sistem poate ridica probleme extrem de complexe cand se pune problema redimensionrii
acestuia. Centralizarea se poate manifesta la nivel de:
- servicii un singur server pentru mai muli utilizatori;
- date o unic baz de date n sistem;
- algoritmi realizarea de rutri pe baza unei informaii complete despre sistem.
Fiecare dintre aceste situaii i poate pune amprenta ntr-o mai mic sau mai mare msur asupra uurinei
cu care un sistem distribuit poate fi ajustat n dimensiuni, ns dintre toate, cele mai complicate i n
consecin, cele mai dificil de surmontat sunt situaiile n care se proiecteaz sistemul utilizandu-se algoritmi
centralizai. De aceea apare ca o necesitatea, nc din faza de proiectare, utilizarea de algoritmi
descentralizai pentru realizarea funciilor sistemului. Aceti algoritmi au urmtoarele caracteristici, care i
disting de algoritmii centralizai:
- nici un computer din sistem nu deine o informaie complet relativ la starea sistemului;
- fiecare main din sistem ia decizii bazandu-se numai pe informaia local pe care o deine;
- cderea unei maini din sistem nu conduce la eecul algoritmului;
- nu se face nici o asumare implicit relativ la faptul c ar exista un timp global i n
consecin, unic pentru ntreg sistemul.

1.3 Arhitecturi

Organizarea i structurarea unui sistem distribuit poate fi realizat utiliznd urmtoarele modele de
arhitecturi:
- Sistem centralizat;
- Sistem descentralizat;
- Sistem mixt.
Arhitectura unui sistem centralizat se bazeaz pe modelul client/server, unde n linii generale sistemul
poate fi vzut ca dou entiti generale i anume serverul care ofer un serviciu i clienii care utilizeaz
acest serviciu. Altfel spus un astfel de sistem are ca sarcin oferirea unui serviciu dintr-o surs central.
Arhitectura unui sistem descentralizat se bazeaz pe modelul punct-la-punct, unde n linii generale
sistemul poate fi vzut ca o multime de noduri care pot primi i/sau trimite date, contribuind cu putere de
procesare i memorie n sistem. Odat ce un astfel de sistem crete n mrime (mai multe noduri), crete i
capacitatea acestuia de procesare a resurselor.
Arhitectura unui sistem mixt reprezint o combinaie dintre arhitectura centralizat i descentralicat care
este folosit pentru a obine performane sau n dependen de cerinele sistemului.

1.4 Protocoalele de comunicare TCP i UDP

6
TCP este un protocol folosit de obicei de aplicaii care au nevoie de confirmare de primire a datelor.
Efectueaz o conectare virtual full duplex ntre dou puncte terminale, fiecare punct fiind definit de ctre o
adres IP i de ctre un port TCP.
Transmission Control Protocol (TCP) este unul dintre protocoalele de baz ale suitei de protocoale Internet.
TCP este unul dintre cele dou componente originale ale suitei (celalalt fiind Protocolul Internet, sau IP),
astfel ncat ntreaga suita este frecvent menionat ca stiva TCP/IP. In special, TCP ofer ncredere, asigura
livrarea ordonata a unui flux de octei de la un program de pe un computer la alt program de pe un alt
computer aflat n reea. Pe lang sarcinile sale de gestionare a traficului, TCP controleaz mrimea
segmentului de date, debitul de informaie, rata la care se face schimbul de date, precum i evitarea
congestionrii traficului de reea. Printre aplicaiile cele mai uzuale ce utilizeaz TCP putem enumera World
Wide Web (WWW), posta electronica (e-mail) i transferul de fiiere (FTP).

UDP (User Datagram Protocol) reprezint un protocol fr conexiuni, ceea ce semnific faptul c acesta
nu garanteaz transmiterea pachetelor precum o face protocolul TCP, i chiar dac pare banal faptul c e ru
s pierdem pachetele atunci cnd transmitem, UDP se dovedete a fi mult mai eficient dect TCP n reele
apropiate, deoarece pachetele au puine anse a fi pierdute, i spre deosebire de TCP nu trebuie s fie ateptat
un rspuns de confirmare. Deasemenea UDP se dovedete a fi mai eficient n transmiterea datelor unde se
accept pierderea a ctorva pachete din totalul trimis, ca exemplu schimbul de sunet, video.[1]
Protocolul a fost implementat de David P. Reed n anul 1980 devenind unul din protocoalle principale de
transmitere a datelor prin Internet.
Odat ce transmiterea unui pachet n internet se face prin direcionarea acestuia de ctre router i alte
dispozitive de reea n dependen de IP-ul destinatarului, este evident c multicastingul necesit modificri
asupra IP-ului.
In primul rnd operaia de multicasting nsemn transmiterea datelor unui grup anumit de persoane dintr-o
reea i poate fi realizat doar prin intermediul protocolului UDP, deoarece TCP ar trebui s menin
conexiunile pn va primi o confirmare sau n caz i mai ru retrimiterea datelor ceea ce nu este deloc
eficient.[1]
Pentru a specifica un IP de grup sunt folosite IP-uri din categoria D i anume 224.0.0.0 pin la
239.25.255.255.

7
2 Realizarea lucrrii

2.1 Descrierea sistemului

Proiectul realizat reprezint un sistem distribuit care ofer colecii de date clienilor care apar n acest
sistem. In linii generale sistemul poate fi reprezentat precum n figura 1, unde DIS reprezint Sistemul
Informaional Distribuit, iar Client un client care dorete s preia nite date din sistem.

Figura 1 Structura general a sistemului


DIS reprezint o mulime de noduri care conin n sine informaii despre angajai. Fiecare nod reprezint
o unitate cu informaii despre angajaii din unitatea respectiv.
Structura datelor despre angajai are urmtoarea form:
Employee {
firstName,
lastName,
department,
salary
}

O privire mai detaliat asupra sistemului cu nodurile coninute poate fi vzut n figura 2, unde se vede
numrul de noduri coninute n DIS.
In DIS se observ 6 noduri care au o anumit legtur logic ntre ele, putnd face o conexiune TCP prin
intermediul acesteia pentru a prelua datele necesare de la nodurile vecine cunoscute.

8
Figura 2 Reprezentarea logic a nodurilor n DIS

Sistemul are ca scop s ofere posibilitatea clientului s afle care este nodul cu cele mai multe legturi.
Acest lucru se realizeaza prin transmiterea unui mesaj Multicast de ctre Client la care Nodurile din DIS
rspund cu un mesaj Unicast napoi n care transmit informaia despre locaia sa i deasemenea numrul de
conexiuni cu vecinii pe care le are i salariul mediu in sine.
Primind aceast informaie, clientul poate afla Salariul Mediu pe ntreg sistemul iar apoi printr-o
conexiune TCP face legtura cu nodul care are cele mai multe legturi n sistem. Acesta la rndul su face
legtura cu vecinii si i preia datele despre lucrtorii acestora, le anexeaz la datele sale i transmite
totalitatea acestora clientului.
Clientul primind datele, le sorteaz conform cerinelor i le afieaz.

2.2 Proiectarea sistemului

Pentru elaborarea acestei lucrri am folosit proiectul pregtit de D-nul Dumitru Ciorb foarte bine
proiectat. Odat ce nou ni-a rmas s facem puine modificri, am extins diagrama claselor pentru a oferi
structura ntregului sistem, care poate fi vzut n figura 3.

Astfel din diagram se observ c au fost adugate dou noi entiti i anume o clas NodeInfo care
conine informaia despre salariul mediu pe nod i numrul de conexiuni pe care acesta le are cu vecinii si.
Aceast informaie este transmis prin Location in timpul rspunsului unicasct fcut de nodurile din DIS.

A doua entitate este o enumerare i anume TransportListenerType, care distinge dou valori i anume:
CLIENT_LISTENER i SERVER_LISTENER. Aceast entitate este mai trziu folosit de ctre nodurile
server, care vor lansa dou TCP TransportListen-uri, unul care va atepta cererea de la client, iar altul care va
atepta cererea de la nodurile din DIS.
9
Figura 3 Diagrama claselor a sistemului de distribuire a datelor

2.3 Implementarea sistemului

Pentru nceput am stabilit care nod din DIS pe ce port va rula, iar dup aceasta am scris direct n cod
aceast informaie i deasemenea prin cod am ataat nite date despre lucrtori fiecrui nod n dependen de
portul care vine prin parametrii de intrare n aplicaie.
Dup ce au fost stabilite aceste date, urmtorul pas a fost de a include n mesasjul unicast informaia
despre numrul de noduri pe care le cunoate nodul n cauz i care este salariul mediu pe acest nod.
Aceast informaie cum se poate vedea din figura 3 se conine n entitatea NodeInfo, iar urmtoarele linii
de cod arat cum aceasta este transmis clientului.
10
In primul rnd un nod server initializeaz un DiscoveryListener cu informaia despre adresa sa
(dataServerAddress) i informaia adiional (nodeInfo). In urma rulrii acestui fir de execuie, apelnd
metoda run(), se observ c se apeleaz metoda sendDataServerLocation, creia i se transmite o locaie care
conine toat informaia despre nodul care ascult i locaia despre client, care va veni din metoda
receiveClientRequest care asteapt pn unclient nu se va conecta la sistem.
@Override
public void run() {
sendDataServerLocation(
receiveClientRequest(),
new Location(dataServerAddress, nodeInfo));
}

Deasemenea am fcut o modificare major n faptul cum lucreaz TCP TransportListener adugnd
structura TransportListenerType.
Astfel fiecare nod n sistem iniializeaz cte dou TransportListenere, unul pentru a asculta cnd un client
se va conecta, iar cellalt pentru a asculta cnd se va conecta un nod vecin din sistem pentru a face o cerere
de date.
Astfel n metoda getEmployees din TransportListener, n cazul n care acesta este de tip
CLIENT_LISTENER, i anume ascult un client, la cererea acestuia, nodul se va conecta la toate nodurile
vecine pentru a cere datele acestora i a le aduga la datele sale. In caz contrariu, dac conexiunea respectiv
este SERVER_LISTENER, i anume ascult un nod server vecin, acesta returneaz doar datele sale, pentru
ca nodul client s i adauge aceste date la colecia sa i apoi s le returneze clientului care a fcut o cerere
de date.
private ArrayList<Employee> getEmployees() {

if (this.listenerType == TransportListenerType.CLIENT_LISTENER) {
for(Integer knownPort : knownPorts) {
try {
Location location = new Location(new InetSocketAddress("127.0.0.1",
knownPort));
System.out.println("[INFO--\n" + "[INFO] Taking info from: " + location);

this.employeesList.addAll(new
TransportClient().getEmployeesFrom(location));

} catch (IOException e) {
e.printStackTrace();
}
}
}

return this.employeesList;
}

2.5 Exemplu

Lansnd toate nodurile din DIS i clientul obinem urmtoarele rezultate. De menionat c nodul care
ruleaz pe portul 4446 are cele mai multe conexiuni i anume 3, cu nodurile 4445, 4448, 4447.

11
Rezultatele de pe aplicaia client:
[INFO] -----------------------------------------
[INFO] Client is running...
[INFO] -----------------------------------------
[INFO] Discovering... information nodes.
[INFO] Receiving reply from: (65368, 127.0.0.1)
[INFO] Receiving reply from: (65369, 127.0.0.1)
[INFO] Receiving reply from: (65370, 127.0.0.1)
[INFO] Receiving reply from: (57664, 127.0.0.1)
[INFO] Receiving reply from: (57665, 127.0.0.1)
[INFO] Receiving reply from: (57666, 127.0.0.1)
[WARNING] -----------------------------------------
[WARNING] Waiting time expired...
[INFO] -----------------------------------------
[INFO] Discovered server: Location{ip address=127.0.0.1, port=5446,
nodeInfo=NodeInfo{numberOfKnownConnections=3, totalAveragePerNode=786.5}}
[Result] -----------------------------------------
Discovered employees [TA:768.1666666666666]: {Basme=[
Employee{firstName='Fat6', lastName='Frumos', department='Basme', salary=922.0},
Employee{firstName='Fat5', lastName='Frumos', department='Basme', salary=802.0},
Employee{firstName='Fat7', lastName='Frumos', department='Basme', salary=902.0},
Employee{firstName='Fat8', lastName='Frumos', department='Basme', salary=980.0}]}

Rezultatele de pe nodul ce ruleaz pe portul 4446 cu cele mai multe conexiuni:

[INFO] -----------------------------------------
[INFO] Server is running... on 5446
[INFO] -----------------------------------------
[INFO] Received location request...
[INFO] -----------------------------------------
[INFO] Taking info from: Location{ip address=127.0.0.1, port=4445,
nodeInfo=NodeInfo{numberOfKnownConnections=-1, totalAveragePerNode=-1.0}}
[INFO] -----------------------------------------
[INFO] Taking info from: Location{ip address=127.0.0.1, port=4447,
nodeInfo=NodeInfo{numberOfKnownConnections=-1, totalAveragePerNode=-1.0}}
[INFO] -----------------------------------------
[INFO] Taking info from: Location{ip address=127.0.0.1, port=4448,
nodeInfo=NodeInfo{numberOfKnownConnections=-1, totalAveragePerNode=-1.0}}
[WARNING] -----------------------------------------
[WARNING] Waiting time expired... Socket is closed.

Concluzie
Realizarea lucrrii de laborator a deschis o nou viziune, mai detaliat, asupra sistemelor distribuite,
arhitecturii unui sistem i a comunicrii ntre acestea.

12
Am fcut cunotin cu o arhitectur foarte bine definit a unui sistem, care a fost predispus ca baz pentru
acest laborator.
Dezvoltnd platforma de baz (sistemul initial) pentru a satisface cerinele lucrrii de laborator am ncercat
s meninem arhitectura sistemului adugind doar cele necesare ntr-un mod ct mai efectiv dup prerea
mea a noilor entiti n sistem. Evident mereu este loc de mai bine i drept exemplu este faptul c nodurile
din DIS n timpul iniializrii unui TCP TransportListener la moment transmit datele despre lucrtori i
nodurile cunoscute la iniializarea acestei structuri, ceea ce nseamn c dac aceste date vor fi modificate
pn se va conecta un client, acesta nu va primi modificrile. Am realizat aceast implementare simpl
deoarece la moment sistemul nostru nu predispune modificri n datele nodurilor. Ins aceast situaie poate
fi soluionat folosind ablonul de proiectare Delegate, realiznd o interfa cu metodele getEmployees i
getKnownPorts pe care ar implementa-o nodurile server i ar fi trimise ca delegaii n TransportListener, iar
acesta n momentul conexiunii unui client, ar apela metodele acestei delegaii pentru a primi datele curente
care sunt up to date.
Pentru prima dat deasemenea am folosit ntr-un proiect ct de ct serios limbajul Java, care mi s-a prut un
limbaj destul de uor i aproape de familia C++. Acesta are o multime de structuri, framework-uri care
uureaz enorm viaa unui programator. Aproape orice structur necesar este realizat.
Deasemenea lucrul cu structurile de date s-a dovedit a fi foarte uor n Java folosind stream-urile pentru a
filtra i sorta datele n mod necesar.
In comparaie cu Objective-C, Swift observ n Java o arie mai larg de folosire att n aplicaiile client ct i
n aplicaiile sever, pe cnd limbajele i tehnologiile oferite de Apple sunt mai des folosite pentru realizarea
clienilor. Cel puin n experiena mea nu am avut de a face cu vrio aplicaie de tip server pe sistemele oferite
de compania Apple.
Am fcut cunotin cu tipurile generale de arhitectur a unui sistem distribuit i anume Centralizat,
Descentralizat i Mixt, sistemul nostru fiind unul cu o arhitectur Descentralizat din cauza inexistenei unui
nod central care ar conine toat informaia. In sistemul nostru datele sunt separate pe mai multe noduri, iar
clientul pentru a le prelua, este nevoit s realizeze o conexiune punct-la-punct cu nodul n cauz.
Protocoalele TCP, UDP i-au artat nc odat utilitatea i importana fiind foarte utile pentru colectarea
informaiilor att despre mai multe noduri ct i a conexiunilor punt-la-punct pentru transmiterea datelor de
dimensiuni mai mari cu o siguran i ncredere mai mare.

BIBLIOGRAFIE
1. Distributed systems: principles and paradigms, Pearson Prentice Hall, 2007, Tanenbaum
2. Distributed systems, consepts and design, 2006, George Coulouris
3. Concepte generale privind sisteme distribuite, Claudiu Vine

13