Jakie są zalety mikroserwisów i czy zapłacą za Twój biznes?
Opublikowany: 2022-01-12Koncepcja mikroserwisów, podejście do projektowania aplikacji jako zestawu małych usług, istnieje od co najmniej 2015 roku. Dostarczając korzyści, takich jak niezależne wdrażanie i skalowalność komponentów, mikrousługi są dziś modne. Dzieje się tak, ponieważ korzyści płynące z mikroserwisów przekładają się na niewiarygodnie szybsze tempo tworzenia oprogramowania. Ponieważ konsumenci szybko zmieniają swoje preferencje i zachowania, osoby adoptujące mikrousługi są w stanie nadążyć. Życie jest teraz wspaniałe, mówią. Aż 56% firm biorących udział w niedawnym badaniu IMB planuje przyjęcie podejścia opartego na mikroserwisach w ciągu najbliższych 24 miesięcy.
Prawie 80% obecnych użytkowników twierdzi, że ich firma prawdopodobnie zwiększy inwestycje w mikroserwisy. Zalety mikroserwisów skłoniły Netflix, Amazon, eBay, Twitter i wielu innych gigantów technologicznych do migracji z architektury monolitycznej do architektury mikroserwisowej. Ale czy Twoja firma powinna korzystać z mikroserwisów? Zależy to od kontekstu i tego, czy zalety mikrousług przeważają nad wadami Twojej aplikacji. Ten blog zawiera omówienie podejścia mikrousług i podejścia monolitycznego oraz pięciu kluczowych korzyści wynikających z korzystania z architektury mikrousług. Dzieli się również niektórymi doświadczeniami ITRex w zakresie mikroserwisów i oferuje wskazówki, kiedy firmy powinny (nie) korzystać z mikroserwisów. Nurkować w.
Definicja mikroserwisów i porównanie z architekturą monolityczną
Co to jest architektura mikroserwisów ? Styl mikrousług to podejście do tworzenia aplikacji natywnych dla chmury jako zestawu małych składników lub usług, które są zaprojektowane wokół jednego przepływu pracy biznesowej i współpracują ze sobą. Zasadniczo mikrousługi są częścią fundamentalnej zmiany w kierunku DevOps, kultury, w której zespoły programistyczne i operacyjne IT ściśle ze sobą współpracują przy użyciu narzędzi automatyzacji, aby dostarczać szybciej.
Mikroserwisy:
- są rozwijane autonomicznie,
- korzystać z własnej bazy danych i mogą być pisane w różnych językach,
- komunikować się za pośrednictwem interfejsów API z lekkimi protokołami, takimi jak HTTP, brokerzy komunikatów lub przesyłanie strumieniowe zdarzeń, oraz
- wykonać określoną funkcjonalność biznesową.
Na przykład aplikacja e-commerce oparta na mikrousługach może mieć niezależne usługi odpowiedzialne za obrazy produktów, zarządzanie profilami użytkowników, wyszukiwanie, weryfikację zapasów, przetwarzanie płatności i wysyłkę. Front end (strona skierowana do klienta) jest oddzielony od zaplecza (strona skierowana do firmy), dzięki czemu można je indywidualnie dostosowywać i nimi zarządzać. Jeśli weźmiesz przykład Amazona, architektura mikroserwisów może wyglądać przytłaczająco, jeśli nie przerażająco.
Jednak bez użycia architektury mikroserwisów Amazon prawie nie przekształciłby się w jedną z najcenniejszych firm na świecie (wycenianą według kapitalizacji rynkowej wynoszącej 1,694 bln USD według stanu na grudzień 2021 r.). Decyzja o wykorzystaniu zalet mikrousług została podjęta na początku XXI wieku, kiedy Amazon zrozumiał, że nie jest w stanie skalować się w tempie wzrostu bazy klientów z powodu powolnego rozwoju i problemów z kodowaniem.
Netflix dostrzegł zalety architektury mikrousług opartych na chmurze pod koniec 2000 roku po tym, jak przez kilka dni nie był w stanie wysyłać klientom płyt DVD z powodu ogromnego uszkodzenia bazy danych. Po podzieleniu swojej aplikacji na ponad 700 mikroserwisów inżynierowie Netflix mogą dziś wdrażać kod tysiące razy dziennie, dzięki czemu firma może przesyłać strumieniowo około 250 milionów godzin treści dziennie do ponad 200 milionów użytkowników na całym świecie. Z jakiej architektury te gwiazdy technologii i wiele innych firm korzystały wcześniej, w czasach przed chmurami? Używali monolitów.
Czym jest architektura monolityczna?
Aplikacja monolityczna jest zbudowana jako pojedyncza jednostka, która łączy wszystkie komponenty, w tym interfejs użytkownika po stronie klienta, operacje po stronie serwera i bazę danych. Zazwyczaj architektura monolityczna:
- posiada jedną bazę kodu dla wszystkich funkcjonalności,
- jest ściśle powiązany i
- wykorzystuje scentralizowane dane.
Aplikacja e-commerce opracowana przy użyciu podejścia monolitycznego składałaby się z ściśle powiązanych usług front-end i back-end wdrożonych jako jedna jednostka, co oznacza, że wszelkie dostosowania wymagałyby zmian w bazie kodu i platformie front-end (patrz diagram poniżej dla porównanie).
Aplikacje monolityczne są dalekie od śmierci. W rzeczywistości nadal mogą być dobrym wyborem, ponieważ często są łatwiejsze i tańsze w budowie (przynajmniej na początku). Mają jednak wady. Zmiana w jednej części, czy to w celu aktualizacji, czy skalowania, często wymaga przebudowy i ponownego wdrożenia całego systemu.
Podobnie cały system może zostać zniszczony przez jedną źle zachowującą się część, co oznacza, że monolity są kruche. Monolity są również trudne do utrzymania w miarę ich wzrostu, a integracja z narzędziami innych firm też nie jest przyjemnością. Te wady są trudne do zignorowania w dzisiejszym destrukcyjnym środowisku rynkowym, w którym firmy powinny szybko reagować na zmiany, aby przetrwać i rozwijać się. Stąd szum o korzyściach płynących z mikroserwisów tworzonych przez zespoły DevOps.
5 kluczowych korzyści z mikroserwisów
1. Niezależne wdrożenie
To chyba najważniejsza zaleta mikroserwisów, przynajmniej według Sama Newmana, jednego z pierwszych pionierów mikroserwisów. Wprowadzanie zmian w aplikacji w celu poprawy wydajności lub dodania nowej funkcji w odpowiedzi na pojawiające się potrzeby użytkowników to pestka dzięki samodzielnym mikrousługom. Każdą usługę można modyfikować i aktualizować bez dotykania całego systemu. Można je również skalować niezależnie od siebie, jeśli jedna funkcja jest zbytnio obciążona z powodu nadmiernych żądań. Na przykład możesz skalować tylko usługę przetwarzania płatności, jeśli otrzymujesz więcej płatności, bez zwiększania zużycia zasobów przez inne usługi. W ten sposób proces wymaga mniej infrastruktury i prowadzi do oszczędności kosztów.
2. Niższy promień wybuchu awarii
Luźne sprzężenie architektury mikrousług zapewnia również inną zaletę mikrousług — lepszą odporność. Wyraźne granice między usługami, w połączeniu z ich mikrorozmiarem, ograniczają wpływ nowych wersji i zapewniają izolację błędów. Awaria jednej usługi nie powoduje usunięcia niepowiązanej funkcjonalności, podczas gdy reszta systemu pozostaje nienaruszona i nadal świadczy usługi użytkownikom.
3. Izolacja danych
Jest to trzecia korzyść, którą dostarczają mikrousługi, jeśli są wykonane poprawnie. Suwerenność danych według komponentu jest podstawową cechą mikrousług. Architektura mikroserwisów umożliwia wyraźne rozgraniczenie usług, które dotyczą danych, co ma kluczowe znaczenie, zwłaszcza jeśli organizacja musi przestrzegać przepisów dotyczących danych medycznych lub RODO.
4. Wykorzystanie odpowiedniej technologii
Ponieważ aplikacje monolityczne mają jedną bazę kodu, trudno jest dostosować podejście techniczne do każdej funkcji i często poszukuje się kompromisu. Z kolei mikrousługi są domyślnie zaprojektowane z myślą o możliwościach biznesowych, umożliwiając zespołom wybór najlepszej dostępnej technologii dla określonej funkcjonalności, aby jak najlepiej ją wykorzystać. Dzieje się tak, ponieważ mikrousługi mogą używać różnych technologii lub języków programowania dla różnych składników. Mikrousługi upraszczają również wdrażanie najnowszych technologii lub w razie potrzeby integrację z narzędziami innych firm. Brak uzależnienia od dostawcy to kolejna zaleta mikrousług, naturalnie wynikająca z luźno powiązanej architektury.
5. Wydajność
Podejście mikrousług umożliwia firmom tworzenie małych, wielofunkcyjnych zespołów wokół jednej usługi lub pakietu usług, które mogą działać w sposób zwinny. Ten model minimalizuje przekazywanie, gdy jeden zespół musi czekać, aż inny zakończy swoje zadanie, czy to wdrożenie, czy testowanie, zanim będzie mógł rozpocząć pracę. Bez uzależnienia od innego zespołu tempo rozwoju przyspiesza. Według ankiety IMB przeprowadzonej wśród 1200 dyrektorów i programistów IT, adoptorzy zgłaszają wiele korzyści wynikających z korzystania z mikrousług. Najważniejsze zalety mikroserwisów, jakie odczuwali, to: 30% — Wyższe zadowolenie klientów 29% — Lepsze bezpieczeństwo danych firmy/klienta 29% — Szybszy czas wprowadzania na rynek 28% — Lepsza wydajność aplikacji 27% — Większa elastyczność w zakresie skalowania zasobów w górę lub 26% w dół — Większa produktywność pracowników Czy mikroserwisy wiążą się z wyzwaniami? Cóż, jak mówi popularny cytat, mikroserwisy nie są darmowym lunchem. Czytaj.

