Определение простыми словами
Микросервисы — это способ собрать большое приложение из маленьких самостоятельных кусков. Каждый кусок (сервис) живёт в своём процессе, имеет свою базу данных и обновляется независимо от соседей. Если один сервис падает, остальные продолжают работать. Если нагрузка выросла — масштабируется только нужный сервис, а не весь продукт целиком.
Чаще всего сервисы упаковывают в Docker-контейнеры и оркестрируют через Kubernetes. Между собой они общаются по сети через REST, gRPC или очереди сообщений (RabbitMQ, Kafka).
Сравнение
| Критерий | Монолит | Микросервисы |
|---|---|---|
| Деплой | Целиком | Каждый сервис отдельно |
| База данных | Одна общая | Своя на сервис |
| Масштабирование | Всё приложение | Точечное по узкому месту |
| Стек технологий | Один на проект | Свободный выбор на сервис |
| Сложность инфраструктуры | Низкая | Высокая (сеть, мониторинг, трейсинг) |
| Порог входа в команду | Низкий | Требует DevOps-зрелости |
Кейсы использования
- Маркетплейсы и e-commerce: каталог, корзина, оплата, доставка — отдельные сервисы с разной нагрузкой.
- Стриминговые сервисы: каталог контента, рекомендации, биллинг и плеер развязаны.
- Финтех: платёжный шлюз, антифрод и личный кабинет можно обновлять независимо без простоев.
- Гейм-бэкенды: матчмейкинг, чат и лидерборды масштабируются по своей метрике.
- Негатив: маленький стартап с командой 2–3 человека и потоком 10 запросов в секунду — микросервисы добавят больше боли (сеть, наблюдаемость, согласованность данных), чем пользы. Монолит на одном сервере дешевле и проще.
Технические детали
Минимальный пример docker-compose с двумя сервисами и общей сетью.
# docker-compose.yml — два независимых сервиса
version: '3.9'
services:
users-svc:
image: registry.local/users:1.4.2
ports:
- "8081:8080"
environment:
DB_DSN: postgres://users_db:5432/users
orders-svc:
image: registry.local/orders:2.0.1
ports:
- "8082:8080"
environment:
USERS_API: http://users-svc:8080
DB_DSN: postgres://orders_db:5432/orders
# Запуск и просмотр статуса
docker compose up -d
docker compose ps
# Точечный апдейт одного сервиса без перезапуска соседа
docker compose pull orders-svc
docker compose up -d --no-deps orders-svc
В продакшене связку обычно дополняют Nginx или Traefik как ingress, Prometheus для метрик и Jaeger для распределённого трейсинга.
🔥 Где это применяется
Частые вопросы
Чем микросервисы отличаются от SOA?
Идея похожа — деление по бизнес-функциям. Но SOA опирается на тяжёлый ESB и общие схемы данных, а микросервисы — на лёгкие протоколы (HTTP, gRPC), независимые БД и принцип «один сервис — одна команда».
Когда не стоит уходить в микросервисы?
Если команда меньше 5–7 человек, а нагрузка укладывается в один сервер — монолит дешевле в разработке и эксплуатации. Микросервисы оправданы, когда монолит начинает тормозить релизы и масштабирование.
Сколько микросервисов считается нормой?
Жёсткой нормы нет. Ориентир — один сервис на одну зону ответственности (домен) и одну команду. Для среднего бизнеса это обычно 10–30 сервисов.