Микросервисы против монолитной архитектуры: что вам стоит строить?

Однажды один основатель попросил меня оценить предложение по архитектуре.

Агентство предложило одиннадцать сервисов, очередь сообщений и service mesh. И это для простого инструмента бронирования с нулевым количеством пользователей.

Это ловушка.

Архитектурные решения определяют ваши счета за хостинг, скорость выпуска продукта и план найма. Вы должны знать цену, прежде чем выделять бюджет разработчику.

Монолит

Монолит использует одну кодовую базу, одно развертывание и одну базу данных. Это просто.

В первый же день вы не знаете границ своей предметной области. Если вы разделите сервисы слишком рано, вы потратите время на перенос границ, которых и не должно было быть. Монолитом проще управлять, когда ваша команда невелика. Вы вызываете функцию вместо настройки API. Когда в 2 часа ночи случается баг, ошибка указывает на код, а не на сбой в сети.

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

Микросервисы решают организационные проблемы. Они позволяют разным командам выпускать код по собственному графику. Netflix использует их, чтобы один сбой не потопил весь корабль.

Однако за это приходится платить каждый день. Сетевые вызовы увеличивают задержку (latency). Обеспечение согласованности данных становится сложной задачей. Вам понадобятся специализированные инструменты и большая команда для управления логами и трассировкой. Без достаточного количества сотрудников вы получите распределенный монолит. Это даст вам всю сложность сети, но лишит всякой независимости.

Модульный монолит

Это золотая середина. Это одно приложение с четкими границами между различными частями кода. Модуль биллинга не может вмешиваться во внутреннюю логику заказов.

Shopify и GitHub используют этот подход. Вы получаете чистые границы и избегаете «налога на сеть». Когда какой-то части вашего приложения наконец потребуется масштабироваться отдельно, вы сможете легко ее выделить, так как границы уже определены.

Как принять решение:

  • Размер команды: если у вас всего три человека, вы не сможете управлять отдельными сервисами и необходимым графиком дежурств (on-call rotation).
  • Стабильность продукта: если ваш продукт меняется еженедельно, границы ваших сервисов станут неактуальными уже к следующему месяцу.
  • Операционная деятельность: есть ли у вас автоматизированные откаты (rollbacks) и агрегация логов? Если нет, микросервисы принесут только боль.
  • Масштабируемость: не стройте архитектуру под гипотетический рост. Стройте под конкретный путь, который вы видите перед собой.

Если ваши ответы «еще нет», стройте модульный монолит.

Не просите микросервисы только потому, что это слово звучит современно. Расскажите партнеру, что делает продукт и кто будет его поддерживать.

Продукты гибнут, потому что они так и не доходят до релиза. Чистый монолит — это кратчайший путь к пользователям. Сначала создайте его. Пусть трафик подскажет вам, когда настанет время разделять систему на части.

Источник: https://dev.to/amara_wallis_2f533953a6ac/microservices-vs-monolithic-architecture-what-should-your-full-stack-development-partner-build-3g6

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi