Idempotentność operacji

Właściwość operacji, której wykonanie wielokrotne daje ten sam skutek co jednokrotne. Rozstrzyga, czy wolno bezpiecznie ponowić węzeł po awarii — bo awaria bywa po skutku, nie przed nim.

W Polsce nazywane też:

idempotentnośćoperacja idempotentnaklucz idempotentnościbezpieczne ponowienie

Własność, o którą nikt nie pyta przy budowaniu agenta i o której wszyscy przypominają sobie po pierwszym podwójnym obciążeniu klienta.

Czym jest idempotentność

Właściwość operacji, której wykonanie wielokrotne daje ten sam skutek co wykonanie jednokrotne. Ustawienie statusu na „zrealizowane” jest idempotentne. Dopisanie pozycji do listy nie jest.

Dlaczego ma znaczenie przy agentach

Najczęstszą reakcją na awarię jest ponowienie — i to jest reakcja domyślna w większości frameworków, często wykonywana po cichu. Ponowienie jest bezpieczne wyłącznie wtedy, gdy operacja nic nie zmieniła w świecie zewnętrznym albo zmieniła w sposób idempotentny.

Jeśli węzeł zdążył wysłać wiadomość, zapisać rekord albo obciążyć kartę, ponowienie zrobi to drugi raz. Awaria zdarzyła się po skutku, nie przed nim.

Zasada porządkująca

Ponawiaj operacje, które tylko czytają. Operacje, które piszą, ponawiaj wyłącznie wtedy, gdy zapis jest idempotentny.

Jak to zapewnić

Najprostszy mechanizm to klucz idempotentności — identyfikator operacji przekazywany razem z żądaniem. Odbiorca sprawdza, czy operację o tym identyfikatorze już wykonał, i jeśli tak, zwraca poprzedni wynik zamiast wykonywać ją ponownie. Wiele API płatniczych i komunikacyjnych udostępnia to wprost.