awesome-everything EN
↑ Обратно к восхождению

Очереди, потоки, события

Outbox: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту outbox — разрыв dual-write, фикс одной транзакцией, polling vs CDC relay, доставка at-least-once и операционный налог.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 12 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь в реальном инциденте — не определение для заучивания, а компромисс, который надо взвесить, когда запись и публикация обязаны произойти обе.

Цель

Убедись, что связываешь разрыв dual-write, фикс одной транзакцией, выбор polling vs CDC relay, гарантию at-least-once и операционный налог — тот синтез, к которому вёл урок.

Викторина

Хендлер делает INSERT заказа, затем kafka.publish('OrderPlaced'). Под нагрузкой pod убивается по OOM после коммита, но до возврата publish. Какой сбой получается и почему try/catch не спасёт?

Викторина

Почему запись бизнес-строки и outbox-строки в одной локальной transaction даёт атомарность «бесплатно», а 2PC между Postgres и Kafka — нет?

Викторина

Команда гоняет polling relay с интервалом 1с и хочет, чтобы события прилетали быстрее. Они думают снизить до 25мс. Как это читает senior?

Викторина

Почему outbox даёт at-least-once, а не exactly-once, и что это навязывает каждому консьюмеру?

Викторина

Ты масштабируешь polling relay с одной реплики до трёх ради пропускной способности и сразу видишь, что каждое событие публикуется примерно трижды. Какой фикс?

Викторина

Outbox-таблица выросла до нескольких сотен тысяч строк, polling-запросы замедляются, а ночной DELETE старых sent-строк вызывает конкуренцию блокировок с вставками. Какой дизайн очистки лучше?

Итог

Сквозная линия юнита — одна цепочка: dual-write поперёк двух хранилищ не имеет крах-безопасного порядка, поэтому ты схлопываешь его в одну локальную transaction, которая пишет бизнес-строку и outbox-строку вместе. Отдельный relay шлёт эти строки — polling (просто, но задержка ограничена интервалом и постоянная нагрузка на БД) или CDC (единицы мс, почти нулевая нагрузка на таблицу, ценой операций). Поскольку relay публикует, затем помечает sent двумя шагами, доставка at-least-once, поэтому консьюмеры дедупят по стабильному event id. Операционный налог — bloat таблицы, порядок при параллельных relay, конкурирующие реплики — оплачивается партиционированием, батчевым reaping, keying по aggregate и FOR UPDATE SKIP LOCKED.

Продолжить восхождение ↑Outbox: свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.