Imkien f'kull kuntratt ta' integrazzjoni hemm sentenza bħal "kull order jiġi trażmess darba eżatt." Qatt darba ma kienet vera. In-network ġiet ipparttitat f'nofs it-talba u l-mibgħut reġa' pprova; il-kju reġa' kkonsenja wara li konsumatur waqa'; operatur tal-maħżen għafas il-buttuna tal-esportazzjoni darbtejn. Id-duplikati mhumiex modalità ta' ħsara - huma t-temp.
Idempotency keys, magħżula bir-reqqa
Is-soluzzjoni hija qadima u mhux glamoruża: kull messaġġ iġorr key, u l-ipproċessar ma jagħmel xejn meta l-key tkun diġà ntlaħqet. Id-deċiżjonijiet interessanti kollha jinsabu fl-għażla tal-key.
- Il-keys naturali jirbħu lil dawk ġenerati. Sinkronizzazzjoni ta' order ibbażata fuq
order_id + statustibqa' tiflaħ meta l-mibgħut jerġa' jiġġenera l-outbox tiegħu; UUID każwali maħluq fil-ħin tal-bgħit ma jibqax. - Iddefinixxi l-ambitu tal-key għall-effett, mhux għall-messaġġ. Jekk messaġġ wieħed joħloq fattura u jirriżerva l-istokk, dawk huma żewġ effetti b'żewġ keys - inkella ħsara parzjali tħallik ma tistax terġa' tipprova b'sigurtà lil xi wieħed minnhom.
- Skadi l-keys apposta. Ħażna ta' dedup li tikber għal dejjem hija bomba bil-ħin; waħda li tiskadi kmieni wisq tintroduċi mill-ġdid id-duplikati. Bħala default nużaw 3× l-orizzont massimu ta' retry tal-mibgħut.
It-test li jgħodd
Kull integrazzjoni li nikkonsenjaw tgħaddi minn dak li internament insejħulu t-double-tap test: erġa' rrunja l-log kollu tal-messaġġi tal-bieraħ kontra s-sistema tal-lum, darbtejn, u ddiffja l-istat riżultanti. Jekk xi ħaġa tinbidel fit-tieni għaddiena, il-pipeline mhux lest.
Huwa test brutali u jfalli kontinwament matul l-iżvilupp - fuq timestamps, fuq kampi ta' awditjar "created by", fuq counters ta' sekwenza. Kull falliment huwa post fejn konsenja mill-ġdid fit-3 ta' filgħodu kienet toħloq korruzzjoni siekta tad-dejta. Ferm irħas li taqbad l-iżball waqt l-iżvilupp milli fil-produzzjoni.