În contextul microserviciilor, aplicațiile sunt structurate dintr-o multitudine de servicii de dimensiuni reduse, care trebuie să interacționeze pentru a funcționa ca un ansamblu coerent.
Comunicarea directă între microservicii, frecvent întâlnită, poate genera ineficiență și vulnerabilitate la erori. Aici intervine rețeaua de servicii, ca o soluție potențială.
Definirea conceptului de plasă de servicii
Termenul „plasă de servicii” se referă la o metodă de gestionare a schimbului de date între diversele microservicii componente ale unei aplicații. Esențial, aceasta implică utilizarea unui software dedicat care facilitează comunicarea între microservicii, acoperind aspecte precum:
- Identificarea aplicației
- Echilibrarea încărcăturii
- Autentificarea
- Criptarea
O rețea complexă de microservicii interconectate se formează prin intermediul unor conexiuni paralele, gestionate de proxy-uri dedicate. Această structură se integrează într-un sistem de management la nivel înalt al centrelor de date. Această abordare simplifică optimizarea comunicării, evitând timpii de nefuncționare în timpul evoluției aplicației. În practică, fiecare serviciu al aplicației depinde de alte servicii pentru a răspunde cerințelor utilizatorilor.
De exemplu, într-o aplicație de vânzări online, înainte de a efectua o achiziție, utilizatorul verifică disponibilitatea produsului dorit. Aceasta necesită comunicarea între serviciul care gestionează baza de date și pagina web a produsului. Ulterior, pagina web trebuie să interacționeze cu coșul de cumpărături virtual al utilizatorului.
În plus, comerciantul poate integra un serviciu de recomandări de produse, pentru a facilita orientarea utilizatorilor. Acest serviciu va comunica cu o bază de date de etichete de produs, precum și cu baza de date de inventar, care la rândul ei a interacționat anterior cu pagina produsului. Practic, este un set de produse reutilizabile.
Aplicațiile moderne sunt adesea structurate ca o rețea de servicii, fiecare având un rol specific în îndeplinirea unei funcții de afaceri.
Funcționarea și avantajele unei rețele de servicii
Este important de menționat că o rețea de servicii nu introduce noi funcționalități în mediul de lucru al unei aplicații. Aceasta se concretizează printr-un ansamblu de proxy-uri de rețea, un concept binecunoscut în domeniul IT al întreprinderilor.
Utilizați probabil proxy-uri de fiecare dată când accesați pagini web de pe un computer de serviciu. Proxy-urile, implementate la nivelul infrastructurii microserviciilor, facilitează direcționarea cererilor între ele. De aici și termenul „sidecar” pentru proxy-urile integrate într-o plasă de servicii, datorită faptului că acestea rulează alături de servicii, și nu în interiorul lor. Proxy-urile „sidecar” ale diferitelor servicii construiesc o rețea de tip mesh.
În absența unei rețele de servicii, dezvoltatorii trebuie să codifice fiecare microserviciu individual, ținând cont de strategia de comunicare între servicii. Deoarece logica de comunicare este ascunsă în fiecare componentă, atingerea obiectivelor companiei devine mai dificilă.
De asemenea, diagnosticarea problemelor de comunicare este mai anevoioasă. O rețea de servicii facilitează găsirea de soluții la aceste dificultăți legate de gestionarea comunicării între servicii.
Cu ajutorul unei rețele de servicii, comunicarea poate fi automatizată, datele și informațiile necesare fiind accesibile cu ușurință în infrastructura externă a rețelei. Acest lucru simplifică identificarea și rezolvarea problemelor și defecțiunilor. În plus, permite departamentelor IT ale companiei să se concentreze pe sarcini cu valoare adăugată mai mare.
Datorită abstractizării comunicațiilor, serviciile eșuate pot fi automat ocolite, fără a afecta schimbul de date al componentelor funcționale ale aplicației. Datele sistemului de rețea de servicii sunt accesibile pentru analiză, ceea ce permite optimizarea operațională și creșterea performanței aplicației.
Acum că am descris funcționarea rețelei de servicii, să analizăm câțiva dintre cei mai performanți manageri de rețea de servicii:
Meshery
Meshery este un manager de rețea de servicii care permite rularea diverselor soluții de plasă de servicii. Este compatibil cu Kubernetes și Docker. Meshery oferă o interfață de utilizare și o interfață CLI pentru a evalua și compara performanța soluțiilor majore de tip mesh, inclusiv Linkerd și Istio. Implementarea Meshery se poate face direct pe cluster sau local.
Amazon App Mesh
AWS App Mesh este un serviciu de plasă de rețea dedicat platformei Amazon Kubernetes (EKS). Acesta permite managementul la nivel de aplicație prin intermediul proxy-urilor sidecar Envoy, atât pentru traficul de intrare, cât și pentru cel de ieșire. Utilizează întreruperea circuitului și oferă metrici de observabilitate prin intermediul AWS X-Ray. AWS App Mesh poate fi utilizat alături de alte servicii, precum Amazon EC2 și AWS Fargate.
Linkerd
Linkerd este un manager de rețea open-source care utilizează un proxy personalizat bazat pe Rust pentru a gestiona microserviciile. Acesta include Grafana preinstalat pentru vizualizarea metricilor de observabilitate. Spre deosebire de alți manageri de tip mesh open-source, Linkerd oferă o interfață grafică și acceptă nu doar Prometheus, ci și controllere de intrare, precum Traefik, Kong și Gloo. Linkerd permite actualizări automate de implementare în clustere.
Istio
Istio este o rețea de servicii open-source care utilizează proxy-uri Envoy pentru a gestiona microserviciile. Istio oferă multiple funcționalități, printre care echilibrarea încărcăturii, crearea de politici, rutarea traficului, timeout-uri, întreruperea circuitului, comutarea traficului și reîncercări. De asemenea, Istio oferă funcționalități de urmărire distribuită între containere sau mașini, fără a necesita instalarea de software suplimentar.
Kuma
Kuma este o rețea de servicii dezvoltată de Kong, folosită pentru a extinde funcționalitatea serviciilor existente prin proxy-uri Envoy. Kuma este compatibilă cu diverse microservicii și oferă securitate și monitorizare îmbunătățite pentru rețele. Acesta include o serie de politici predefinite pentru rutare, mTLS, controlul traficului și diverse funcții de securitate. Cu Kuma, se pot controla cu ușurință diferite rețele izolate, printr-un singur plan de control și date.
Nginx Mesh
Nginx este o plasă de servicii pentru Kubernetes, care criptează traficul dintre containere, utilizând planul de date furnizat de Nginx Plus. Nginx folosește limitarea ratei și întrerupătoare de circuit pentru a gestiona traficul dintre servicii și include un tablou de bord Grafana pentru monitorizarea metricilor rețelei de servicii.
Consul
Consul de la HashiCorp este o plasă de servicii care oferă un strat proxy încorporat, dar este compatibilă și cu proxy-ul sidecar Envoy. Oferă rutare bazată pe căi, comutare de trafic și echilibrare a încărcăturii. Consul este integrat cu HashiCorp Vault și acceptă mTLS. Poate fi integrat cu Prometheus și Grafana pentru vizualizarea metricilor de observabilitate.
Gloo Mesh
Gloo Mesh este o rețea de servicii construită pe baza Istio și utilizează proxy-uri Envoy, permițând implementarea unui model de securitate Zero Trust. Gloo este compatibilă cu Kubernetes, VM-uri și alte microservicii multi-tenancy. De asemenea, este compatibilă cu CI/CD și GitOps, facilitând procesul de implementare.
Considerații finale
Rețelele de servicii rezolvă problemele de comunicare dintre diversele microservicii și oferă numeroase avantaje în materie de securitate. Cu toate acestea, având în vedere multitudinea de soluții de tip mesh disponibile pe piață, este esențială alegerea unei soluții care să se potrivească cel mai bine cerințelor și care să fie ușor de gestionat.