advanced
Idempotency
Делайте commands, handlers и APIs safe to retry через idempotency keys, natural uniqueness и explicit duplicate handling.
Retries, at-least-once delivery и client timeouts делают duplicate execution нормой. Идемпотентность гарантирует, что повтор той же операции даёт тот же outcome: idempotency keys на APIs, natural uniqueness constraints или stored results по request ID.
Компромисс: хранение keys и results против корректности при сбоях. TTL keys балансируют память и retry windows.
На интервью: спроектируйте payment API, безопасный при retries; объясните scope key (per client, per user) и response replay.
Типовые ошибки: idempotency только на HTTP без DB uniqueness; keys, пересекающиеся между операциями; удаление keys до конца retry window.
Чеклист:
- Idempotency-Key или аналог на mutating APIs.
- Uniqueness на persistence layer.
- Тот же response для duplicate keys.
- TTL key длиннее max retry horizon.