Zła część o mikroserwisach
1. Złożoność
Nieodłączna złożoność mikrousług rośnie wraz z liczbą usług. Ta złożoność jest wielorakie i przypisywana następującym:
- Kontrola odgórna na poziomie technologicznym i operacyjnym jest niemożliwa
- Testowanie jest trudne, a automatyzacji testów nigdy nie będzie za dużo
- Wdrażanie komunikacji wewnętrznej jest trudne, więc potrzebni są utalentowani programiści
- Ilość rejestrowanych danych jest zbyt duża, co może prowadzić do ich niespójności
- W przypadku nowych wersji mogą pojawić się problemy z kompatybilnością
- Występują trudności z zapewnieniem odpowiedniej ilości zasobów
2. Koszty
Mikroserwisy dają firmom więcej możliwości zarabiania pieniędzy, ale ich nie oszczędzania. Oprócz kosztów zatrudnienia programistów zdolnych do zbudowania złożonego środowiska mikrousług, dochodzą do tego rachunki za chmurę i API. Dobrą wiadomością jest to, że bieżące koszty można znacznie zoptymalizować, ponieważ mikrousługi korzystają z zasobów na żądanie na zasadzie płatności zgodnie z rzeczywistym użyciem.
3. Zagrożenia bezpieczeństwa
Połowa respondentów w ankiecie IBM wymieniła bezpieczeństwo wśród najważniejszych wyzwań, z jakimi zmierzyli się na drodze do wdrożenia mikrousług. Bezpieczeństwo należy zapiekać od samego początku, ponieważ każda mikrousługa ma własny zestaw punktów wejścia do komunikacji z innymi za pośrednictwem różnych poziomów infrastruktury, co prowadzi do zwiększonego narażenia aplikacji na ataki. Poza tym skalowanie infrastruktury zwiększa ryzyko utraty kontroli i widoczności komponentów aplikacji.
Kiedy (nie) korzystać z mikroserwisów
I na koniec nasze ostatnie pytanie: kiedy architektura mikroserwisów jest warta zachodu? Chociaż szum związany z mikrousługami jako naturalnym rozwiązaniem dla aplikacji natywnych dla chmury jest uzasadniony, nie powinny one być Twoim domyślnym stylem. Literatura przedstawia to po prostu: zacznij od monolitu i podziel go, gdy napotkasz problemy ze skalowalnością lub zużyciem zasobów lub cokolwiek innego, co uzasadnia przejście na ścieżkę mikrousług.
Oto nasze kluczowe wskazówki, kiedy NIE używać mikroserwisów:
1. Jeśli jesteś startupem, mikroserwisy to zły pomysł. Rozsądniej będzie zacząć od aplikacji monolitycznej i podzielić ją na mniejsze elementy, gdy stanie się to zbyt trudne dla zespołu dwóch pizz. To, czego chcesz, to przeprowadzać tanie eksperymenty, zamiast inwestować mnóstwo czasu, wysiłku i pieniędzy w tworzenie złożonej architektury produktu, którego wartość dla klienta nie została jeszcze zweryfikowana. Monolity to doskonały sposób na przetestowanie (i odrzucenie) MVP, aby szybko dowiedzieć się, co przyniesie wartość Twoim klientom. Jak mówi Martin Fowler, inny szanowany guru mikroserwisów: i) Prawie wszystkie historie dotyczące mikroserwisów, które odniosły sukces, zaczęły się od monolitu, który stał się zbyt duży i został rozbity. ii) Prawie we wszystkich przypadkach, w których słyszałem o systemie zbudowanym od podstaw jako system mikroserwisowy, miał on poważne kłopoty. Uwaga: jeśli domena produktu jest niepewna, nie powinieneś używać mikroserwisów na początku. Może być zbyt wcześnie, aby podejmować złożone decyzje architektoniczne, a prawdopodobnie Twoje podejście do ustanowienia komunikacji i granic będzie dalekie od celu, gdy Twój projekt dojrzeje.
2. Mikroserwisy nie są dobrym wyborem dla rozwiązania, które nie jest skomplikowane i może być utrzymywane przez stosunkowo niewielki zespół. Wdrożenie złożonej architektury mikrousług dla narzędzia do planowania wydarzeń w Twojej firmie może rzeczywiście rozbawić Twoich programistów, ale czy będzie warte zachodu? Mikrousługi są przede wszystkim zaprojektowane w celu rozwiązania jednego problemu: złożoności. Jak stwierdza Martin Fowler, „nawet nie rozważaj mikroserwisów, chyba że masz system, który jest zbyt złożony, aby można było nim zarządzać jako monolit”.
3. Nie wybieraj mikroserwisów, jeśli Twoja aplikacja jest zbyt mała, aby je uzasadnić. Czy Twoje systemy zarządzania zapasami lub zakupy muszą zostać przekonwertowane na mikrousługi, jeśli radzą sobie doskonale tak, jak powinny? Po raz kolejny idea korzystania z mikroserwisów polega na podzieleniu złożonej aplikacji na zestaw mniejszych usług. Dekompozycja kodu, który jest już mały i prosty, spowodowałby tylko zwiększenie złożoności — teraz musisz poruszać się po wszystkich problemach z wdrażaniem, interoperacyjnością i debugowaniem z wieloma artefaktami, zamiast wdrażać całą jednostkę w dobry, staromodny sposób.
No dobrze, ale kiedy używać mikroserwisów, aby czerpać z nich korzyści?
Mikrousługi mają sens, gdy którekolwiek z powyższych stwierdzeń jest fałszywe. Innymi słowy:
- Gdy Twój produkt ewoluuje w coś złożonego , co trzeba okiełznać lub gdy chcesz nadążyć za zmianami i dodać ważne funkcje, które w innym przypadku są niemożliwe do wdrożenia z powodu wąskich gardeł architektury monolitycznej.
- Kiedy budujesz od podstaw duży i złożony produkt o określonym zakresie. Ilekroć firma chce zorganizować dziesiątki programistów w celu zbudowania rozwiązania na dużą skalę z jasnym zestawem funkcji, powinna rozważyć utworzenie małych, wielofunkcyjnych zespołów, z których każdy odpowiada za pojedynczy komponent. W ten sposób każdy zespół może pracować niezależnie, z dedykowanymi osobami zajmującymi się zarządzaniem API, potokami danych, schematami i innymi możliwościami.
Uczciwym, prawdziwym przykładem z portfolio ITRex byłoby wewnętrzne narzędzie cyberbezpieczeństwa, które klient chciał przekształcić w platformę Security-as-a-Service. Mikrousługi w naturalny sposób pasowały do tego projektu, ponieważ architektura monolityczna po prostu nie może zapewnić skalowalności, jakiej rozwiązanie SaaS potrzebuje do obsługi rosnącej liczby klientów, ani elastyczności, aby ewoluować i wyprzedzać hakerów.
Innym przykładowym projektem była platforma Big Data oparta na sztucznej inteligencji dla globalnego sprzedawcy detalicznego. Nasz klient chciał rozwiązania niezależnego od chmury, zbudowanego od podstaw. Od początku było jasne, że platforma będzie obsługiwać tony danych i powinna być zaprojektowana jako skalowalna, aby obsługiwać nowe źródła danych, które zostaną dodane w przyszłości. Musieliśmy również uwzględnić potrzebę budowania komunikacji z wieloma usługami zewnętrznymi. Tak więc uświadomienie sobie korzyści z mikroserwisów w tym projekcie było również naturalną strategią. Architektura mikrousług umożliwiła nam płynne wdrożenie tego złożonego systemu przy użyciu Kubernetes do orkiestracji mikrousług i interfejsów API.
Było też lusterko fitness zasilane sztuczną inteligencją, wyposażone w kamery 3D i model ML, który był dostarczany z czujnikami IoT przymocowanymi do sprzętu użytkownika. Jego główne komponenty, w tym panel administracyjny, aplikacja na Androida i system zarządzania regułami, zostały zbudowane przez różne zespoły na różnych etapach projektu, każdy przy użyciu innego kodu i architektury. Kiedy złożoność obsługi ich wszystkich stała się przytłaczająca, zrozumieliśmy, że musimy zbudować jeden backend do scentralizowanego zarządzania. Przekształciliśmy je w mikroserwisy, przeprojektowując ich kod i tworząc nowe bazy danych. Istniały inne zalety korzystania z podejścia mikrousług, takie jak unikanie duplikowania kodu lub funkcji.
Z naszego doświadczenia wynika, że preferowane jest korzystanie z mikroserwisów, gdy trzeba zarządzać rosnącymi wolumenami danych, obsługiwać złożoność międzyoperacyjną lub upewnić się, że system jest wystarczająco elastyczny, aby ewoluował wraz z firmą.
Przypis końcowy
Rewolucja w zakresie mikrousług rozwija się, ponieważ firmy zaczynają wykorzystywać zalety mikrousług, aby uzyskać przewagę na rynku. Korzyści płynące z mikroserwisów pozwalają organizacjom działać sprawnie i sprawnie w obliczu zakłóceń, które stały się nową normą. Możliwość szybszego wdrażania lepszego oprogramowania sprawia, że są gotowi na wszystko, co nastąpi po „co dalej”. Zanim pójdziesz w ich ślady, ważne jest, abyś wiedział, jakie korzyści z mikroserwisów może mieć Twoja firma i czy kłopoty będą uzasadnione. Poza tym mikroserwisy potrafią zdziałać cuda.
Nadal nie masz pewności, czy Twoja firma powinna dać się nabrać na korzyści płynące z mikroserwisów? Skontaktuj się z konsultantami ITRex. Pomożemy Ci to rozgryźć.
Pierwotnie opublikowany na https://itrexgroup.com 10 stycznia 2022 r.
