Architektura mikroserwisowa

Wraz z rozwojem firmy, wzrasta złożoność domeny.  Rozwój aplikacji musi iść w parze z rozwojem firmy i być dostosowany do wyzwań, które są przed nią stawiane.

Architektura mikroserwisowa może być odpowiedzią na problemy pojawiające się w trakcie rozwoju. Jednak czy jest to rozwiązanie idealne?

Czym są mikroserwisy?

Głównym założeniem architektury mikroserwisowej jest elastyczność i niezależność w rozwoju aplikacji.

Ale czym one są?

To publikowane niezależnie usługi, które odpowiadają za element domeny biznesowej. Każda usługa skupia w sobie odpowiednie funkcjonalności i udostępnia je innym usługom. W ten sposób tworzony jest większy system w ramach domeny biznesowej.

Omówmy to na przykładzie:

Sklep internetowy składa się z wielu elementów, które muszą ze sobą współpracować. Np:

  • produkt
  • konto klienta
  • zamówienia
  • stan magazynowy
  • płatności
  • faktury

Usługa traktowana jest jako blackbox, nie znamy technicznych szczegółow implementacji. 

Każda z nich zawiera endpointy za pomocą, których udostępniane są odpowiednie funkcjonalności. 

Wolisz wideo? Odwiedź mój kanał na You Tube:

Cechy architektury mikroserwisowej

Niezależność we wdrażaniu

Zamiast wdrażać cała aplikację jednocześnie, architektura miekroserwisowa pozwala podzielić ten proces na mniejsze części. Każda z mikrousług wdrażana jest oddzielnie. Zapewnia to elastyczność w rozwoju poszczególnych elementów aplikacji. 

Każda usługa to oddzielny proces

Architektura mikroserwisowa jest architekturą rozporoszoną. Podzielenie aplikacji na mniejsze elementy powoduje utworzenie granic usług, co powoduje, że nie są one zależne od siebie. A przynajmniej nie powinny. W przeciwieństwie do monolitu w przypadku potrzeby interakcji z innym elementem(usługą) nie mamy pewności, że jest ona dostępna, albo odpowie w odpowiednim czasie.

Komunikacja

Jedną z zasad jest utrzymywanie komunikacji między usługami tak prostą, jak to tylko możliwe, 

Utrzymanie prostej komunikacji oznacza, że usługi powinny albo wykonywać bezpośrednie połączenia do innych usług.

Powiązane z domeną biznesową

Zespół pracujący nad usługą powinien zamować się jej rozwojem na wszystkich poziomach, od UI po logikę biznesową i rozwój bazy danych.

Zmniejsza to zalezności i przyśpiesza planowanie pracy.

Niezależność technologii

Tworząc ekosystem usług nie musimy być przywiązani do tworzenia ich w jednej technologii. Możemy wybrać odpowiednią do rozwiązywania specyficznych problemów. Mogę to być różne języki programowania, czy też inne spoosby na przechowywanie danych.

Tak na marginesie to każda usługa powinna posiadać własną bazę danych.

Zalety mikrousług

Skalowalność

Każdy usługa jest oddzielnym procesem co powoduje, że w przeciwieństwie do monolitu skalowanie aplikacji może odbywać się punktowo.

Nie musimy skalować wszystkich usług jednocześnie. W przypadku zwiększonego obciążenia wziększamy dostępne zasoby w danej usłudze, żeby mogła obsłużyć wziększony ruch.

Odporność na awarię

Usługa jest pojedyńczym procesem. Niedostępność jednej usługi nie powoduje braku działania innych. Oczywiście jeżeli nie są od siebie zależne. 

Trzeba także opracować plan w przypadku niedostępności poszczególnych usług.

Niezależność technologii

Już o tym wspominałem. Podczas tworzenia aplikacji mamy dowolność w doborze technologii dla mikroserwisów. 

Wolność w wyborze technologii przynosi także zagrożenia. Zbyt duża różnorodność może zwiększać koszty utrzymania aplikacji z powodu potrzeby utrzymania wielu kompetencji w zespołach wytwórczych.

Łatwość wdrażania

