Микросервисы — что это, как работают, плюсы и минусы | Глоссарий FREEHOSTING

Microservices

Микросервисы
Microservices — Архитектурный стиль, при котором приложение разбивается на набор независимых сервисов. Каждый сервис отвечает за свою бизнес-функцию, разворачивается отдельно и общается с остальными через сетевые протоколы — обычно HTTP/REST, gRPC или брокер сообщений.

Определение простыми словами

Микросервисы — это способ собрать большое приложение из маленьких самостоятельных кусков. Каждый кусок (сервис) живёт в своём процессе, имеет свою базу данных и обновляется независимо от соседей. Если один сервис падает, остальные продолжают работать. Если нагрузка выросла — масштабируется только нужный сервис, а не весь продукт целиком.

Чаще всего сервисы упаковывают в 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 сервисов.