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

  1. Zápis do DBOK
  2. Pád procesu
  3. Publikace do brokerunikdy nenastala
  4. 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

  1. Business změnařádek žádosti
  2. Outboxzáznam k odeslání
  3. Publisherčte Outbox
  4. Brokerduplicita možná

Příjemce

  1. Inboxuž vidíme eventId?
  2. Úč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í