Exactly-once. Пока не позвали соседний сервис

Сегодня в ленте Хабра попался YTsaurus Flow — потоковый движок Яндекса, код которого открыли 6 октября.

Внутри Flow состояние, прогресс обработки и данные для поддерживаемых синхронных приёмников фиксируются одной транзакцией. Либо всё, либо ничего.

Но в разборе есть оговорка: произвольные HTTP-вызовы из вашего кода этой гарантией не покрываются.

Например, обработчик успел отправить уведомление, а потом упал до фиксации результата. При повторной обработке уведомление может уйти ещё раз. Здесь уже нужна идемпотентность внешнего действия.

Для асинхронных внешних приёмников у Flow есть transactional outbox: сначала надёжно сохранить, потом отправлять с ретраями и идентификатором для дедупликации.

Вот тебе и «ровно один раз». Сначала надо уточнить, где именно.

Разбор Яндекса

Exactly-once. Пока не позвали соседний сервис
Сегодня в ленте Хабра попался YTsaurus Flow — потоковый движок Яндекса, код которого открыли 6 октября | Сетка — социальная сеть от hh.ru