DevOps та хмари
Що таке мікросервіси?
Мікросервіси (microservices) — це підхід до архітектури, за якого застосунок складається з кількох невеликих незалежних сервісів. Кожен відповідає за свою частину — оплату, каталог, сповіщення, — розгортається окремо і обмінюється даними з іншими через API.
Головна перевага — незалежність. Команди випускають свої сервіси, не чекаючи одна на одну, кожен сервіс масштабують окремо під його навантаження, а збій одного не обов’язково зупиняє всю систему.
Ціна — складність підтримки. З’являються мережеві затримки, помилки на стиках сервісів, потреба в наскрізному логуванні та узгодженості даних між сервісами. Тому більшість продуктів розумно починати як моноліт і виділяти сервіси, коли для цього є конкретна причина.
Де застосовується
До мікросервісів переходять великі системи з великими командами: маркетплейси, банки, служби доставки, телеком. Каталог, оплата, сповіщення і пошук працюють окремо, розгортаються незалежно і можуть бути написані різними мовами — кожна команда обирає те, що найкраще підходить для її задачі.
За гнучкість платять інфраструктурою. Потрібні контейнери та оркестрація, відстеження запитів між сервісами, централізовані логи, обробка збоїв і чіткі домовленості про обмін даними. Тому нові продукти частіше починають з одного застосунку і розділяють його пізніше, коли спільний код справді заважає.
Приклад
У чорну п’ятницю навантаження зростає лише на каталог і оплату. У мікросервісній архітектурі збільшують потужність саме цих двох сервісів, а решту залишають як є. В одному великому застосунку довелося б збільшувати ресурси для всієї системи.
Часті запитання
Чим мікросервіси відрізняються від моноліту?
Моноліт — це один застосунок, який збирають і розгортають повністю. Мікросервіси — набір окремих сервісів, кожен із власною базою і власним графіком випусків. Моноліт простіше розробляти і підтримувати, а мікросервіси виграють у незалежності команд і точковому масштабуванні.
З чого краще починати новий проєкт?
Майже завжди — з моноліту, але з акуратно розділеними модулями. Поки продукт формується, межі між сервісами змінюються, і якщо зафіксувати їх надто рано, отримаєш усю складність розподіленої системи без її переваг.
Які складнощі з’являються з мікросервісами?
Мережеві запити можуть падати і гальмувати, одна операція охоплює кілька сервісів, логи розкидані по різних системах, а відтворити проблему на своєму комп’ютері значно складніше. Додається і підтримка: моніторинг усіх сервісів, версіонування API, узгоджене розгортання.
Як мікросервіси обмінюються даними?
Найчастіше синхронно через REST або gRPC, коли відповідь потрібна одразу, і асинхронно через черги повідомлень на кшталт Kafka чи RabbitMQ, коли важлива стійкість до тимчасової недоступності сервісу. Зрілі системи зазвичай використовують обидва способи.
Навчання DevOps в OWU
Опануйте професію DevOps-інженера на практичних курсах із менторами та реальними проєктами.
Обрати курс