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.
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.

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ć.
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:

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.

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.

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ą.

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.
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.

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.