Получить доступ

Какие признаки указывают на распределённый монолит?

MiddleМонолит и микросервисы
Ещё спрашивают так:
  • Что такое распределённый монолит?
  • Почему микросервисы не дали независимости?
Коротко

Цена распределённой системы уплачена, а независимость не получена: общий релиз, общая база, синхронные цепочки, общая библиотека моделей.

  • Сервисы выкатываются только вместе и в определённом порядке
  • Одно поле — правки в нескольких репозиториях
  • Отказ одного сервиса кладёт все сценарии

А ещё Лечение — пересмотр границ, своя база у сервиса, асинхронное взаимодействие, иногда объединение сервисов обратно

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

Признаки:

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

Признаки здоровой нарезки — наоборот: своя схема данных у сервиса, обратно совместимые контракты, асинхронные события там, где не нужен немедленный ответ, независимые выкатки.

Что делать: найти сценарии с самой сильной связанностью и пересмотреть границы; переносить данные к владельцу; заменять синхронные вызовы событиями и локальными копиями; версионировать контракты; иногда — честно объединить сервисы обратно в один.

Что хотят услышать

  • Определение: распределённость без независимости.
  • Конкретные признаки: общий релиз, база, синхронные цепочки, общие модели.
  • Признаки здоровой нарезки.
  • Пути исправления, включая объединение.

Частые ошибки

  • Считать проблему решённой, если сервисы просто в разных репозиториях.
  • Лечить связанность ещё более частыми синхронными вызовами.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Сервисы нельзя выкатить по отдельности — релиз собирается «поездом»
  • ✓Несколько сервисов ходят в одну базу и знают чужие таблицы
  • ✓Один пользовательский сценарий проходит длинную цепочку синхронных вызовов
  • ✗У каждого сервиса своя схема данных и свой контракт

Что спросят дальше

  • Почему общая база данных особенно вредна?
  • Что делать, если сервисы уже нарезаны неудачно?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем