TGViewer
Айтишник обыкновенный 🐰 Айтишник обыкновенный 🐰 @default_itshnik · 1.91K subscribers
Post #259 657
Transactional outbox pattern

Это очень крутой архитектурный паттерн, который позволяет не потерять данные на всех этапах. Часто в микросервисной архитектуре бывают сервисы потребители и отправители. Бывает, что в рамках одного бизнес-процесса, необходимо провести несколько десятков взаимодействий. И вот outbox паттерн как раз и позволяет все сделать так, чтобы ни на одном из этапов мы не потеряли данные.

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

Правильно — записывать все ходы, как говорится.

Outbox паттерн подразумевает под собой модель с тасками. Когда микросервис получает запрос или вычитывает сообщение из топика, создается запись в БД с полученными данными. Пока ничего нового. А еще необходимо записать в отдельную outbox таблицу задачу на отправку запроса/сообщения следующему по бизнес-процессу смежнику.

Далее шедулер, выполняя периодические опросы в эту таблицу ожидает задачу на запуск отдельного процесса. Как только в таблице outbox появляется новая задача и шедулер на нее натыкается, процесс запускается, например, происходит отправка сообщения в топик. После успешной отправки, задача из таблицы outbox удаляется, либо у нее меняется статус. И так происходит на каждом шаге взаимодействия.

Ну и конечно, помимо огромного плюса в виде «не потерять данные» из паттерна вытекают и другие:

Во-первых, многопоточноть и распределенность входящих запросов/задач и тд.

Во-вторых, это повышенная надежность.

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

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

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

Кстати, делитесь в комментах каким паттерном пользуетесь на своем проекте для достижения консистентности данных и гарантирования доставки

Ставь:
🤩 — если тоже используешь transaction outbox

💅 — если используешь другие паттерны(пиши в комменты какие)

😬 — если не используешь паттерны, они для слабаков

#словодня и #быстростатья
  • 🔥 6
  • 👍 1
  • 💅 1
More from @default_itshnik
  1. Mar 1, 2026Быть старпером не модно, а законно С первым днем весны! С сегодняшнего дня начинает работа…
  2. Feb 27, 2026Меня переиграл и уничтожил ребёнок Началось утро ни разу ни с кофе. И даже ни с чая. Да че…
  3. Feb 22, 2026Отправила нюдсы через пылесос! Хакеры научились следить за россиянами через умные пылесосы…
  4. Feb 19, 2026Соболезную офисным бедолагам! Сегодня на улице происходит кайфец)) Пока шел в поликлинику,…
  5. Feb 15, 2026Посмотрел на голую жопу Тимоти Шаламе (реально) 🫥 Не переживай, спойлеров не будет 😊 Што…
  6. Feb 14, 2026Я люблю тебя! Наверное, все мои коллеги по каналам уже выложили тематические валентинки. А…
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 →