Монолит vs Микросервисы

Почему Netflix использует монолиты для критических систем

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

Скрытые издержки микросервисов

Network Tax

Каждая граница сервиса добавляет:

Микросервисы:                      Монолит:

[Client] -> [API Gateway]          [Client] -> [Monolith Cluster]
               |                                  |
          [Service A]                    (Internal function calls)
               |                                  |
          [Service B]                          [DB]
               |
          [Service C]
               |
             [DB]

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

Operational Complexity

Каждый новый сервис требует:

Реальность: 50 микросервисов = 50 CI/CD пайплайнов, 50 наборов алертов, 50 потенциальных точек отказа.

Debugging Nightmares

То, что раньше было одним вызовом функции, теперь — distributed trace через десятки сервисов. Найти причину проблемы в цепочке из 20 сервисов значительно сложнее, чем в стектрейсе монолита:

Модульный монолит как альтернатива

Между монолитом и микросервисами существует промежуточный вариант — модульный монолит. Код организован в изолированные модули с чёткими границами и контрактами, но деплоится как единое приложение. Это даёт:

Shopify — один из известных примеров успешного модульного монолита на Ruby on Rails, обслуживающего миллионы магазинов.

Секрет Netflix

За кулисами не всё в Netflix — микросервисы. Определённые workloads консолидированы в большие монолитные системы:

Система Почему монолит
Recommendation Engine Высокая нагрузка, критическая латентность
Billing Транзакционная целостность, меньше точек отказа
Playback Authorization Каждая миллисекунда на счету при старте видео

Когда трафик скачет (например, выход нового сезона популярного шоу в полночь), эти монолитные ядра масштабируются горизонтально эффективнее, чем десятки "болтливых" микросервисов.

Преимущество монолита при масштабировании:
  • Один deployment artifact
  • Один runtime
  • Одна scaling policy
  • Меньше движущихся частей = меньше каскадных отказов

Почему индустрия это упустила

1. Narrative Momentum

Микросервисы стали восприниматься как единственный «правильный» подход. Вопрос «а подходит ли это нам?» стал задаваться всё реже.

2. Org Fit Over Tech Fit

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

Закон Конвея: Системы отражают структуру организаций, которые их создают. Микросервисы — это способ дать автономию командам, а не оптимальная техническая архитектура.

3. Conference Bias

Конференции showcased success stories микросервисов. Тихие победы монолитов остались неопубликованными. Никто не выступает с докладом "Мы не перешли на микросервисы и у нас всё хорошо".

Фреймворк принятия решения

Вопрос 1: Сколько у вас команд?

Одна команда?
└── Предпочтите монолит
    • Быстрее итерации
    • Проще операции
    • Меньше координации

Много команд?
└── Микросервисы могут уменьшить friction
    • Независимые деплои
    • Автономия команд
    • Чёткие границы владения

Вопрос 2: Что является bottleneck — трафик или люди?

Bottleneck — трафик?
└── Монолит часто выигрывает
    • Меньше сетевых переходов
    • Проще масштабирование
    • Ниже латентность

Bottleneck — люди?
└── Микросервисы могут помочь
    • Независимая работа команд
    • Меньше merge conflicts
    • Быстрее onboarding в отдельный сервис

Матрица решения

Мало команд Много команд
Bottleneck — трафик Монолит Модульный монолит или крупные сервисы
Bottleneck — люди Монолит (пока) Микросервисы

Резюме

Ключевые инсайты:

Рекомендация: Рассмотрите монолит как отправную точку. Переход к микросервисам имеет смысл при реальных проблемах масштабирования команд, а не как ответ на моду.