TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #209 1.24K
Продолжаю конспектировать Микросервисы Ричардсона, сегодняшняя глава - "Транзакционный обмен сообщениями", или когда нам нужно атомарно выполнить операции через брокер.

Сервису часто нужно публиковать сообщения в рамках транзакции, обновляющей базу данных.
Тут мы возвращаемся к паттерну, о котором я писал пару лет назад - https://t.me/junsenior/70
Подробно и на примере - по ссылке, тут лишь повторю краткий алгоритм:
* Сервис, отправляющий сообщения, записывает их в таблицу outbox, в реляционную субд или nosql (но с поддержкой ACID) субд
* Таблица outbox - гарантирует атомарность записи (спасибо ACID), и играет роль временной очереди сообщений
* Ретранслятор - компонент, читающий таблицу outbox и передающий сообщения брокеру
* Шаблон "Опрашивающий издатель" - шаблон для ретранслятора, подходящий для случая, если outbox реляционная: ретранслятору достаточно просто вычитать все новые сообщения, отправить их брокеру и удалить из базы
* Шаблон "Отслеживание транзакционного журнала" - более интересный и сложный способ, имеющий значительный плюс - он не даёт нагрузки на базу данных, анализируя только журнал фиксации. Если ты не знаешь, что такое журнал фиксации или транзакционный журнал - я упоминал про него тут - https://t.me/junsenior/184, когда разбирался с "Высоконагруженными приложениями" Клеппмана.

Есть несколько готовых инструментов, реализующих анализ журнала транзакций и умеющий отправлять новые сообщения в брокеры:
* debezium.io - публикует изменения базы данных для брокера Apache Kafka
* github.com/linkedin/databus - анализирует журнал Oracle и публикует изменения в виде событий
* DynaboDB streams (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) - создает поток упорядоченных по времени изменений, приложения может читать эти изменения из потока и публиковать их в брокер.
* Eventuate Tram (github.com/eventuate-tram/eventuate-tram-core) - либа от самого Ричардсона, использует протокол двоичного журнала MySQL, Postgres или просто проверяет изменения, внесенные в таблицу outbox, и публикует их в Apache Kafka.
Telegram 1000 дней программирования Вы просили паттерны? Их есть у меня. Transactional outbox - паттерн, о котором на русском очень мало информации. Хотя понимание его структуры и схемы работы критически важно в случае создания системы логирования для твоего приложения. Не хочешь влететь…
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
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 →