Close

Microservices: understanding what it is and its benefits

Jeszcze niedawno preferowaną metodą tworzenia aplikacji było stosowanie architektury monolitycznej, stanowiącej pojedynczą, autonomiczną jednostkę. To podejście było z powodzeniem wykorzystywane przez wielu twórców oprogramowania — do czasu, aż na przeszkodzie stanęła rosnąca złożoność aplikacji. Modyfikacja niewielkiej sekcji kodu w systemie monolitycznym wymaga ponownego przeprowadzenia kompilacji i testów całego systemu oraz wdrożenia zupełnie nowej wersji aplikacji.

Wtedy pojawiły się mikrousługi — podejście polegające na dzieleniu systemów oprogramowania na mniejsze jednostki, opracowywane i wdrażane w sposób autonomiczny. Do spopularyzowania architektury mikrousług przyczynił się ruch DevOps, który za cel stawia częste udostępnianie aktualizacji obejmujących nowe funkcje, poprawki błędów i usprawnienia zabezpieczeń. Wielu firmom otworzyło to drogę do opracowania na nowo dotychczas używanych aplikacji przy użyciu współczesnych języków programowania oraz zaktualizowanego zestawu rozwiązań technologicznych.

Mikrousługi to zbiór niewielkich jednostek, które umożliwiają ciągłe dostarczanie i wdrażanie dużych, złożonych aplikacji.

Czym są mikrousługi?


Architektura mikrousług, zwana również po prostu mikrousługami, to podejście do tworzenia aplikacji w formie szeregu niezależnie wdrażanych, zdecentralizowanych, autonomicznie opracowywanych usług. Te usługi są luźno powiązane, wdrażane niezależnie od siebie oraz łatwe w utrzymaniu. 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ść. Mikrousługi stanowią integralną część metodologii DevOps, ponieważ są one podstawą praktyk ciągłego dostarczania, które pozwalają zespołom szybko dostosowywać się do wymagań użytkowników.

Ilustracja mikrousług

Mikrousługa to usługa internetowa odpowiedzialna za jeden element logiki domeny. Na aplikację składa się wiele mikrousług, a każda z nich zapewnia jedną z funkcji domeny. Mikrousługi komunikują się ze sobą poprzez interfejsy API (np. REST lub gRPC), jednak nie wiedzą, co dzieje się wewnątrz innych usług. Taką harmonijną interakcję pomiędzy mikrousługami nazywamy architekturą mikrousług.

Dzięki architekturze mikrousług programiści mogą organizować się w mniejsze zespoły specjalizujące się w różnych usługach, korzystające z różnych rozwiązań technologicznych oraz przeprowadzające niezależne wdrożenia. Przykładowo system Jira jest obsługiwany przez wiele mikrousług, z których każda zapewnia określone możliwości, takie jak wyszukiwanie zgłoszeń, wyświetlanie ich szczegółów, komentowanie, zmienianie statusów i nie tylko.

Cechy mikrousług


Architektura mikrousług nie ma formalnej definicji, jednak istnieje kilka typowych wzorców lub cech, które warto znać.

W architekturze mikrousług każdy komponent można opracowywać, wdrażać, obsługiwać, zmieniać i wdrażać ponownie bez narażania działania innych usług czy integralności aplikacji.

Korzyści płynące z mikrousług


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

Ilustracja wagi

Elastyczne skalowanie

Ponieważ mikrousługi są z założenia rozproszone i mogą być wdrażane w klastrach, umożliwiają dynamiczne skalowanie w poziomie ponad granicami usług. Jeśli obciążenie danej mikrousługi osiągnie maksymalny poziom, można szybko wdrożyć nowe instancje tej usługi do powiązanego klastra, aby ułatwić obsługę zwiększonego zapotrzebowania.

Ilustracja Agile

Agility

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

Ilustracja zestawu narzędzi

Elastyczność technologii

