Идемпотентность и устранение дубликатов сообщений
Сделайте операции микрослужб безопасными для повторного выполнения, проектируя идемпотентные обработчики и устраняя дубликаты сообщений в распределённых системах.
«Идемпотентность и устранение дубликатов сообщений» — бесплатный урок Microservices Communication Patterns (Saga, Circuit Breaker) на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Microservices Communication Patterns (Saga, Circuit Breaker), и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Microservices Communication Patterns (Saga, Circuit Breaker) содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Retries Cause Duplicates
Distributed systems deliver messages at least once. A timeout or retry can make the same request arrive twice — and charge a card or create an order twice.
What Idempotency Means
An operation is idempotent if doing it many times has the same effect as doing it once. Repeating it changes nothing beyond the first application.
Naturally Idempotent Operations
Some operations are idempotent by nature — absolute SET, HTTP PUT and DELETE. Others, like balance = balance + 10, double-apply on a retry.
The Idempotency Key
The standard fix is an idempotency key: the client generates a unique id per operation and resends it on every retry, so the server processes it only once.
POST /payments
Idempotency-Key: 9f1c-7a22-...
{ "amount": 4999 }Storing Processed Keys
The server records each processed key. If the same key reappears, it returns the stored result instead of re-running the work.
if (store.exists(key)) return store.result(key);
Result r = process(request);
store.save(key, r);
return r;Deduplication at the Consumer
For queues, the consumer does deduplication: it tracks message ids it has already handled and silently skips any repeats.
if (seen.contains(msg.id())) { ack(msg); return; }
handle(msg);
seen.add(msg.id());
ack(msg);Atomicity Matters
Recording the key and doing the work must be atomic. If they are separate, a crash between them reopens the duplicate window — use a transaction or unique constraint.
INSERT INTO processed(key) VALUES (?) -- unique constraint
-- if it fails, the work already ranExpiring the Dedup Store
You cannot store keys forever. Give the dedup store a TTL sized to your max retry window — Redis with expiry is a common choice.
redis.set("idem:" + key, result, "EX", 86400, "NX");Idempotency vs Exactly-Once
True exactly-once delivery is extremely hard. The practical pattern is at-least-once delivery plus idempotent processing, giving effectively-once behavior.
Designing Idempotent Events
Make event handlers idempotent: include a unique event id, prefer absolute state changes, and guard side effects so a redelivered event never repeats them.
Where to Apply It
Apply idempotency at every retry boundary — API gateways, queue consumers, saga steps, webhooks. Anywhere a message can arrive twice needs a dedup strategy.
Quick Check
The same message just arrived twice — does your design still do the right thing? Check your idempotency grasp.
Recap
You made operations retry-safe: at-least-once causes duplicates, idempotent operations repeat harmlessly, use keys and dedup, keep record-and-process atomic with a TTL.
Изучай Microservices Communication Patterns (Saga, Circuit Breaker) с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 12
- Уроки
- 48
Часто задаваемые вопросы
Урок «Идемпотентность и устранение дубликатов сообщений» бесплатный?
Да — полный текст урока «Идемпотентность и устранение дубликатов сообщений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Microservices Communication Patterns (Saga, Circuit Breaker), подпишись на CoddyKit PRO. Курс Microservices Communication Patterns (Saga, Circuit Breaker) содержит 4 уроков всего.
Чему я научусь в уроке «Идемпотентность и устранение дубликатов сообщений»?
Сделайте операции микрослужб безопасными для повторного выполнения, проектируя идемпотентные обработчики и устраняя дубликаты сообщений в распределённых системах. Ты практикуешь Microservices Communication Patterns (Saga, Circuit Breaker) с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Microservices Communication Patterns (Saga, Circuit Breaker)?
Предыдущий опыт не требуется. Microservices Communication Patterns (Saga, Circuit Breaker) на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Идемпотентность и устранение дубликатов сообщений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Microservices Communication Patterns (Saga, Circuit Breaker)?
Да. Каждый урок Microservices Communication Patterns (Saga, Circuit Breaker) включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Синхронный и асинхронный обмен данными
- Проблемы распределенных систем
- Шлюз API и обнаружение сервисов
- Идемпотентность и устранение дубликатов сообщений