In comunicatia cu serviciile externe, un serviciu se comporta ca un client pentru serviciul extern
Trebuie sa avem un modul client care interactioneaza cu serviciul extern (este interfata prin care se trimit cererile serviciului extern) si se primesc raspunsurile
Putem folosi cate un modul client separat pentru fiecare serviciu extern sau, in functie de caz, acelasi modul poate interactiona cu mai multe servicii externe
Comunicatia cu alte instante ale aceluiasi serviciu
Cand o instanta X a unui serviciu S doreste sa comunice cu o instanta Y a aceluiasi serviciu:
Cel mai simplu model: X se comporta ca un client (special) al lui Y
X poate efectua aceleasi tipuri de cereri ca un client normal, plus, eventual, alte tipuri de cereri speciale
X are un modul client prin care comunica cu Y (sau cu orice alta instanta a serviciului S)
Y primeste cererile de la X prin intermedul aceluiasi Connector prin care primeste si cererile de la clienti obisnuiti sau poate utiliza un Connector dedicat pentru primirea de cereri de la alte instante ale serviciului S
Cand o instanta X doreste sa comunice cu mai multe instante Y ale aceluiasi serviciu (si sa le transmita aceleasi date):
Cel mai simplu model: X comunica cu fiecare instanta independent
Instantele serviciului se organizeaza (prin decizii locale, distribuite sau prin coordonare centralizata sau hibrida) intr-o topologie peer-to-peer cu structura de arbore
Cand o instanta primeste un mesaj de la un vecin, ea trimite mesajul mai departe tuturor celorlalti vecini ai sai
Arborele trebuie actualizat cand:
Este pornita o instanta noua
Este oprita o instanta veche
Periodic (eventual) – pentru a optimiza anumiti parametrii de performanta
O instanta poate comunica periodic cu vecinii ei (sau on-demand), pentru a face schimb de informatii necesare pentru mentinerea arborelui (sau pentru actualizarea arborelui)
Topologii peer-to-peer cu diverse proprietati
Instantele serviciului se organizeaza (prin decizii locale, distribuite sau prin coordonare centralizata sau hibrida) intr-o topologie peer-to-peer cu anumite proprietati (nu neaparat arborescenta)
Fiecare instanta are o multime de vecini in cadrul topologiei
Cand o instanta primeste un mesaj de la un vecin, ea trimite mesajul mai departe tuturor celorlalti vecini ai sai
Astfel, spre deosebire de cazul topologiei arborescente, o instanta poate primi acelasi mesaj de mai multe ori => trebuie implementate mecanisme pentru a identifica mesajele duplicate
Topologia trebuie actualizata cand:
Este pornita o instanta noua
Este oprita o instanta veche
Periodic (eventual) – pentru a optimiza anumiti parametrii de performanta
O instanta poate comunica periodic cu vecinii ei (sau on-demand), pentru a face schimb de informatii necesare pentru mentinerea topologiei (sau pentru actualizarea topologiei)
Scalabilitatea interconectarii instantelor
Daca un serviciu are multe instante pornite si/sau daca instantele sunt pornite/oprite des, nu este fezabil (scalabil) ca fiecare instanta sa cunoasca fiecare alta instanta (pentru a putea comunica cu ea direct)
In aceste cazuri, instantele se organizeaza intr-o topologie de tip peer-to-peer (service overlay network) ce este utilizata chiar si in vederea comunicatiei de tip punct-la-punct
Topologia trebuie sa ofere posibilitati ca o instanta sa comunice cu o alta instanta nu doar pe baza unei adrese/identificator, ci pe baza de scop
de ex., un serviciu de stocare de date stocheaza datele distribuit, in functie de anumite criterii ; cand un client cere datele unei instante, aceasta trebuie sa redirecteze clientul catre instanta ce detine datele dorite de client (redirectarea e facilitata de topologie)
Moduri de a procesa cereri care necesita interactiune cu alte instante / servicii
Cand un client trimite o cerere catre o instanta X, iar cererea necesita comunicatia cu servicii externe / alte instante ale serviciului:
X efectueaza aceasta comunicatie cu serviciile externe / celelalte instante ale serviciului ca etape din cadrul procesarii cererii SAU
X ii spune clientului cu ce servicii externe / alte instante sa comunice ca parte a raspunsului la cerere (astfel, cererea nu este procesata complet din punctul de vedere al clientului, deoarece acesta trebuie sa transmita alte sub-cereri ulterioare)
Starea interna a unui serviciu cu mai multe instante
Fiecare instanta a unui serviciu detine date generate in urma interactiunilor cu clientii sai, cu alte instante ale serviciului si cu servicii externe
O parte din aceste date sunt valide doar pe durata de viata a instantei (de ex., referinte la obiecte create de instanta, informatii despre vecinii instantei, etc.)
Alte date sunt, insa, importante si este de dorit sa supravietuiasca si in cazul opririi (defectarii) instantei
Solutii:
Stocarea acestor date intr-un serviciu de stocare extern (pasarea responsabilitatii catre un alt serviciu) si utilizarea unor identificatori creati dupa reguli standard pentru accesul acestor date (sau replicarea identificatorilor la alte instante)
Replicarea acestor date pe alte instante ale serviciului
Hibride (o combinatie a celor doua variante de mai sus)
Service Discovery (1/2)
Daca un client doreste sa acceseze una din instantele unui serviciu, cum afla despre aceasta ?
Mecanism de service discovery (prin care un client selecteaza o instanta cu care sa interactioneze)
de ex., instanta cea mai apropiata (dpdv al latentei)
Service Discovery static
Fiecare client descarca un fisier cu informatii despre instante de undeva (nu se pot adauga instante noi) SAU
Fiecare client are un fisier de configurare cu informatii despre instantele la care se poate conecta (acelasi dezavantaj)
Service Discovery (2/2)
Service Discovery dinamic
Clientul acceseaza un serviciu de lookup separat, de la care obtine o lista a instantelor la care se poate conecta
Serviciul de lookup ii poate intoarce o lista cu un numar mic de instante, cele considerate cele mai potrivite – de ex., se poate efectua load balancing
Din lista intoarsa, clientul poate selecta o instanta conform unor criterii de performanta (de ex., latenta)
Alternativ (dar ne-uzual), un client poate interactiona cu mai multe instante ale serviciului (pentru cereri diferite)