Jakie zalety i wady mają mikroserwisy?
Mikroserwisy (lub mikrousługi) to niewielkie usługi, których przygotowanie zajmuje maksymalnie kilka tygodni. Obejmują tylko jeden obszar biznesu. Ideą mikroserwisu jest podział monolitycznej aplikacji na zbiór mniejszych usług, które pozostają ze sobą w relacji. Każdy mikroserwis jest de facto małą aplikacją. Ma własną architekturę, złożoną z logiki biznesowej i różnych adapterów.
W porównaniu z monolitem mikrousługi mają wiele zalet:
- pozwalają lepiej kontrolować poziom długu technicznego
- redukują ryzyko zatrzymania pracy całego systemu z powodu drobnego błędu w jednym obszarze
- umożliwiają szybsze i częstsze wdrożenia nowych wersji
- podnoszą stabilność systemu
Architektura mikroserwisowa wydaje się idealna zwłaszcza, gdy trzeba często testować pomysły na nowe funkcjonalności i sprawdzać, jak zareagują na nie użytkownicy.
Zalety architektury mikroserwisowej
- adresuje problem złożoności, bo rozkłada aplikację na wiele łatwych w zarządzaniu elementów, znacznie szybszych w opracowaniu i łatwiejszych w zrozumieniu i utrzymaniu
- pozwala niezależnie rozwijać każdą usługę przez zespół, który dzięki temu koncentruje się tylko na funkcjonalności tej usługi
- umożliwia swobodny wybór technologii
- oznacza niezależne i szybsze wdrożenie każdej usługi
- pozwala niezależnie skalować każdą usługę
Wady
Architektura mikrousługowa jest bardziej skomplikowana, bo jest architekturą systemów rozproszonych. Komplikuje projekt, między innymi powoduje, że musimy wybrać i wdrożyć mechanizm komunikacji między procesami oparty na komunikatach lub RPC. Musimy też oprogramować wyjątki i awarie oraz wziąć pod uwagę pozostałe aspekty obliczeń rozproszonych. Ponadto:
- architektura partycjonowanej bazy danych. Transakcje biznesowe aktualizują wiele jednostek, w aplikacji opartej na mikroserwisach aktualizują wiele baz danych należących do różnych usług. Korzystanie z transakcji rozproszonych zwykle nie wchodzi w rachubę i ostatecznie musimy zapewnić spójność programowo, co jest oczywiście trudniejsze dla programistów
- testowanie aplikacji opartych na mikrousługach jest znacznie bardziej złożone niż monolitycznej aplikacji webowej. Musimy uruchomić tę usługę i wszystkie usługi powiązane
- trudniej jest wprowadzić zmiany obejmujące wiele usług. W monolitycznej aplikacji możemy po prostu zmienić odpowiednie moduły, zintegrować zmiany i wdrożyć je za jednym razem. W architekturze mikrousługowej dokładnie planujemy i koordynujemy wdrażanie zmian w każdej z usług
- wdrażanie aplikacji jest też bardziej złożone. Monolityczna aplikacja jest po prostu wdrażana z wykorzystaniem zestawu maszyn wirtualnych. Natomiast aplikacja oparta na mikrousługach zazwyczaj składa się z wielu usług, a każda ma wiele instancji środowiska wykonawczego. Z kolei każda instancja musi być skonfigurowana, wdrożona, skalowana i monitorowana. Musimy także zapewnić mechanizm wykrywania usług. Ten poziom złożoności wymaga już dużej automatyzacji
Zanim zaczniesz – wybierz scenariusz migracji
Dekompozycja monolitu na mikrousługi w większym systemie może zająć nawet kilka lat. Na szczęście możemy wybrać drogę pośrednią. Wtedy stopniowo migrujemy i ograniczamy rolę monolitu przez wydzielanie z niego kolejnych mikroserwisów.
Gdy przechodzisz z monolitu na mikroserwisy
1. Wskaż właściciela mikroserwisu
Zadbaj, by każda mikrousługa miała wyraźnie zdefiniowanego właściciela. Ustalenie właściciela nadaje mu pewien obszar swobody, ale też przypisuje odpowiedzialność. Skróci to czas zgłaszania nowych funkcjonalności lub awarii.
2. Zadbaj o monitoring i dokumentację
Wprowadź monitorowanie jakości pracy mikroserwisów. Dzięki niemu zapobiegniesz awariom. Prowadź dziennik zmian. To ci umożliwi śledzenie nowych funkcji lub poprawek błędów.
3. Zapewnij niezależność mikroserwisów
Staraj się z wyprzedzeniem identyfikować zależności, by dobrze zaplanować rozwój systemu. Dbaj o możliwie wysoką niezależność poszczególnych mikroserwisów. Dzięki temu uzyskasz wysoką dostępność rozwiązania.
4. Pomyśl o standaryzacji
Wykorzystaj standardowe sposoby, by ujednolicić komunikację w systemie i poza nim. To ułatwi rozwój zwłaszcza rozległego systemu, który otwiera się naraz w wielu nowych kierunkach.
5. Wykorzystaj gotowe szkielety
Sięgnij po frameworki do tworzenia mikroserwisów albo opracuj własne szkielety. Dzięki temu skrócisz czas na dostosowanie się do standardów.
Autorka: Magdalena Krawczuk