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.
Wypróbuj Compass bezpłatnie
Ulepsz środowisko programistyczne, skataloguj wszystkie usługi i popraw kondycję oprogramowania.
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.
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.
Następny temat
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.