Architektura mikrousług

Architektura mikrousług zapewnia wysoce skalowalny i rozproszony nowoczesny system


Modernizacja aplikacji w dzisiejszym świecie często oznacza migrację do aplikacji natywnych dla chmury, zbudowanych jako mikrousługi. Są one następnie wdrażane przy użyciu technologii kontenerowych, takich jak Docker czy Kubernetes. Ten krok mają już za sobą Netflix, Atlassian oraz bardzo wiele innych organizacji. Wynika to stąd, że architektura mikrousług zwiększa skalowalność, przyspiesza prace programistyczne oraz usprawnia iterację usług.

W ramach architektury mikrousług aplikacja jest dzielona na szereg niezależnie wdrażanych usług komunikujących się poprzez interfejsy API. Pozwala to na niezależne wdrażanie i skalowanie pojedynczych usług. To podejście umożliwia szybkie i częste dostarczanie dużych, złożonych aplikacji. W odróżnieniu od aplikacji monolitycznej architektura mikrousług umożliwia zespołom szybsze wdrażanie nowych funkcji oraz wprowadzanie zmian bez konieczności pisania od nowa dużych fragmentów istniejącego kodu.

Najważniejsze cechy architektury mikrousług to:

Wiele usług składowych

Mikrousługi składają się z pojedynczych, luźno powiązanych usług składowych, które można opracowywać, wdrażać, obsługiwać, zmieniać i wdrażać ponownie bez narażania działania innych usług czy integralności aplikacji. Umożliwia to szybkie i łatwe wdrażanie poszczególnych funkcji aplikacji.

Duże możliwości utrzymania i testowania

Mikrousługi pozwalają zespołom eksperymentować z nowymi funkcjami i wycofywać je w razie problemów. Ułatwia to aktualizację kodu i przyspiesza wprowadzanie nowych funkcji na rynek. Upraszcza również proces wyodrębniania i usuwania błędów oraz usterek w poszczególnych usługach.

Odpowiedzialność małych zespołów

Opracowywaniem usługi w ramach architektury mikrousług zajmują się zazwyczaj małe, niezależne zespoły, co ułatwia stosowanie praktyk Agile i DevOps. Zespoły mogą pracować niezależnie i szybko, co skraca cykle prac programistycznych.

Organizacja wokół obszarów działalności

W przypadku podejścia opartego na mikrousługach usługi są organizowane wokół obszarów działalności. Zespoły mają charakter interdyscyplinarny i dysponują pełnym zakresem umiejętności wymaganych do opracowywania pojedynczych funkcji.

Zautomatyzowana infrastruktura

Zespoły opracowujące i utrzymujące mikrousługi korzystają zazwyczaj z praktyk automatyzacji infrastruktury, takich jak ciągła integracja (CI), ciągłe dostarczanie (CD) i ciągłe wdrażanie (również CD — od „continuous deployment”). Umożliwia to zespołom tworzenie i wdrażanie poszczególnych usług w sposób niezależny, bez wpływu na inne zespoły. Ponadto zespoły mogą dzięki temu wdrożyć nową wersję usługi tak, aby była dostępna równolegle z wersją poprzednią.

Przykład architektury mikrousług


Jako przykład weźmy hipotetyczny projekt oprogramowania e-commerce. Poniższy schemat przedstawia witrynę e-commerce, w ramach której aplikacja internetowa i aplikacja mobilna wchodzą w interakcje z wieloma mikrousługami, a każda z tych ostatnich zapewnia określone możliwości.

Współczesne aplikacje internetowe działają w przeglądarkach i często są udostępniane za pośrednictwem sieci dostarczania zawartości (CDN). Zaletą sieci CDN jest fakt, że aplikacje internetowe są dystrybuowane na serwery na całym świecie, dzięki czemu mogą być szybko pobierane przez przeglądarki internetowe. Sieci CDN są wykorzystywane również do dostarczania zasobów multimedialnych, takich jak obrazy, pliki dźwiękowe i filmy. W omawianym przykładzie obrazy i nagrania wideo przedstawiające sprzedawane towary są udostępniane za pośrednictwem sieci CDN.

Schemat mikrousług frontendu witryny internetowej

Mikrousługi przedstawione na schemacie to:

Usługa konta

Usługa konta dostarcza informacji o koncie klienta, takich jak jego adres i dane do płatności.

Usługa zapasów

Zapewnia aktualne informacje o stanie zapasów towarów, które klient może kupić.

Usługa koszyka

Klient korzysta z niej, aby wybrać spośród dostępnych towarów te, które chce kupić.

Usługa płatności

Klienci płacą za towary znajdujące się w koszyku.

Usługa wysyłki

Umożliwia zaplanowanie pakowania i dostawy zakupionych towarów.

Aplikacje komunikują się z mikrousługami poprzez interfejsy API REST udostępniane przez każdą z mikrousług. Brama interfejsu API pozwala aplikacjom działać w oparciu o interfejsy API udostępniane przez mikrousługi i umożliwia wymianę tych mikrousług na inne korzystające z tego samego interfejsu API.

