Exactly-once в Go-интеграциях: почему очередь и ретраи не спасают прод

Через тернии к...

Программный комитет ещё не принял решения по этому докладу

Целевая аудитория

- Разработчики, которые работают с интеграциями внешних сервисов - Разработчики, кто хочет проектировать универсальные решения для многоканальной обработки данных - Разработчики, которым не хватает прикладных "боевых" кейсов, а не академического материала.

Тезисы

В асинхронных интеграциях с внешними сервисами часто полагаются на очереди, ретраи и ключи идемпотентности, ожидая, что этого достаточно для надёжной обработки событий.
На практике такие решения дают ложное ощущение exactly-once и ломаются в моменты гонок, дубликатов и несогласованного порядка обновлений.

В докладе я разбираю опыт построения онлайн-системы обработки десятков тысяч событий в сутки с требованиями к консистентности в пределах нескольких секунд. Я покажу, почему at-least-once обработка оказалась недостаточной, где именно ломаются классические подходы и как мы пришли к управлению версиями сущностей и порядком выполнения задач на уровне бизнес-логики.

Доклад основан на реальных прод-инцидентах: дубликатах событий, гонках задач в очереди, неконтролируемых ретраях и рассинхронизации данных с внешними провайдерами. Я расскажу, какие инженерные компромиссы пришлось принять, от каких "правильных" решений отказаться и какие подходы в итоге позволили системе перестать зависеть от поведения внешних сервисов.

🔹 В IT с 2017, в Go — с 2022.
🔹 Разрабатываю продуктовые решения.
🔹 Работал в Ozon (личный кабинет продавца) и Mail.ru (безопасность, сделал х5 к автовосстановлению паролей).
🔹 Сейчас в Яндекс.Смене — руковожу бэкендом службы бэкофиса.

Видео