Nákvæmlega-einu-sinni er lygi: að hanna samþættingar fyrir tvítekningar

Þrjú eintök af sömu skilaboðaflísinni renna saman í eina unna flís

Einhvers staðar í hverjum samþættingarsamningi er setning á borð við „hver pöntun verður send nákvæmlega einu sinni". Hún hefur aldrei nokkurn tímann verið sönn. Netið klofnaði í miðri fyrirspurn og sendandinn reyndi aftur; röðin endurafhenti eftir að neytandi hrundi; vöruhúsastarfsmaður ýtti tvisvar á útflutningshnappinn. Tvítekningar eru ekki bilunarástand - þær eru veðurfar.

Idempotency-lyklar, valdir af kostgæfni

Lausnin er gömul og ósjarmerandi: hver skilaboð bera lykil, og vinnslan gerir ekkert ef lykillinn hefur sést áður. Áhugaverðu ákvarðanirnar felast allar í því að velja lykilinn.

  • Náttúrulegir lyklar eru betri en útbúnir. Pöntunarsamstilling sem er lyklum á order_id + status lifir af þótt sendandinn endurbyggi útbox sitt; handahófskennt UUID búið til á sendingartíma gerir það ekki.
  • Bindu lykilinn við áhrifin, ekki skilaboðin. Ef ein skilaboð búa til reikning og bóka birgðir, þá eru það tvö áhrif með tveimur lyklum - annars skilur hlutabilun þig eftir án þess að geta reynt hvorugt aftur á öruggan hátt.
  • Láttu lykla renna út vísvitandi. Tvítekningargagnageymsla sem vex endalaust er tímasprengja; ein sem rennur út of fljótt kemur tvítekningum aftur inn. Við notum sjálfgefið 3× hámarks endurtekningarglugga sendandans.

Prófið sem skiptir máli

Sérhver samþætting sem við afhendum stenst það sem við köllum innbyrðis tvísmellsprófið: spila alla skilaboðaskrá gærdagsins aftur inn í kerfi dagsins í dag, tvisvar, og bera saman ástandið sem útkomu. Ef eitthvað breyttist í annarri umferðinni er gagnaleiðslan ekki tilbúin.

Þetta er miskunnarlaust próf og það mistekst stöðugt á meðan á þróun stendur - vegna tímastimpla, „búið til af"-endurskoðunarreita, rununúmera. Hvert mistök er staður þar sem endurafhending klukkan 3 að nóttu hefði hljóðlega skemmt gögn. Það er miklu ódýrara að grípa villuna í þróun en í raunumhverfi.