Każda mikrousługa składa się z usługi i bazy danych. Usługi obsługują interfejs API REST, stosują logikę biznesową i przechowują dane w bazie danych. W przypadku mikrousług zasoby (takie jak bazy danych i kolejki) są od siebie odizolowane zgodnie z kontraktem 12 Factor App.

Jak tworzyć mikrousługi


Dla wielu organizacji punktem wyjścia jest architektura monolityczna. Kolejne kroki to podział bazy kodu na wiele usług, wdrożenie właściwych wzorców, które pozwolą sprawnie obsługiwać awarie i przywracać działanie usług po wystąpieniu problemów z siecią, rozwiązanie kwestii spójności danych, monitorowanie obciążenia usług i wiele więcej. To jednak tylko strona techniczna. Trzeba będzie również na nowo zorganizować zespoły i najprawdopodobniej wprowadzić kulturę DevOps.

Później czas na najtrudniejsze: podział architektury monolitycznej na mikrousługi. Reorganizacja monolitycznego schematu bazy danych może być delikatną operacją. Ważne, aby precyzyjnie wskazać zbiory danych potrzebne poszczególnym usługom i pokrywające się obszary. Ciągłe dostarczanie pomaga zmniejszyć ryzyko nieudanych wydań oraz zapewnić zespołowi możliwość skoncentrowania się na tworzeniu i utrzymaniu aplikacji, a nie jej żmudnym wdrażaniu.

Porównanie mikrousług z architekturą monolityczną


Architektura monolityczna to tradycyjny model oprogramowania, tworzonego jako jednolita jednostka, która jest samodzielna i niezależna od innych aplikacji. Architektura mikrousług jest w zasadzie odwrotnością monolitu, ponieważ opiera się na szeregu niezależnie wdrażanych usług. Rozwiązania monolityczne mogą być preferowane na wczesnym etapie projektu ze względu na łatwość zarządzania kodem, analizy i wdrażania. Gdy jednak aplikacja monolityczna staje się duża i złożona, utrudnia to jej skalowanie, ciągłe wdrażanie oraz wprowadzanie aktualizacji.

Aplikacja monolityczna jest tworzona jako pojedyncza, niepodzielna jednostka, natomiast w przypadku mikrousług jednostka ta jest podzielona na zbiór niezależnych elementów składających się na większą całość. Aplikacja jest tworzona jako szereg niezależnie wdrażanych usług, zdecentralizowanych i opracowywanych w sposób autonomiczny.

Architektura rozproszona


Mikrousługi należą do kategorii systemów rozproszonych. System rozproszony to z definicji zbiór programów komputerowych, które wykorzystują zasoby obliczeniowe w wielu oddzielnych węzłach obliczeniowych, aby osiągnąć wspólny cel. Systemy rozproszone często pomagają poprawić niezawodność i wydajność systemu oraz ułatwiają skalowanie.

Węzły systemu rozproszonego zapewniają nadmiarowość — w przypadku awarii jednego węzła jego funkcję mogą przejąć inne. Każdy węzeł można skalować w poziomie i w pionie, co zwiększa wydajność. Jeśli system jest poddawany dużemu obciążeniu, można dodać kolejne węzły, aby pomóc w jego przyjęciu.

Porównanie platform Kubernetes i Docker


Docker to komercyjna platforma konteneryzacji i środowisko uruchomieniowe, które pomaga programistom kompilować, wdrażać i uruchamiać kontenery. Chociaż platforma Docker zapewnia wydajny sposób pakowania i dystrybuowania skonteneryzowanych aplikacji, uruchamianie kontenerów przy jej użyciu i zarządzanie nimi nie jest łatwe.

Kubernetes to popularna platforma open source do orkiestracji systemów uruchomieniowych kontenerów w klastrze zasobów sieciowych. Można jej używać z platformą Docker lub bez niej. O ile Docker to środowisko uruchomieniowe kontenerów, to Kubernetes jest platformą do uruchamiania kontenerów z wielu środowisk uruchomieniowych i zarządzania nimi.

Zarządzanie konfiguracją


Zarządzanie konfiguracją oprogramowania to proces polegający na zarządzaniu, porządkowaniu, śledzeniu i monitorowaniu zmian w metadanych konfiguracji systemów oprogramowania. Jest powszechnie stosowany razem z kontrolą wersji i infrastrukturą CI/CD.

Zarządzanie konfiguracją ułatwia zespołom inżynierskim budowanie wydajnych i stabilnych systemów dzięki wykorzystaniu narzędzi, które automatycznie zarządzają aktualizacjami danych konfiguracji i monitorują je. Pomaga lepiej zarządzać niekontrolowanym rozwojem oprogramowania w architekturze mikrousług, tworząc „pojedyncze źródło rzetelnych informacji” z centralną lokalizacją konfiguracji.

Chandler Harris
Chandler Harris

Chandler Harris jest strategiem marketingowym i autorem tekstów w Atlassian. Jego prace ukazały się już w ponad 40 różnych publikacjach dotyczących takich tematów, jak technologia, nauki ścisłe, biznes, finanse i edukacja.


Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat tworzenia oprogramowania oraz otrzymywać bieżące aktualizacje dotyczące rozwiązania Compass.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up