Микросервисы

Что это такое

Архитектура микросервисов делит систему на сервисы, которые развёртываются независимо, каждый владеет своими данными и общается с остальными по сети. Определяющее свойство — не размер, а независимость: команда может изменить и выпустить один сервис, не согласовывая выпуск остальных, а небольшие сервисы, отдельные репозитории и контейнеры — всего лишь следствие, а не само определение.

Почему это важно

Выгода здесь организационная не меньше, чем техническая: когда несколько команд должны выпускать релиз вместе, выпуск превращается в совещание, и темп самой медленной команды задаёт темп всем, тогда как раздельное развёртывание убирает эту связанность. Цена — в том, что сетевой вызов заменяет вызов функции, поэтому задержка, частичный отказ и версионирование приходят сразу, а операции, которые были неявными внутри процесса, становятся явной инфраструктурой; однако небольшая команда с одним продуктом обычно платит эту цену за выгоду, которую никто не получает, поэтому умение вовремя не делить систему и есть половина этой записи.

Что в этом треке

  1. Границы и владение (05-backend-data/12-microservices/01-boundaries-and-ownership) — где проводить линии между сервисами и кто чем владеет.
  2. Операционная стоимость (05-backend-data/12-microservices/02-the-operational-cost) — развёртывание, версионирование и изоляция отказов после того, как система стала распределённой.

Предварительные требования

Что читать дальше

  • RESTful API (05-backend-data/06-restful-api) — стиль интерфейса, который эти сервисы обычно выставляют, поэтому читайте его первым.
  • Очереди сообщений (Kafka / RabbitMQ) (05-backend-data/17-message-queues-kafka-rabbitmq) — асинхронная альтернатива прямому вызову другого сервиса.
  • Архитектура программного обеспечения (01-cs-fundamentals/25-software-architecture) — общая дисциплина границ и связанности, частным случаем которой является эта запись.