Idempotency to właściwość operacji która daje ten sam rezultat niezależnie od liczby wykonań. Wykonanie raz, wykonanie sto razy — efekt taki sam.
Przykłady:
- Idempotent:
SET status='paid' WHERE order_id=X— niezależnie ile razy uruchomione, order zostanie "paid" - NIE idempotent:
INSERT INTO emails (recipient) VALUES ('x@example.com')— uruchomione 10 razy = 10 emaili - Idempotent:
INSERT ... ON CONFLICT (email_id) DO NOTHING— zapis się powtarza ale efekt = 1 wiersz
Dlaczego krytyczne w automation: wszystko zawodzi — sieć, kontenery, parsery. Bez idempotency retry powoduje duplikaty (10 emaili do tego samego klienta) lub corruption (3 razy obciążona karta). Z idempotency retry jest bezpieczny — możesz uruchomić task ile razy chcesz.
Implementation patterns:
- Idempotency keys — unique ID per operation, sprawdzane przed wykonaniem. Stripe API to klasyk.
- Unique constraints w bazie
- Hashing input — output cache per input hash
- Idempotent receivers po stronie target API