group-telegram.com/yazhanalitik/55
Last Update:
Когда в системе происходят изменения, то о них нужно сообщить другим сервисам или внешним системам при условии, что вы с ними интегрированы.
И главное - вам нужно сделать надежно т.к. потеря события между записью данных и его отправкой - это не такая уж редкость
Каждый раз, когда действия в системе имеют какую-то степень важности вне её контура, требуется механизм, который обеспечит надежный процесс: "сначала надёжно зафиксируй факт внутри системы, а потом передавай наружу".
Это архитектурный подход, который позволяет связать бизнес-операции и отправку событий в одну цепочку, минимизируя риск потерь и рассинхронизации. Кстати, в кейсе факапа мы начали применять именно такой подход + CDC на базе Debezium, чтобы исправить обсёр.
Если попробовать объяснить это паттерн просто и без лишнего академизма, то получится что-то такое:
Давайте сначала сохраним и бизнес-данные и информацию о событии в одной транзакции базы данных. А уж потом, асинхронно, будем рассылать это событие наружу.
Идея простая:
Важно:
Руководствуйся принципом:
Потеря события = риск → нужен Outbox.
Паттерн Transactional Outbox прост и все еще актуален особенно если тебе важна историчность - отличный способ повысить надежность взаимодействия между системой и внешним получателем событий. Именно так я строил интеграции даже 10 лет назад.