Monolit i mikroserwisy to dwa sposoby tworzenia architektury aplikacji. W aplikacjach monolitycznych wszystkie funkcjonalności są ze sobą połączone i zależne od siebie.
Aplikacja mikroserwisowa składa się natomiast z wielu małych podprogramów obsługujących konkretne funkcjonalności, które są ze sobą skomunikowana i działają wspólnie, ale nie są od siebie bezpośrednio zależne. Pionierem wykorzystania mikroserwisów jest Netflix.
Porównanie między tymi dwoma architekturami można przedstawić tak:
Handlowiec ma pytanie do zespołu technicznego – w przypadku monolitu będzie odpytywał po kolei cały zespół, a w przypadku mikroserwisów – zwróci się do konkretnej osoby, która na pewno zna odpowiedź. W pierwszym przypadku będzie to czasochłonne i frustrujące doświadczenie, a w drugim – sprawne i skuteczne działanie.
Architektura monolityczna – zalety, wady i zastosowania #
Aplikacje monolityczne sprawdzają się w początkowej fazie działalności firmy, gdy jeden centralny system wystarczy by realizować cele biznesowe. Przy niewielkiej liczbie i różnorodności procesów czy usług nie ma potrzeby tworzyć podziałów charakterystycznych dla architektury mikroserwisów.
Prostota architektury sprawia, że łatwo rozpocząć development w architekturze monolitu, łatwiej taki system także monitorować i testować w całości.
Wraz jednak z rozwojem aplikacji, dodawaniem funkcjonalności i ich rozbudową w monolitach pojawiają się problemy z:
- Reakcją na awarie – problem w jednej części systemu często powoduje jego całkowite zatrzymanie, a odnalezienie źródła awarii pośród setek linii kodu jest czasochłonne i kosztowne;
- Wprowadzaniem zmian – każda zmiana w kodzie wymaga dokładnego sprawdzenia jaki wpływ będzie miała na całość aplikacji; ponadto każda zmiana dotyczy całości aplikacji, co oznacza jej niedostępność na czas wdrożenia;
- Bezpieczeństwem – w przypadku cyberataku wyciek dotyczy wszystkich danych zgromadzonych w aplikacji;
- Brakiem skalowalności – monolity nie się odporne na nagłe wzrosty obciążeń – nie można zeskalować obciążonej funkcjonalności, jedynie całą aplikację, co jest nieefektywne czasowo i kosztowo.
Architektura mikroserwisów – zalety, wady i zastosowania #
Mikroserwisy rozwiązują wiele problemów, które trapią rozbudowane architektury monolityczne. Dzięki swojej rozproszonej architekturze mikroserwisy:
- Zapewniają wysoką dostępność aplikacji – problem dotyczący jednej funkcjonalności nie wpływa bezpośrednio na całą aplikację, a dodatkowo w mniejszej bazie kodu łatwiej jest odnaleźć źródło awarii i ją naprawić;
- Umożliwiają zwinne skalowanie – dobrze reagują na spadki i wzrosty obciążenia (co przy wykorzystaniu chmury obliczeniowej pozwala na optymalizację kosztów);
- Ułatwiają rozwój i aktualizację aplikacji – pozwalają aktualizować poszczególne komponenty bez konieczności zatrzymywania całej aplikacji, a dodawanie nowych funkcjonalności i zmiana istniejących nie wpływa na cały kod – dzięki temu developerzy nie są ograniczeni do jednego języka programowania.
Mikroserwisy najlepiej sprawdzają się w dynamicznych środowiskach, gdzie zmiany wdraża się często i szybko (CI/CD). Nie są jednak rozwiązaniem idealnym dla każdej firmy, np. są nieopłacalne przy wdrożeniach do małych projektów.
Aby w pełni skorzystać z ich zalet, developerzy powinni wykorzystywać je świadomie, z pełnym zrozumieniem ich charakterystyki. Źle zaprojektowana strategia wdrażania mikroserwisów, może prowadzić do ich rozrostu, a w konsekwencji utworzy środowisko IT, które jest złożone, trudne w zarządzaniu i zamiast usprawnić systemy, ponownie je ograniczy.