❓ Что такое Idempotency в контексте HTTP и очередей? Как обеспечить?
Идемпотентность — повторный вызов с теми же параметрами даёт тот же результат без дополнительных побочных эффектов.
HTTP методы: GET, HEAD, PUT, DELETE — идемпотентны по спецификации. POST — нет.
Для POST-запросов применяется Idempotency Key: клиент генерирует UUID и передаёт в заголовке. Сервер кэширует результат под этим ключом. При повторном запросе возвращает закэшированный ответ, не выполняя операцию повторно.
В очередях: воркер может упасть после обработки задачи, но до подтверждения (ack). Брокер переотправит задачу. Обработчик должен быть идемпотентным — повторная обработка одной и той же задачи не должна создавать дублей.
Техники обеспечения идемпотентности:
— Хранить processed_ids и проверять перед обработкой
— Использовать INSERT IGNORE / ON DUPLICATE KEY в MySQL
— Использовать upsert (INSERT ... ON CONFLICT DO NOTHING в PostgreSQL)
— Проверять состояние перед изменением ("уже оплачен — пропустить")
Идемпотентность — обязательное требование для любого обработчика в распределённой системе с at-least-once delivery.
Post #1375
730
- 👍 5
- ❤ 2
- 🔥 2