Co to jest siatka usług?

Witam ponownie!.. W przeddzień rozpoczęcia kursu "Architekt oprogramowania" Przygotowaliśmy kolejne przydatne tłumaczenie.

Co to jest siatka usług?

Siatka usług to konfigurowalna warstwa infrastruktury o niskim opóźnieniu, potrzebna do obsługi dużych ilości sieciowej komunikacji między procesami między interfejsami programowania aplikacji (API). Service Mesh umożliwia szybką, niezawodną i bezpieczną komunikację pomiędzy skonteneryzowanymi i często efemerycznymi usługami infrastruktury aplikacji. Service Mesh zapewnia takie możliwości, jak wykrywanie usług, równoważenie obciążenia, szyfrowanie, przejrzystość, identyfikowalność, uwierzytelnianie i autoryzacja oraz obsługa wzorców automatycznego zamykania (wyłącznik obwodu).
Siatkę usług zazwyczaj implementuje się poprzez zapewnienie każdej instancji usługi instancji proxy, zwanej Wózek boczny. Wózek boczny obsługiwać komunikację pomiędzy usługami, monitorować i rozwiązywać problemy bezpieczeństwa, czyli wszystko, co da się wyabstrahować z poszczególnych usług. W ten sposób programiści mogą pisać, utrzymywać i udostępniać kod aplikacji w usługach, a administratorzy systemu mogą pracować z Service Mesh i uruchamiać aplikację.

Istio od Google, IBM i Lyft to obecnie najsłynniejsza architektura Service Mesh. Kubernetes, pierwotnie opracowany w Google, jest obecnie jedyną platformą orkiestracji kontenerów obsługiwaną przez Istio. Dostawcy próbują stworzyć komercyjnie obsługiwane wersje Istio. Ciekawie będzie zobaczyć, co nowego mogą wnieść do projektu open source.

Jednak Istio nie jest jedyną opcją, ponieważ opracowywane są inne wdrożenia Service Mesh. Wzór sidecar proxy jest najpopularniejszą implementacją, co można ocenić po projektach Buoyant, HashiCorp, Solo.io i innych. Istnieją również architektury alternatywne: zestaw narzędzi technologii Netflix jest jednym z podejść, w którym funkcjonalność Service Mesh jest wdrażana poprzez biblioteki Ribbon, Hysterix, Eureka, Archaius, a także platformy takie jak Azure Service Fabric.

Service Mesh ma również własną terminologię dotyczącą komponentów i funkcji usług:

  • Struktura orkiestracji kontenerów. W miarę dodawania coraz większej liczby kontenerów do infrastruktury aplikacji pojawia się zapotrzebowanie na osobne narzędzie do monitorowania i zarządzania kontenerami – framework do orkiestracji kontenerów. Kubernetes mocno zajął tę niszę do tego stopnia, że ​​nawet jego główni konkurenci, Docker Swarm i Mesosfera DC/OS, oferują jako alternatywę integrację z Kubernetesem.
  • Usługi i instancje (Pody Kubernetes). Instancja to pojedyncza działająca kopia mikrousługi. Czasami jedna instancja to jeden kontener. W Kubernetesie instancja składa się z małej grupy niezależnych kontenerów zwanych pod. Klienci rzadko uzyskują bezpośredni dostęp do instancji lub podów; częściej uzyskują dostęp do usługi, która jest zbiorem identycznych, skalowalnych i odpornych na błędy instancji lub podów (replik).
  • Pełnomocnik wózka bocznego. Sidecar Proxy działa z pojedynczą instancją lub podem. Celem Sidecar Proxy jest kierowanie lub proxy ruchu przychodzącego z kontenera, z którym współpracuje, i ruchu powrotnego. Sidecar współdziała z innymi serwerami proxy Sidecar i jest zarządzany przez strukturę orkiestracji. Wiele implementacji Service Mesh korzysta z serwera proxy Sidecar do przechwytywania całego ruchu do i z instancji lub poda i zarządzania nim.
  • Odkrycie usługi. Kiedy instancja musi komunikować się z inną usługą, musi znaleźć (odkryć) sprawną i dostępną instancję drugiej usługi. Zazwyczaj instancja wykonuje wyszukiwania DNS. Struktura orkiestracji kontenerów utrzymuje listę instancji gotowych do odbierania żądań i zapewnia interfejs dla zapytań DNS.
  • Równoważenie obciążenia. Większość struktur orkiestracji kontenerów zapewnia równoważenie obciążenia w warstwie 4 (transport). Service Mesh implementuje bardziej złożone równoważenie obciążenia na warstwie 7 (poziom aplikacji), bogate w algorytmy i skuteczniejsze w zarządzaniu ruchem. Ustawienia równoważenia obciążenia można zmieniać za pomocą interfejsu API, co pozwala na koordynację wdrożeń typu blue-green lub canary.
  • Szyfrowanie. Service Mesh może szyfrować i odszyfrowywać żądania i odpowiedzi, usuwając to obciążenie z usług. Service Mesh może również poprawić wydajność poprzez nadanie priorytetu istniejącym trwałym połączeniom lub ponowne ich wykorzystanie, redukując potrzebę kosztownych obliczeń w celu utworzenia nowych połączeń. Najpopularniejszą implementacją szyfrowania ruchu jest wzajemny TLS (mTLS), gdzie infrastruktura kluczy publicznych (PKI) generuje i dystrybuuje certyfikaty i klucze do użytku przez serwer proxy Sidecar.
  • Uwierzytelnianie i autoryzacja. Service Mesh może autoryzować i uwierzytelniać żądania wysyłane z zewnątrz lub wewnątrz aplikacji, wysyłając do instancji tylko zweryfikowane żądania.
  • Obsługa wzorców automatycznego wyłączania. Obsługa siatki usług wzór automatycznego wyłączania, która izoluje niezdrowe wystąpienia, a następnie w razie potrzeby stopniowo przywraca je do puli zdrowych wystąpień.

