Část 09 z 16 · Den 2 · Outbox, Inbox
Zapsáno, ale neodesláno
Problém a zkušenost
Zapsali jsme, ale neodeslali
Změna dat a odeslání události jsou dvě operace. Mezi nimi se může cokoliv pokazit.
Dva zápisy
- Zápis do DBOK
- Pád procesu
- Publikace do brokerunikdy nenastala
- Ostatní službynevědí
Zkušenost z praxeKdy se vám stalo, že se data uložila, ale zpráva o nich nikdy nedošla?
TakeawayUdálost existuje v historii, ale nikdo na ni nereagoval.
Více k tématu
Co to znamená
Problém dvojího zápisu: dvě různé technologie (databáze a broker) nelze změnit v jedné transakci.
Proč to používáme
Bez řešení se na každé nahodilé chybě rozcházejí systémy.
Kdy to dává smysl
Kdykoli změna stavu musí vést k události pro jiné služby.
Kde se to láme
- Opačné pořadí (nejdřív broker, potom DB) vyrobí zase událost o změně, která nenastala.
- Spoléhat na to, že pád je vzácný.
Představme si
Žádost se uloží, ale zpráva o ní se do brokeru nedostane. Risk Service o ní nikdy neslyší a žádost zůstane viset.
Dva zápisy jsou vždy příležitost, aby se rozešly.
Princip, aplikace a cvičení
Outbox a Inbox dohromady
Zpráva se zapíše spolu se změnou v jedné transakci. Publisher ji doručí. Inbox na straně příjemce zastaví duplicity.
Odesílatel
- Business změnařádek žádosti
- Outboxzáznam k odeslání
- Publisherčte Outbox
- Brokerduplicita možná
Příjemce
- Inboxuž vidíme eventId?
- Účinekprávě jednou
Trade-offDoručení aspoň jednou, publisher navíc, úklid tabulek. Příjemce musí být idempotentní.
TakeawayOutbox zaručí odeslání. Inbox zaručí, že se účinek provede jednou.
Více k tématu
Co to znamená
Místo přímého publikování zapíšeme zprávu do tabulky Outbox ve stejné transakci jako změnu. Publisher ji odešle a označí. Příjemce si zapisuje zpracovaná ID do Inboxu.
Proč to používáme
Zpráva nezmizí ani při pádu procesu nebo brokeru. Duplicity jsou neškodné.
Kdy to dává smysl
Kdykoli změna stavu musí spolehlivě vést k události.
Kde se to láme
- Outbox bez Inboxu: duplicity. Inbox bez Outboxu: ztráty.
- Nečištění odeslaných záznamů.
- Pořadí zpráv při více publisherech.
Představme si
Broker je nedostupný. Žádost se uloží, zpráva čeká v Outboxu a odejde, jakmile broker naběhne.
Spolehlivost nevzniká tím, že nic nespadne, ale tím, že si pamatujeme, co ještě zbývá.
Š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í →