Какую проблему мы решаем
Сеть может оборваться после выполнения операции, но до подтверждения. Брокер может повторно доставить сообщение. Потребитель может записать данные и упасть до фиксации offset. Снаружи невозможно мгновенно понять, произошло действие или нет. Поэтому повторная доставка — нормальная часть многих надёжных систем, а требования «никогда не повторять» и «никогда не терять» конфликтуют.
Как работает решение
Exactly-once стоит рассматривать не как магическое свойство транспорта, а как конкретную гарантию на определённой границе. Некоторые платформы дают транзакционную обработку внутри контролируемого контура, но внешний эффект снова создаёт новую границу. На практике часто дешевле использовать at-least-once delivery и делать бизнес-операцию идемпотентной или хранить уникальный идентификатор уже применённой операции.
Что получает бизнес
Бизнес получает сильную гарантию там, где дубль действительно стоит денег, портит состояние или создаёт необратимый эффект. В остальных потоках можно принять повторную доставку и не оплачивать глобальную координацию, сохраняя throughput и простоту масштабирования.
Что получает команда
Команда вынуждена точно определить, что считается «одним разом»: доставка сообщения, запись состояния или весь внешний бизнес-эффект. Idempotency keys, inbox, дедупликация и транзакционные журналы превращаются в осознанные механизмы вместо надежды на брокер.
Что получает клиент
Клиент получает главное: retry или повторная доставка не приводят ко второму необратимому действию там, где это критично.
Чем мы за это платим
Строгая exactly-once семантика требует состояния, координации и ограничений на интеграции. Чем шире граница, тем дороже гарантия. Есть и организационный риск: обещать exactly-once, не определив, что именно считается одним разом, — значит дать бизнесу ложное чувство безопасности.
Когда не нужно усложнять
Не нужно покупать строгую гарантию для телеметрии, уведомлений и потоков, где повтор можно безопасно пережить или отфильтровать. Гарантию стоит усиливать там, где дубль создаёт финансовый, юридический или операционный ущерб.
Что стоит спросить перед решением
- Что именно должно произойти ровно один раз?
- Где заканчивается эта гарантия?
- Можно ли сделать операцию идемпотентной?
- Что произойдёт после таймаута, если результат неизвестен?
- Сколько стоит дубль по сравнению с ценой координации?
В итоге
Exactly-once — не бесплатная настройка очереди, а дорогая гарантия, привязанная к конкретному бизнес-эффекту. Бизнесу важнее не «ровно один раз везде», а отсутствие повторного результата там, где повтор действительно недопустим.