Czy mikroserwisy są dla ciebie ?

Wiele już pewnie o nich słyszałeś. Na każdej konferencji znajdziesz o nich prezentacje. Nawet odwiedzając dział z książkami o „informatyce” w lokalnym Empiku, spotkasz je na półce. To właśnie one, mityczne mikroserwisy. Czy są świętym graalem lub srebrnym nabojem, który rozwiewa wszystkie twoje problemy ? Najwyższy czas, abyś poznał trochę prawdy…

Utrzymywanie monolitu

Gdyby ktoś zrobił ankietę lub zapytał na konferencji o osoby używające mikroserwisów w pracy, pojawiłoby się kilka rąk w górze. Niestety większość z nas, programistów nie ma z nimi do czynienia poza salami wykładowymi i książkami, które czytamy (czytasz prawda ?) .

Przeklęty biznes, oni nigdy nie rozumieją naszych potrzeb!  – krzyknął któryś z programistów w swoim zespole. Gdyby tylko pozwolono nam przepisać ten stary system, w bardziej rozproszony sposób z mikroserwisami. Nie byłoby takich problemów. Takie słowa padają chyba w każdym zespole…

Tak to już jest, większość pracy w IT, to utrzymanie i wdrożenia. Ktoś kiedyś napisał aplikacje, a potem trzeba ją rozwijać i wspierać latami. Biorąc pod uwagę czas potrzeby na stworzenie takich rozwiązań oraz koszta, nikogo nie powinno to dziwić. Niby telefony wymieniamy co dwa lata, jednak zmiana systemu tak często może nieść za sobą katastrofalne skutki. Trzeba będzie przeszkolić personel, a nowe rozwiązanie nie oznacza lepsze. Dlatego też większość z przedsiębiorstw decyduje się na systemy sprawdzone w boju, czyli takie, które mają już kilka lat za pasem. Firma, która nam je dostarcza, nie powinna być jednak anonimowa. Najlepiej, żeby miała już parę dobrych lat za sobą. Nowe mogą upaść i wtedy pozostaniesz bez wsparcia technicznego.

Takimi czy innymi kryteriami kierują się menedżerowie, czy właściciele firm. Koniec końców oznacza to, że ktoś, czytaj któryś z nas programistów, będzie musiał utrzymywać te stare systemy. Brak architektury mikroserwisowej będzie jednym z mniejszych problemów. Źle przemyślany kod i stare biblioteki czy języki mogą okazać się większą kulą u nogi. Głównie dlatego, że nikt nie chce, używać czegoś co jest przestarzałe, a wiedza, która tam zdobędzie, nie do końca będzie przydatna w dalszej karierze. Jest to jeden z głównych powodów dlaczego, większość z nas nie ma z nimi styczności.

Na szczęście, istnieje szybkie i tanie lekarstwo. Nazywa się: zmiana pracy. Oczywiście warto też porozmawiać z biznesem i spróbować przekonać ich do zmian. Niestety może być to Mission impossible…

 

Microservices hype train

Istnieje pytanie, które każdy z nas powinien sobie zadać przynajmniej raz dziennie: Dlaczego ? Nie tylko w pracy, ale też w życiu prywatnym. Wiele razy mieliśmy sytuacje, która skończyła się porażką. Często odbieraliśmy wiele sygnałów świadczących o zbliżającym się niebezpieczeństwie, niestety byliśmy ślepi. Nie zauważyliśmy żadnego z nich.

Istnieje prawdopodobieństwo, że tak właśnie stanie się z mikroserwisami. Oczarowani cudownymi historiami firmy takich jak Facebook, Netflix czy Google, uznamy, że jest to jedyne, właściwe rozwiązanie. Niestety nie jest.

Nie każdy system opłaca się tworzyć na podstawie architekturę mikroserwisową. Weźmy jakiś prosty przykład. Tworzymy system dla firmy, który ma pomóc w przetwarzaniu danych. Powinien oczywiście zawierać interfejs graficzny, a jego bebechy będą przetwarzać jakąś bardzo skomplikowaną logikę biznesową. Docelową grupą odbiorców mogą być nawet duże korporacje, ale ilość osób, które faktycznie będą z niego korzystać, w takiej firmie nie przekroczy kilkudziesięciu. Czy w takim wypadku powinniśmy brnąć w mikroserwisy ? Odpowiedź jest jak zwykle taka sama. To zależy…

