Čá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.

  1. Disbursement
  2. Platební systém
  3. Timeoutbez odpovědi
  4. Odešlo?ano / ne / nevíme

Opakování naslepo

  1. Druhá výplata
  2. 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í

  1. Požadavekklíč = applicationId
  2. Příjemceuž mám klíč?
  3. ano: původní výsledek
  4. ne: provést

Neznámý výsledek

  1. Timeout
  2. Dotaz na stavGET /disbursements/{klíč}
  3. 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í