Što je servisna mreža?

Pozdrav još jednom!.. Uoči početka tečaja "Softverski arhitekt" Pripremili smo još jedan koristan prijevod.

Što je servisna mreža?

Servisna mreža je konfigurabilni infrastrukturni sloj niske latencije koji je potreban za rukovanje velikim količinama mrežnih međuprocesnih komunikacija između sučelja za programiranje aplikacija (API-ja). Service Mesh omogućuje brzu, pouzdanu i sigurnu komunikaciju između kontejnerskih i često efemernih infrastrukturnih usluga aplikacija. Service Mesh pruža mogućnosti kao što su otkrivanje usluge, uravnoteženje opterećenja, enkripcija, transparentnost, sljedivost, autentifikacija i autorizacija te podrška za uzorak automatskog isključivanja (osigurač).
Servisna mreža obično se implementira pružanjem svake instance usluge s proxy instancom, tzv Prikolica. Prikolica rukovati komunikacijom između servisa, nadzirati i rješavati sigurnosne probleme, odnosno sve što se može apstrahirati iz pojedinačnih servisa. Na ovaj način programeri mogu pisati, održavati i posluživati ​​aplikacijski kod u uslugama, a administratori sustava mogu raditi s Service Meshom i pokretati aplikaciju.

Istio iz Googlea, IBM-a i Lyfta trenutno je najpoznatija servisna mesh arhitektura. A Kubernetes, koji je izvorno razvijen u Googleu, sada je jedini okvir za orkestraciju spremnika koji podržava Istio. Dobavljači pokušavaju stvoriti komercijalno podržane verzije Istia. Bit će zanimljivo vidjeti koje nove stvari mogu unijeti u projekt otvorenog koda.

Međutim, Istio nije jedina opcija jer se razvijaju i druge implementacije Service Mesh-a. Uzorak sidecar proxy je najpopularnija implementacija, kao što se može suditi po projektima Buoyant, HashiCorp, Solo.io i drugima. Postoje i alternativne arhitekture: Netflixov tehnološki alat jedan je od pristupa gdje se funkcionalnost Service Mesh implementira kroz biblioteke Ribbon, Hysterix, Eureka, Archaius, kao i platforme kao što je Azure Service Fabric.

Service Mesh također ima vlastitu terminologiju za komponente i funkcije usluge:

  • Okvir za orkestraciju spremnika. Kako se sve više i više spremnika dodaje aplikacijskoj infrastrukturi, javlja se potreba za posebnim alatom za nadzor i upravljanje spremnicima - okvir za orkestraciju spremnika. Kubernetes je čvrsto zauzeo ovu nišu, toliko da čak i njegovi glavni konkurenti Docker Swarm i Mesosphere DC/OS nude integraciju s Kubernetesom kao alternativu.
  • Usluge i instance (Kubernetes Pods). Instanca je jedna pokrenuta kopija mikroservisa. Ponekad je jedna instanca jedan spremnik. U Kubernetesu, instanca se sastoji od male grupe neovisnih spremnika koji se nazivaju pod. Klijenti rijetko pristupaju instanci ili podu izravno; češće pristupaju usluzi, koja je skup identičnih, skalabilnih instanci ili podova (replika) otpornih na greške.
  • Sidecar proxy. Sidecar Proxy radi s jednom instancom ili podom. Svrha Sidecar Proxyja je usmjeravanje ili proxy promet koji dolazi iz spremnika s kojim radi i vraćanje prometa. Sidecar je u interakciji s drugim Sidecar proxyjima i njime upravlja okvir za orkestraciju. Mnoge implementacije Service Mesh-a koriste Sidecar Proxy za presretanje i upravljanje svim prometom ui iz instance ili pod-a.
  • Otkrivanje usluge. Kada instanca treba komunicirati s drugom uslugom, mora pronaći (otkriti) zdravu i dostupnu instancu druge usluge. Tipično, instanca izvodi DNS pretraživanja. Okvir za orkestraciju spremnika održava popis instanci koje su spremne za primanje zahtjeva i pruža sučelje za DNS upite.
  • Balansiranje opterećenja. Većina okvira za orkestraciju spremnika osigurava balansiranje opterećenja na sloju 4 (transport). Service Mesh implementira složenije balansiranje opterećenja na sloju 7 (aplikacijska razina), bogato algoritmima i učinkovitije u upravljanju prometom. Postavke uravnoteženja opterećenja mogu se promijeniti pomoću API-ja, što vam omogućuje da orkestrirate plavo-zelene ili kanarinčke implementacije.
  • Šifriranje. Service Mesh može šifrirati i dešifrirati zahtjeve i odgovore, uklanjajući ovaj teret s usluga. Service Mesh također može poboljšati performanse davanjem prioriteta ili ponovnim korištenjem postojećih trajnih veza, smanjujući potrebu za skupim računanjem za stvaranje novih veza. Najčešća implementacija enkripcije prometa je međusobni TLS (mTLS), gdje infrastruktura javnih ključeva (PKI) generira i distribuira certifikate i ključeve za korištenje od strane Sidecar Proxyja.
  • Autentifikacija i autorizacija. Service Mesh može autorizirati i autentificirati zahtjeve postavljene izvana ili unutar aplikacije, šaljući samo provjerene zahtjeve instancama.
  • Podrška za uzorak automatskog isključivanja. Usluga Mesh podržava uzorak automatskog isključivanja, koji izolira nezdrave instance i zatim ih po potrebi postupno vraća u skup zdravih instanci.