W przypadku gdy każdy klient dostanie osobną wersję takiego systemu, a soft sam w sobie nie jest tak bardzo złożony, to może okazać się to nie najlepszym rozwiązaniem. To prawda, całość będzie prostsza w utrzymaniu. Ale będziesz musiał zainwestować dużo więcej czasu (czyli pieniędzy !) w infrastrukturę, która przy małej skali może okazać się kosztowniejsza.

Gdy jednych celujemy w rozwiązania typu SaaS, wybranie monolitu może przynieść katastrofalne skutki. Głównym z nich będzie problem ze skalowalnością. Ponieważ w przypadku monolitu jedynym sposobem na zwiększenie przepustowości, bez optymalizacji kodu będzie zwielokrotnienie całego systemu. Nie jest to optymalne, gdy chcemy przyśpieszyć tylko część z jego funkcjonalności. Dodatkowo wgrywanie nowych poprawek wymagać będzie zatrzymania całego serwera. W przypadku gdy wyłączamy serwer jednego klienta, nie jest to tak dużym problemem. Wystarczy uzgodnić godziny niedostępności naszej aplikacji i po problemie. Spróbujmy to zrobić, gdy jeden serwer utrzymuje dziesiątki różnych firm. Problematyczne nie ?

Złe mikroserwisy

Decyzja została podjęta. Biznes wydał pozwolenia na te cale mityczne mikroserwisy. Programiści skaczą z radości, Koniec problemów ! – krzyczą ! Teraz wystarczy iść do przodu.

Na pierwszy rzut oka wszystko wydaje się proste. Rozbijemy aplikacje na małe części. Dzięki temu zabiegowi pojedyncze serwisy będą prostsze w utrzymaniu, a w razie problemów będziemy mogli przepisać jeden z nich. Nie mówiąc już o skalowaniu ! Przecież to takie proste…

Każdy medal ma dwie strony. I przed podjęciem decyzji warto zapoznać się nie tylko z zaletami, ale też wadami. Mikroserwisy poza swoimi oczywistymi zaletami, niosą za sobą wiele dodatkowych kosztów. Większość z nich związana jest z infrastrukturą. Do niektórych z nich zaliczyłbym:

  • Orkiestracja serwisów, jeżeli chcemy je skalować.
  • Więcej serwerów do utrzymania przez twój zespół.
  • Zwiększone problemy związane z IO i networkingiem.
  • Dużo większe prawdopodobieństwo, że coś się zepsuje.
  • Zarządzanie logami produkowanymi przez nasze aplikacje.
  • Komunikacja pomiędzy zespołami staje się ważniejsza niż kiedykolwiek.

Tak naprawdę powyższa lista powinna zawierać dużo więcej pozycji, a każdy z tych problemów zasługuje na osobną kilkuset stronicową książkę.

Są to jednak powszechne problemy i każdy z nich jest do rozwiązania. Na ryku znajdziesz wiele narzędzi, które ci w tym pomogą, a spora część z nich jest darmowa.

nie bądźmy jednak takimi pesymistami, ponieważ są też dobre strony mikroserwisów, a do głównych zaliczyłbym:

  • Skalowalność
  • Prostota w utrzymaniu
  • Zwiększona niezawodność systemu
  • Możliwość wykonywania wielu „wgrywek” dziennie
  • Zadowoleni programiści (jeżeli wszystko idzie zgodnie z planem)
  • I najważniejsze, w końcu zostaniesz prawdziwym JEDNOROŻCEM !

 

Podsumowanie

Nie zrozumcie mnie źle. Jestem wielkim zwolennikiem architektury mikroserwisowej. Jednak profesionalny programista powinien cechować się pewną zachowawczością. Wybór narzędzi oraz metod powinien być uwarunkowany problemami i wymogami biznesowymi, a nie tym, co usłyszymy na jakiejś konferencji. Każdy z nas lubi nowe technologie. Nie znam osoby, która nie chciałaby spróbować najnowszych rozwiązań w projekcie. Zmienić framework, na ten który ma najwięcej gwiazdek na githubie.

Jeżeli chcemy, by nasz projekt odniósł sukces (pod względem programistycznym), powinniśmy zachować dozę sceptycyzmu.