Java hub
09.06 · ред.
🔁 Saga Pattern в микросервисной архитектуре: можно ли обойтись без распределённых транзакций?
Выступил на онлайн-встрече "Книжного клуба .rar" — Telegram-сообщества для Java-разработчиков, где регулярно обсуждают профессиональную литературу, технологии и устраивают встречи с практикующими инженерами. 👉 @pointrar
В этот раз разбирали реализацию паттерна Saga на Java с использованием Temporal
Демо-проект на GitHub - https://github.com/RustamKuramshin/spring-boot-saga-pattern-example
Презентация мини-доклада тут
📦 Что такое Saga и зачем она нужна?
В распределённой системе аннотация Transactional не работает между сервисами. А бизнесу всё ещё нужно "всё или ничего":
если деньги списались, товар должен быть зарезервирован и доставлен. Если нет — откатить всё назад.
Saga — это паттерн, который разбивает такую бизнес-транзакцию на цепочку локальных транзакций, и если что-то идёт не так, вызывает компенсационные действия (например, вернуть деньги).
🧩 Два способа реализовать Saga
🔸 Оркестрация
Один сервис (оркестратор) управляет всей логикой: вызывает шаги, следит за результатами, вызывает компенсации.
➕ Централизованно, легко отлаживать
➖ Меньше изоляции между сервисами
🔸 Хореография
Сервисы реагируют на события (event-driven): "платёж прошёл" → "резервируй товар" → "создай доставку".
➕ Слабо связанная архитектура
➖ Сложно проследить цепочку событий и откатов
⚙️ В Temporal реализация Saga — это workflow, в котором бизнес-процесс описывается обычным Java-кодом.
Он:
- сохраняет состояние каждого шага (event sourcing),
- автоматически повторяет activities при сбоях,
- управляет timeouts и compensation logic,
- отделяет workflow (координацию) от activity (действий).
Например, просто пишешь:
activities.makePayment(); saga.addCompensation(activities::cancelPayment);
А Temporal сам заботится о повторяемости, масштабировании и отказоустойчивости.
Если интересно больше узнать про Temporal, рекомендую посмотреть доклад Петра Сальникова с JPoint. Мне повезло присутствовать в зале на самом докладе. В дискуссионной зоне Петр ответил на множество вопросов как раз в тот период когда мне нужно было самому разбираться с Temporal 😁
еще контент в этом сообществе
еще контент в этом соообществе
Java hub
09.06 · ред.
войдите, чтобы увидеть
и подписаться на интересных профи