Poziva se dio Service Mesh aplikacije koji upravlja mrežnim prometom između instanci podatkovna ravnina. Stvorite i implementirajte konfiguraciju koja kontrolira ponašanje podatkovna ravnina, izvodi se pomoću zasebnog Upravljačka ravnina. Upravljačka ravnina obično uključuje ili je dizajniran za povezivanje s API, CLI ili GUI za kontrolu aplikacije.

Što je servisna mreža?
Kontrolna ravnina u servisnoj mreži distribuira konfiguraciju između Sidecar proxyja i podatkovne ravnine.

Service Mesh arhitektura često se koristi za rješavanje složenih operativnih problema korištenjem spremnika i mikroservisa. Pioniri na terenu mikrousluge su tvrtke poput Lyfta, Netflixa i Twittera, koje pružaju stabilne usluge milijunima korisnika diljem svijeta. (Evo detaljnog pogleda na neke od arhitektonskih izazova s ​​kojima se Netflix suočio.). Za manje zahtjevne aplikacije vjerojatno će biti dovoljne jednostavnije arhitekture.

Malo je vjerojatno da će Service Mesh arhitektura ikada biti odgovor na sve probleme s radom i isporukom aplikacija. Arhitekti i programeri imaju ogroman arsenal alata, a samo jedan od njih je čekić, koji od mnogih zadataka mora riješiti samo jedan - zakucavanje čavala. Referentna arhitektura mikroservisa iz NGINX-a, na primjer, uključuje nekoliko različitih modela koji pružaju kontinuitet pristupa rješavanju problema korištenjem mikroservisa.

Elementi koji se okupljaju u Service Mesh arhitekturi, kao što su NGINX, kontejneri, Kubernetes i mikroservisi kao arhitektonski pristup, mogu biti jednako produktivni u ne-Service Mesh implementacijama. Na primjer, Istio je dizajniran kao cjelovita servisna mrežasta arhitektura, ali njegova modularnost znači da programeri mogu odabrati i implementirati samo tehnološke komponente koje su im potrebne. Imajući to na umu, važno je razviti jasno razumijevanje koncepta Service Mesh, čak i ako niste sigurni da ćete ga ikada moći u potpunosti implementirati u svoju aplikaciju.

Modularni monoliti i DDD

Izvor: www.habr.com

Dodajte komentar