Část 10 z 16 · Den 2 · idempotence
Neznámý výsledek: prošlo, nebo ne?
Problém a zkušenost
Výplata vypršela. Prošla, nebo ne?
Volání na platební systém skončí timeoutem. Peníze mohly odejít, nebo ne. Poslat výplatu znovu je riziko.
- Disbursement
- Platební systém
- Timeoutbez odpovědi
- Odešlo?ano / ne / nevíme
Opakování naslepo
- Druhá výplata
- Klient dostal peníze dvakrát
Zkušenost z praxeKdy jste museli rozhodnout, zda operaci zopakovat, aniž jste znali výsledek?
TakeawayNeznámý výsledek není selhání ani úspěch. Je to třetí stav.
Více k tématu
Co to znamená
Neznámý výsledek vzniká, když potvrzení nedorazí, ale operace mohla proběhnout. Ztracený ack je typický příklad.
Proč to používáme
Retry naslepo vyrobí duplicitu, nezopakování vyrobí ztrátu.
Kdy to dává smysl
U všech operací s vedlejším účinkem v cizím systému: platby, výplaty, e-maily.
Kde se to láme
- Považovat timeout za neúspěch.
- Zopakovat bez klíče operace.
- Neřešit, kdo zjistí skutečný stav.
Představme si
Disbursement odešle výplatu a odpověď se ztratí. Systém ji zkusí podruhé. Klient dostane peníze dvakrát.
Nejhorší na neznámém výsledku není selhání, ale že nevíme, co se stalo.
Princip, aplikace a cvičení
Business idempotence a zjištění stavu
Každé čerpání má obchodní klíč. Opakování vrátí původní výsledek a nejasný stav se dotazem ověří.
Klíč čerpání
- Požadavekklíč = applicationId
- Příjemceuž mám klíč?
- ano: původní výsledek
- ne: provést
Neznámý výsledek
- Timeout
- Dotaz na stavGET /disbursements/{klíč}
- Rozhodnutízopakovat / uzavřít
Trade-offKlíč musí mít obchodní smysl a doba pamatování musí pokrýt nejdelší opakování. Zjišťování stavu je další proces, který se musí hlídat.
TakeawayIdempotence je vlastnost příjemce, ne odesílatele.
Více k tématu
Co to znamená
Business idempotence používá klíč z obchodní domény (číslo žádosti, číslo čerpání). Technická deduplikace podle eventId sama nestačí, když opakování vzniká jinde.
Proč to používáme
Příjemce je jediné místo, kde se duplicita dá spolehlivě zastavit.
Kdy to dává smysl
U každého příjemce s vedlejším účinkem.
Kde se to láme
- Kontrola duplicity mimo transakci s účinkem.
- Deduplikace jen podle eventId.
- Neomezený růst záznamů.
Představme si
Událost o otevření účtu dorazí dvakrát. S klíčem dostaneme jeden účet a původní číslo účtu.
Nejde o to duplicity zakázat, ale udělat je neškodné.
Školení pro váš tým
Chcete školení pro svůj tým?
Školení vedeme na vašem kódu a vašem doménovém problému. Domluvíme rozsah, termín a formu.
Probrat školení →