Transactional outbox pattern
Это очень крутой архитектурный паттерн, который позволяет не потерять данные на всех этапах. Часто в микросервисной архитектуре бывают сервисы потребители и отправители. Бывает, что в рамках одного бизнес-процесса, необходимо провести несколько десятков взаимодействий. И вот outbox паттерн как раз и позволяет все сделать так, чтобы ни на одном из этапов мы не потеряли данные.
Условно, при такой огромной цепочке взаимодействий, может произойти все, что угодно. Обязательно моргнет сеть, будет недоступен один из смежных сервисов или сбойнет что-то по иным причинам. Как в такой аварийной или около того ситуации ничего не потерять?
Правильно — записывать все ходы, как говорится.
Outbox паттерн подразумевает под собой модель с тасками. Когда микросервис получает запрос или вычитывает сообщение из топика, создается запись в БД с полученными данными. Пока ничего нового. А еще необходимо записать в отдельную outbox таблицу задачу на отправку запроса/сообщения следующему по бизнес-процессу смежнику.
Далее шедулер, выполняя периодические опросы в эту таблицу ожидает задачу на запуск отдельного процесса. Как только в таблице outbox появляется новая задача и шедулер на нее натыкается, процесс запускается, например, происходит отправка сообщения в топик. После успешной отправки, задача из таблицы outbox удаляется, либо у нее меняется статус. И так происходит на каждом шаге взаимодействия.
Ну и конечно, помимо огромного плюса в виде «не потерять данные» из паттерна вытекают и другие:
Во-первых, многопоточноть и распределенность входящих запросов/задач и тд.
Во-вторых, это повышенная надежность.
В-третьих, простота в масштабировании при соблюдении определенных условий(например, установка блокировки на взятые в работу таски).
В-четвертых, удобнее переобрабатывать ошибки. Обычно реализация паттерна выглядит таким образом, что ошибки записываются в аналогичную Outbox таблицу также в виде задач. Такие задачи в дальнейшем при необходимости можно повторно взять в работу, переместив в таблицу outbox.
В-пятых, это простота. Не думаю, что здесь стоит что-то объяснять. Просто лепи на каждый пук задачу и будет тебе счастье))
Кстати, делитесь в комментах каким паттерном пользуетесь на своем проекте для достижения консистентности данных и гарантирования доставки
Ставь:
🤩 — если тоже используешь transaction outbox
💅 — если используешь другие паттерны(пиши в комменты какие)
😬 — если не используешь паттерны, они для слабаков
#словодня и #быстростатья
Post #259
657

- 🔥 6
- 👍 1
- 💅 1