TGViewer
Java: fill the gaps Java: fill the gaps @java_fillthegaps · 12.3K subscribers
Post #573 12.1K
Сага

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

❓ Какую проблему решаем?

В системе много компонентов: стайка микросервисов, несколько БД, кэши и месседж брокер. Каждый микросервис в норме работает с одной БД и имеет четкий круг обязанностей.

Для многих задач нужно пройтись через несколько сервисов и зафиксировать изменения в нескольких БД.

Пример — покупка в интернет-магазине. Создать заказ, проверить наличие, снять деньги и тд. Если на каком-то шаге случится ошибка, предыдущие изменения можно откатить, чтобы система осталась в согласованном состоянии.

Для таких случаев на сцену выходит паттерн сага в двух вариантах: хореография и оркестрация.

💃 Хореография — каждый сервис “танцует” свой набор движений: знает, что делать при ошибке и кого предупредить. Например:
▫️ В сервисе А происходит ошибка
▫️ Сервис А шлёт сервису Б событие “я не смог”
▫️ Сервис Б дёргает у сервиса В команду “отмена”
▫️ Система снова в согласованном состоянии🥳

Плюсы:
✅ Легко сделать для простых бизнес-процессов

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

🥁 Оркестрация — когда за порядком следит отдельный сервис. Если кто-то не смог, оркестратор шлёт остальным участникам компенсирующие указания.

Плюсы:
✅ Сервисы меньше знают друг о друге, и логика внутри проще. Сервис оплаты не придумывает, что делать при отмене заказа, а получает четкую команду “Верни деньги”
✅ Информация о шагах находится в одном месте
Легче понять, что происходит и разобраться в ошибках
✅ Проще менять шаги в процессе
✅ Проще в управлении, если в системе несколько сложных процессов

Минусы:
❌ Ещё один компонент. Дополнительный деплой, мониторинг, страничка в конфлюенс и тд

❓ Как реализуется оркестрация?

Есть миллион библиотек и фреймворков, например, Apache Camel или Netflix Conductor. Упомянете их — получите плюсик.

❓ Почему сага редко встречается?

Система не выполняет в итоге нужное действие. Чаще проблема решается через Retry или Fallback. Откат предыдущих шагов — очень крайняя мера.

Собственно, на собесе ждут, что кандидат расскажет все, что выше. Хорошо, если на этом моменте обсуждение закончится, и вы перейдете к следующему вопросу.

Но в обсуждении саги есть важный нюанс, который меняет все. Если его не понимать, напротив вашей кандидатуры появится жирный минус.

Расскажу в следующем посте, а сейчас жду ваших огоньков🔥
  • 🔥 794
  • 👍 53
  • ❤ 20
  • 👎 3
More from @java_fillthegaps
  1. Apr 30, 2026Get Your Hands Dirty on Clean Architecture: отзыв на книгу Когда я подняла тему чистой арх…
  2. Apr 27, 2026​Clean Architecture: отзыв на книгу Наконец-то дочитала книгу Clean Architecture Роберта М…
  3. Mar 4, 2026Как переиспользовать контекст в интеграционных тестах Сегодня расскажу базовый минимум для…
  4. Mar 4, 2026Post #660
  5. Mar 4, 2026Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфи…
  6. Feb 25, 2026Чистая архитектура. Главы 3-5 Продолжаем спидран по Clean Architecture Роберта Мартина. ⭐️…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →