Jak działa architektura mikrousług

Photo of author

By maciekx

Architektura oparta na mikrousługach to podejście do projektowania aplikacji, które charakteryzuje się dużą elastycznością, łatwością skalowania i modułową strukturą. Zasadniczo, polega ono na rozbiciu rozbudowanych programów na mniejsze, niezależne elementy, z których każdy realizuje konkretne zadanie.

Taka architektura daje możliwość niezależnego tworzenia, aktualizowania, testowania, wdrażania i utrzymywania każdego z tych elementów. W praktyce, programiści mogą tworzyć aplikacje, traktując je jako zbiór kilku autonomicznych usług.

Większość współczesnych aplikacji działających w chmurze to doskonałe przykłady wykorzystania mikrousług, często budowanych przy użyciu kontenerów. Kontenery zawierają w sobie cały kod, biblioteki, pliki wykonywalne oraz inne zasoby niezbędne do funkcjonowania mikrousługi. Dzięki temu, twórcy oprogramowania mogą skoncentrować się na logice aplikacji, nie martwiąc się o zależności środowiskowe.

źródło: microsoft.com

Wiele znanych firm, takich jak Netflix, Amazon, Uber czy eBay, przeszło z tradycyjnych aplikacji monolitycznych na architekturę mikrousług. Ta zmiana przełożyła się na bardziej intuicyjne aplikacje dla użytkowników oraz niezawodne i udoskonalone usługi.

Przegląd

W dzisiejszych czasach, kiedy firmy nieustannie poszukują sposobów na utrzymanie konkurencyjności w dynamicznym i nieprzewidywalnym otoczeniu, wzrasta potrzeba optymalizacji procesów. Twórcy oprogramowania w szczególności poszukują nowych metod projektowania i zarządzania aplikacjami, dodawania nowych funkcji i wprowadzania innowacji.

Dlatego też, coraz częściej odchodzi się od architektury monolitycznej na rzecz architektury mikrousług. Umożliwia ona szybsze i bardziej niezawodne tworzenie nowych aplikacji i wdrażanie aktualizacji. Ponadto, małe, wyspecjalizowane zespoły mogą regularnie aktualizować oprogramowanie, pracując w sposób luźno powiązany.

Architektura mikrousług wspiera ciągły proces rozwoju i wdrażania oprogramowania. Każdy zespół ma możliwość wprowadzania niewielkich zmian i szybkiego testowania nowych funkcji dzięki zautomatyzowanemu procesowi wdrażania.

Źródło: aws.amazon.com

Idealnie, ta architektura eliminuje wiele problemów i ograniczeń związanych z architekturą monolityczną. Poprzez podział dużych i złożonych aplikacji na mniejsze komponenty, ułatwia tworzenie rozbudowanych systemów jako zestawu niezależnych podsystemów.

Jak działa architektura mikrousług

Architektura mikrousług to podejście, w którym aplikacje są projektowane jako zbiór niezależnych, luźno powiązanych usług. Każda usługa, zarządzana przez mały, wyspecjalizowany zespół, działa samodzielnie i koncentruje się na konkretnym obszarze biznesowym.

Zespoły mogą projektować, wdrażać, modyfikować, testować i konserwować poszczególne usługi niezależnie, bez wpływu na pozostałe. W przeciwieństwie do aplikacji monolitycznej, gdzie wszystkie komponenty są ściśle ze sobą powiązane, architektura mikrousług rozdziela funkcjonalności na odrębne jednostki.

Każda mikrousługa realizuje określone zadanie, np. logowanie, fakturowanie, wyszukiwanie czy przesyłanie wiadomości. Połączenie wielu mikrousług tworzy kompletną aplikację o szerokiej funkcjonalności. Chociaż niektóre mikrousługi działają niezależnie, w wielu przypadkach dwie lub więcej z nich współpracuje, aby wykonać bardziej skomplikowane zadanie.

W architekturze mikrousług, programiści mogą podzielić dużą aplikację na mniejsze części w oparciu o wymagania biznesowe lub funkcjonalne (pionowo). W efekcie powstają mniejsze, niezależnie wdrażane komponenty.

Niektóre operacje mogą być obsługiwane przez pojedynczą mikrousługę. Jednak bardziej skomplikowane zadania są rozdzielane pomiędzy wiele z nich. W takim przypadku, komunikacja między usługami odbywa się za pomocą lekkich, synchronicznych lub asynchronicznych wywołań sieciowych, niezależnych od języka, takich jak REST, gRPC lub przesyłanie komunikatów.

Co istotne, klienci nie komunikują się bezpośrednio z mikrousługami. Zamiast tego, wykorzystują bramę API, która przekierowuje żądanie do właściwej usługi.

Charakterystyka architektury mikrousług

Każda mikrousługa lub komponent aplikacji działa jako niezależna, luźno powiązana usługa z własną logiką i zależnościami. Zespoły mogą modyfikować, testować, aktualizować, wdrażać i skalować mikrousługę bez wpływu na inne usługi w tej samej aplikacji.

Do kluczowych cech architektury mikrousług należą:

  • Aplikacja składa się z wielu odseparowanych, niezależnie wdrażanych procesów. System może jednak wywoływać wiele mikrousług w celu przetworzenia pojedynczego żądania użytkownika.
  • Architektura umożliwia skalowanie zarówno wertykalne (dodawanie zasobów do istniejącej usługi), jak i horyzontalne (dodawanie nowych instancji usługi).
  • Mikrousługi mają jasno określone granice i komunikują się z innymi usługami za pośrednictwem połączeń sieciowych, takich jak RPC czy komunikaty, a nie wewnętrznie.
  • Składają się z prostych, wyspecjalizowanych jednostek, z których każda jest odpowiedzialna za konkretną funkcję lub problem biznesowy. Zazwyczaj, każdy zespół programistów ma specjalistyczną wiedzę w zakresie określonego komponentu.
  • Wraz z rosnącym zapotrzebowaniem na nowe funkcjonalności, programiści mogą dodawać nowy kod, co zwiększa złożoność aplikacji. W takim przypadku, zespoły mogą rozdzielić je na bardziej niezależne i łatwiejsze w zarządzaniu usługi.

Monolityczne vs. Architektury mikrousług

W architekturze monolitycznej, w przypadku wzrostu zapotrzebowania na jedną z funkcji, konieczne jest skalowanie całej architektury. Dodawanie nowych funkcjonalności lub modyfikacja istniejących jest skomplikowana, czasochłonna i kosztowna.

Dodatkowo, awaria jednego komponentu może wpłynąć na działanie całej aplikacji, szczególnie gdy komponenty są ze sobą ściśle powiązane.

Do głównych wad aplikacji monolitycznych należą:

  • Niska niezawodność, ponieważ awaria jednego elementu może zatrzymać działanie całej aplikacji.
  • Niewielka elastyczność.
  • Trudności w skalowaniu.
  • Powolny proces rozwoju, gdyż każda funkcja musi zostać ukończona przed rozpoczęciem kolejnej.
  • Niedostosowanie do dużych i złożonych aplikacji ze względu na brak elastyczności i powolny rozwój.

W architekturze mikrousług, aplikacje budowane są z różnych, niezależnych komponentów. Każda funkcja lub mikrousługa działa jako odrębna usługa, a dodanie lub zmiana funkcjonalności nie wymaga aktualizacji całej architektury. Zamiast tego, aktualizowane są tylko wybrane elementy.

Źródło: ibm.com

Umożliwia to aktualizowanie, wdrażanie, skalowanie i uruchamianie każdej usługi niezależnie od potrzeb biznesowych. W przypadku awarii jednej usługi, jej wpływ jest mniejszy niż w aplikacji monolitycznej, gdzie awaria powoduje problemy z całym systemem.

Korzyści z architektury mikrousług

Głównymi zaletami architektury mikrousług są:

# 1. Łatwe i elastyczne skalowanie usług

Architektura mikrousług pozwala na niezależne skalowanie poszczególnych usług, aby dostosować je do specyficznych wymagań.

Dzięki temu, zespoły nie muszą skalować całej aplikacji, a jedynie te elementy, które są najbardziej obciążone.

#2. Lepsza odporność

Ponieważ mikrousługi są niezależne i samowystarczalne, problem z jedną z nich powoduje jedynie ograniczenie funkcjonalności, a nie awarię całego systemu. Pozostałe usługi działają poprawnie, a jedynie funkcja dotknięta problemem jest niedostępna.

W architekturze monolitycznej, problem z jednym komponentem może spowodować awarię całej aplikacji.

#3. Kod wielokrotnego użytku

Programiści mogą używać pewnych modułów do realizacji wielu zadań. Na przykład, mikrousługa wykonująca określoną funkcję może stanowić element składowy innej usługi.

Dzięki temu, tworzenie nowych funkcjonalności jest szybsze, gdyż nie wymaga pisania kodu od zera, a jedynie wykorzystanie istniejących komponentów.

Inne korzyści to:

  • Wykorzystanie nowoczesnych technologii, takich jak kontenery, przetwarzanie bezserwerowe i DevOps.
  • Umożliwienie równoległego tworzenia i wdrażania wielu usług.
  • Możliwość testowania, rozwiązywania problemów, aktualizacji i usuwania wybranych funkcji bez wpływu na pozostałe.
  • Krótsze cykle rozwoju i szybsze wdrożenia.
  • Mniejsze zespoły programistyczne.

Wady architektury mikrousług

Architektura mikrousług, choć ma wiele zalet, takich jak możliwość szybkiego i niezawodnego tworzenia złożonych aplikacji, ma również pewne ograniczenia.

  • W dużych aplikacjach pojawiają się złożone problemy związane z komunikacją między mikrousługami.
  • Zarządzanie bezpieczeństwem staje się trudniejsze wraz z wzrostem liczby mikrousług i rozmiaru aplikacji. Zastosowanie tej architektury prowadzi do rozproszonego systemu z większą powierzchnią ataku, złożonymi regułami dostępu i dużym ruchem sieciowym, który trzeba monitorować. Występuje wiele odsłoniętych portów, interfejsów API i innych komponentów, których tradycyjne zabezpieczenia mogą nie chronić. Z tego powodu mikrousługi mogą być narażone na ataki DDoS, man-in-the-middle, cross-site scripting i inne.
  • Rozwiązywanie problemów w dużych aplikacjach staje się bardziej skomplikowane. Duża liczba elementów komunikujących się ze sobą może powodować dodatkowy narzut związany z ruchem sieciowym i wywołaniami RPC.
  • Duża liczba usług, procesów, kontenerów, baz danych i innych elementów wprowadza dodatkową złożoność.
  • Zapewnienie bezpieczeństwa transakcji w rozbudowanych systemach jest wyzwaniem.

Źródło: developerzy.redhat.com

Architektura mikrousług umożliwia mniejszym zespołom tworzenie indywidualnych, niezależnych usług. Aby zachować konkurencyjność, konieczne jest korzystanie z różnorodnych narzędzi wspomagających platformę, automatyzację powtarzalnych zadań oraz przyspieszenie wdrażania aplikacji.

Narzędzia do mikrousług różnią się funkcjonalnościami i możliwościami. Ich wybór zależy od konkretnych potrzeb i celów programistów.