Część aplikacji Service Mesh, która zarządza ruchem sieciowym pomiędzy instancjami, nazywa się Płaszczyzna danych. Twórz i wdrażaj konfigurację kontrolującą zachowanie Płaszczyzna danych, odbywa się przy użyciu oddzielnego Sterowanie samolotem. Sterowanie samolotem zazwyczaj zawiera lub jest zaprojektowany do łączenia się z API, CLI lub GUI w celu kontrolowania aplikacji.

Co to jest siatka usług?
Płaszczyzna kontroli w Service Mesh rozdziela konfigurację pomiędzy Sidecar Proxy i płaszczyznę danych.

Architektura Service Mesh jest często wykorzystywana do rozwiązywania złożonych problemów operacyjnych przy użyciu kontenerów i mikrousług. Pionierzy w tej dziedzinie mikroserwisy to takie firmy jak Lyft, Netflix i Twitter, które zapewniają stabilne usługi milionom użytkowników na całym świecie. (Oto szczegółowe omówienie niektórych wyzwań architektonicznych, przed którymi stanął Netflix.). W przypadku mniej wymagających aplikacji prawdopodobnie wystarczą prostsze architektury.

Jest mało prawdopodobne, aby architektura Service Mesh kiedykolwiek była odpowiedzią na wszystkie problemy związane z działaniem i dostarczaniem aplikacji. Architekci i deweloperzy dysponują ogromnym arsenałem narzędzi, a tylko jednym z nich jest młotek, który spośród wielu zadań musi rozwiązać tylko jedno – wbijanie gwoździ. Architektura referencyjna mikrousług firmy NGINXna przykład obejmuje kilka różnych modeli zapewniających kontinuum podejść do rozwiązywania problemów za pomocą mikrousług.

Elementy łączące się w architekturze Service Mesh, takie jak NGINX, kontenery, Kubernetes i mikrousługi jako podejście architektoniczne, mogą być równie produktywne w implementacjach innych niż Service Mesh. Na przykład Istio zaprojektowano jako kompletną architekturę siatki usług, ale jego modułowość oznacza, że ​​programiści mogą wybierać i wdrażać tylko te komponenty technologiczne, których potrzebują. Mając to na uwadze, ważne jest, aby dobrze zrozumieć koncepcję Service Mesh, nawet jeśli nie masz pewności, czy kiedykolwiek będziesz w stanie w pełni ją zaimplementować w swojej aplikacji.

Monolity modułowe i DDD

Źródło: www.habr.com

Dodaj komentarz