Architektury mikrousług nie muszą się opierać na ustalonym podejściu z jednym łańcuchem narzędzi — zespoły mogą stosować takie narzędzia, jakie chcą.

Ilustracja wieży z klocków

Częste wydania

Jedną z głównych zalet mikrousług są częste i szybsze cykle wydawania. Mikrousługi stanowią kluczowy element ciągłej integracji i ciągłego dostarczania (CI/CD), umożliwiając zespołom eksperymentowanie z nowymi funkcjami i wycofywanie ich, jeśli coś pójdzie nie tak. Ułatwia to aktualizację kodu i przyspiesza wprowadzanie nowych funkcji na rynek.

Wyzwania związane z mikrousługami


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

Niekontrolowany rozwój

Rezygnacja z architektury monolitycznej na rzecz mikrousług oznacza zwiększenie stopnia złożoności. Pojawia się więcej usług w większej liczbie miejsc, a do tego pracuje nad nimi więcej zespołów. Z tego powodu trudno jest określić, jak poszczególne komponenty są ze sobą powiązane, kto jest właścicielem danego komponentu oprogramowania i jak uniknąć negatywnego wpływu na działanie zależnych komponentów. Brak zarządzania niekontrolowanym rozwojem skutkuje wolniejszym tempem prac programistycznych i gorszą wydajnością operacyjną. W miarę rozwoju systemu konieczny staje się doświadczony zespół operacyjny, który będzie zarządzać ponownymi wdrożeniami i częstymi zmianami architektury.

Brak wyraźnej odpowiedzialności

W przypadku architektury mikrousług nie zawsze jest jasne, kto odpowiada za co. Zespół DevOps może korzystać z połączenia interfejsów API, bibliotek komponentów, narzędzi do monitorowania oraz obrazów Docker pozwalających użytkownikom wdrożyć aplikację. Ważny jest wgląd w informacje o komponentach, łącznie z ich właścicielami, zasobami i zmieniającymi się zależnościami między komponentami. Konieczna jest precyzyjna komunikacja i koordynacja pomiędzy licznymi zespołami, aby każda osoba biorąca udział w pracach mogła z łatwością dotrzeć do wiedzy, która jest potrzebna do zrozumienia produktu.

Wykładniczy wzrost kosztów infrastruktury

Każda nowa mikrousługa dodana do wdrożenia produkcyjnego generuje własny koszt związany z zestawem testów, podręcznikami wdrażania, infrastrukturą hostingową, narzędziami do monitorowania i nie tylko.

Zwiększone obciążenie organizacyjne

Aby koordynować wprowadzanie aktualizacji i użycie interfejsów przez zespoły zajmujące się architekturą mikrousług, potrzebny jest dodatkowy poziom komunikacji i współpracy.

Debugowanie

Debugowanie aplikacji obejmującej wiele mikrousług, z których każda ma swój zestaw dzienników, może być nie lada wyzwaniem. Jeden proces biznesowy może działać na wielu komputerach w różnym czasie, co rodzi dodatkowe komplikacje.

Reagowanie na incydenty

Ważne jest, aby mieć dane umożliwiające odpowiadanie na incydenty związane z mikrousługami, np. kto korzysta z danej mikrousługi, gdzie i w jaki sposób została ona wdrożona oraz z kim należy się kontaktować w razie problemów.

Mikrousługi i DevOps: para idealna


Z uwagi na zwiększony stopień złożoności i zależności mikrousług praktyki DevOps dotyczące automatyzacji cyklu życia, wdrażania i monitorowania uznawane są za integralną część infrastruktury mikrousług. Właśnie dlatego mikrousługi często uważa się za pierwszy krok do wprowadzenia kultury DevOps, którego skutkami są:

  • Automatyzacja
  • Zwiększona skalowalność
  • Możliwość zarządzania
  • Agility
  • Szybsze dostarczanie i wdrażanie

Najważniejsze technologie i narzędzia w przypadku architektury mikrousług


Kontener to po prostu opakowanie aplikacji wraz z wszystkimi zależnościami, które umożliwia jej łatwe i spójne wdrażanie. Ponieważ kontenery nie potrzebują własnego systemu operacyjnego, są mniejsze i prostsze od tradycyjnych maszyn wirtualnych. Można je szybciej uruchamiać i wyłączać, dzięki czemu idealnie spełniają potrzeby mniejszych usług używanych w ramach architektury mikrousług.

Wraz ze wzrostem liczby usług i kontenerów pojawia się konieczność zarządzania dużymi grupami tych ostatnich. Docker to popularna platforma konteneryzacji i środowisko uruchomieniowe, które pomaga programistom kompilować, wdrażać i uruchamiać kontenery. Sam Docker nie wystarczy jednak do bezproblemowego uruchamiania kontenerów i zarządzania nimi na dużą skalę. Pomocny w takim przypadku jest Kubernetes oraz inne rozwiązania, takie jak Docker Swarm, Mesos czy HashiCorp Nomad.

Konteneryzacja i wdrażanie kontenerów to nowy model infrastruktury rozproszonej. Docker i Kubernetes opakowują usługę w kompletny kontener, który można szybko wdrożyć i wycofać. Te narzędzia infrastruktury stanowią uzupełnienie architektury mikrousług. Przy użyciu systemu zarządzania kontenerami można konteneryzować mikrousługi, z łatwością je wdrażać oraz zarządzać nimi.

Czym są mikrousługi?


Architektura mikrousług, zwana również po prostu mikrousługami, to podejście do tworzenia aplikacji w formie szeregu niezależnie wdrażanych, zdecentralizowanych, autonomicznie opracowywanych usług. Te usługi są luźno powiązane, wdrażane niezależnie od siebie oraz łatwe w utrzymaniu. 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ść. Mikrousługi stanowią integralną część metodologii DevOps, ponieważ są one podstawą praktyk ciągłego dostarczania, które pozwalają zespołom szybko dostosowywać się do wymagań użytkowników.

Ilustracja mikrousług

Mikrousługa to usługa internetowa odpowiedzialna za jeden element logiki domeny. Na aplikację składa się wiele mikrousług, a każda z nich zapewnia jedną z funkcji domeny. Mikrousługi komunikują się ze sobą poprzez interfejsy API (np. REST lub gRPC), jednak nie wiedzą, co dzieje się wewnątrz innych usług. Taką harmonijną interakcję pomiędzy mikrousługami nazywamy architekturą mikrousług.

Dzięki architekturze mikrousług programiści mogą organizować się w mniejsze zespoły specjalizujące się w różnych usługach, korzystające z różnych rozwiązań technologicznych oraz przeprowadzające niezależne wdrożenia. Przykładowo system Jira jest obsługiwany przez wiele mikrousług, z których każda zapewnia określone możliwości, takie jak wyszukiwanie zgłoszeń, wyświetlanie ich szczegółów, komentowanie, zmienianie statusów i nie tylko.

Przyszłość mikrousług


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Zarządzanie mikrousługami za pomocą rozwiązania Compass

Podczas pracy z architekturą mikrousług rozwiązanie Atlassian Compass pozwala zarządzać złożonością skalowanej architektury rozproszonej. Jest to rozszerzalna platforma środowiska programistycznego, która w centralnej lokalizacji z możliwością wyszukiwania łączy niepowiązane informacje o wynikach prac inżynierskich i współpracy zespołowej. Oprócz pomocy w uporaniu się ze wzrostem liczby mikrousług dzięki katalogowi komponentów rozwiązanie Compass ułatwia ustalenie najlepszych praktyk i pomiar kondycji oprogramowania przy użyciu kart wyników oraz zapewnia dane i analizy dotyczące całego zestawu narzędzi DevOps za pomocą rozszerzeń opartych na platformie Atlassian Forge.

Compass — ilustracja mikrousług