Do najczęściej używanych narzędzi należą:

  • Systemy operacyjne, takie jak Linux i Windows.
  • Języki programowania – Spring Boot, Elixir, Java, Golang, Python, Node JS.
  • Narzędzia do zarządzania i testowania API – API Fortress, Postman, Tyk.
  • Narzędzia do przesyłania wiadomości – RabbitMQ, Amazon Simple Queue Service (SQS), Apache Kafka, Google Cloud Pub/Sub.
  • Zestawy narzędzi – Seneca, fabric8, Google Cloud Functions.
  • Frameworki architektoniczne – Kong, Goa, Helidon, Quarkus, Molecular.
  • Narzędzia do orkiestracji – Conductor, Kubernetes, Azure Kubernetes Service (AKS), Apache Mesos, Amazon Elastic Container Service.
  • Narzędzia monitorujące – Logstash, Graylog Elastic Stack, Middleware.
  • Narzędzia bezserwerowe – Kubeless, Claudia, Apache Openwhisk.
  • Przypadki użycia architektury mikrousług

    Mikrousługi znajdują zastosowanie w różnych branżach i aplikacjach, gdzie przyczyniają się do zwiększenia wydajności i efektywności. Poniżej przedstawiono niektóre z popularnych przypadków użycia:

    # 1. Strumieniowe przesyłanie danych

    W przypadku potrzeby strumieniowego przesyłania i przetwarzania dużych ilości danych z wielu źródeł, architektura mikrousług może pomóc w zwiększeniu wydajności i efektywności procesów.

    #2. Skalowalne aplikacje internetowe

    Aplikacje internetowe, które tradycyjnie budowane były jako monolity, mogą zyskać na skalowalności i wydajności dzięki zastosowaniu architektury mikrousług.

    #3. Aplikacje Internetu Rzeczy (IoT)

    Twórcy aplikacji IoT mogą wykorzystać architekturę mikrousług do tworzenia małych, niezależnych aplikacji, które łatwo wdrożyć i zarządzać.

    ETL (Extract, Transform, Load) to technologia, która pobiera dane z wielu źródeł, przekształca je do wymaganej postaci i ładuje do innego magazynu lub bazy danych. Architektura mikrousług może usprawnić skalowalność i wydajność takich procesów.

    Przykłady firm wykorzystujących architekturę mikrousług

    Do firm, które z powodzeniem wdrożyły architekturę mikrousług należą:

    Amazon

    Amazon jest jednym z pionierów w stosowaniu architektury mikrousług. Wraz z rozwojem firmy i wzrostem bazy klientów, monolityczna aplikacja zaczęła sprawiać problemy.

    W odpowiedzi na te wyzwania, Amazon przeszedł na architekturę mikrousług, co ułatwiło konserwację, dodawanie nowych funkcji i utrzymanie poszczególnych usług, zapobiegając tym samym całkowitym przestojom.

    Oprócz korzystania z mikrousług w swoim serwisie zakupowym, Amazon oferuje również infrastrukturę Amazon Web Services (AWS), która umożliwia firmom tworzenie i zarządzanie mikrousługami.

    Uber

    Początkowo Uber bazował na aplikacji monolitycznej, która sprawdzała się w początkowej fazie rozwoju firmy. Jednak, wraz z wejściem na nowe rynki i regiony, aplikacja nie była w stanie skutecznie obsługiwać rosnącej liczby użytkowników.

    W celu zapewnienia niezawodnych usług, Uber zdecydował się na wdrożenie architektury mikrousług dla niektórych funkcji, takich jak zarządzanie podróżami i pasażerami.

    źródło: uber.com

    Netflix

    Dzięki zastosowaniu architektury mikrousług, Netflix był w stanie przezwyciężyć problemy ze skalowalnością, które pojawiły się wraz ze wzrostem bazy klientów.

    Obecnie Netflix wykorzystuje ponad 500 mikrousług działających w chmurze, które przetwarzają około 2 miliardów żądań dziennie. Oprócz poprawy niezawodności i dostępności usług, architektura mikrousług pomogła również obniżyć koszty strumieniowania wideo.

    Ostatnie słowa

    Architektura mikrousług ma wiele zalet w porównaniu do systemów monolitycznych, takich jak szybsze wdrażanie aplikacji, duża elastyczność i skalowalność, wysoka odporność i inne.

    Ma ona jednak również pewne wady i nie zawsze jest odpowiednia. Może okazać się nieopłacalna w przypadku mniejszych aplikacji.

    Ponadto, wraz ze wzrostem rozmiarów i złożoności aplikacji, tworzenie, wdrażanie i testowanie poszczególnych elementów staje się trudniejsze i bardziej kosztowne, szczególnie gdy są one rozproszone w różnych chmurach i środowiskach sieciowych.

    Dlatego też, przed wdrożeniem tej architektury, należy dokładnie przeanalizować jej zalety i wady.

    Zachęcamy również do zapoznania się z najlepszymi rozwiązaniami do zarządzania API dla małych i dużych firm.


    newsblog.pl