W architekturze mikroserwisowej każda usługa wdrażana jest oddzielnie. W przypadku pojawienia się błędów w prosty sposób jesteśmy w stanie wizolować usługę i cofnąć zmiany, które zostały wprowadzone.

Pozwala to także na niezależny rozwój aplikacji.

Wady mikrousług

Koszty

Koszty możemy podzielić na dwie części: ludzkie i sprzętowe.

Wdrożenie architektury mikroserwisowej wiąże się ze zwiększeniem wykorzystania komputerów, sieci, licencji, pamięci masowej i innych elementów związanych z infrastrukturą.

Z drugiej strony potrzebne jest więcej osób, żeby rozwijać aplikację z rozproszonej architekturze.

Raportowanie

W architekturze monolitycznej występuje jedna centralna baza, z której pobieramy dane. Zastosowanie mikroserwisów powoduje, że dane są rozproszone i tworzenie raportów jest utrudnione. Może być potrzebne wdrożenie innych technologii, które będą mogły ułatwić ten proces.

Monitorowanie 

Monitorowanie działania i zużycia zasobów jest bardziej skomplikowane i wymagana odpowiednich narzędzi do automatyzacji tego procesu.

Potrzebne jest także ustalenia sposobu reakcji na poszczególne wydarzenia.

Bezpieczeństwo

Większa ilość usług, powoduje większą ilość punktów styku. Wpływa to na ilość przesyłanych danych, które trzeba zabezpieczyć. 

Konieczne jest zadbanie o bezpieczeństwo wszystkich usług.

Bezpieczeństwo systemu jest tak mocne jak zabespieczenia najsłabszej usługi.

Testowanie

Opracowywanie i wykonywanie testów jest utrudnione. Problematyczne staje się ustalenie danych i konfiguracja środowiska testowego. 

Trzeba poświęcić więcej zasobów, aby przeprowadzić kompleksowe testy systemu.

Opóźnienia 

Ruch sieciowy w przypadku mikroserwisów jest zwiększony. Podczas przesyłania danych pomiędzy usługami może powstawać opóźnienie. Po każdej zmianie wprowadzonej w usłudze trzeba sprawdzić, czy ma ona wpływ na szybkość działania aplikacji.

Trzeba także ustalić jakie opóźnienie jest akceptowalne.

Kiedy nie korzystać z mikrousług

Do poprawnego działania aplikacji w architekturze mikrousługowej  potrzebne jest odpowiednie ustalenie granic aplikacji. 

Nie jest zalecane stosowanie mikroserwisów kiedy nie znamy jeszcze zakresu działania produktu, albo dla start-upów, których rozwój jest dynamiczny.

Początkowy pomysł na biznes nie koniecznie musi zostać wdrożony jako doceplowy produkt. W trakcie tworzenia nowego produktu, a szczególnie start-upu zmiana koncepcji biznesowej nie jest czymś niezwyczajnym.

Dodatkowo wdrożenie architketury mikroserwisowej wiąże się z większymi kosztami utrzymania aplikacji co także może wpływać na ostateczny sukces.

Kiedy warto rozważyć wprowadzenie mikroserwisów

W rozwijających się organizacjach, które zaczynają odnosić sukcesy, albo duzych firmach, które mają problem z rozwojem aplikacji przez wiele zespołów architektura mikroserwisowa może przynieść wiele korzyści.

Podział aplikacji na mniejsze części może spowodować ułatwienie w rozwoju aplikacji. Zespoły wytwórcze zyskają odpowiedzialność za poszczególne elementy aplikacji i będą mogły działać niezależnie.

Nie jest to proces prosty, jednak wdrożenie go w odpowiedni spośób w długi okresie przyniesie wiele korzyści. 

Podsumowanie

Architektura mikroserwisowa przynosi wiele ułatwień w stosunku do stosowania architektury monolitycznej. 

Wiąże się to jednak z wieloma wyzwaniami związanymi z nowym podejściem. Trzeba przeanalizować i sprawdzić czy nowe podejście faktycznie przyniesie więcej korzyści, czy nie będzie robione na wyrost.

Tak jak w każdy przypadku, nie ma idealnych rozwiązań. Trzeba wybrać najlepsze w odpowiedniej sytuacji.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *