castomFLOW

Køyringar du kan stole på

Ingen legg merke til ein automatisering før han sender noko to gonger

Så legg alle merke til han. Dei fire mekanismane på denne sida finst fordi feila i denne typen programvare alltid er dei same fire feila, og alle er dei unngåelege ved design i staden for ved omsorg.

Simuler før du publiserer

Send ein ekte post gjennom ei arbeidsflyt som er slått av, og les attende nøyaktig kva som ville skjedd: vegen som blei teken, kvar verdi ved kvart steg, ordlyden i kvar melding, og førespurnaden som ville gått til kvart eksternt system.

Ingenting forlet bygningen. Ingen e-post blir sendt, ingen faktura blir oppretta, ingen belastning blir forsøkt, ingen rad blir skriven. Eksterne kall blir registrerte som intensjonar, med nyttelasta som ville blitt sendt, slik at du kan sjå om mappinga er riktig før det blir nokons problem.

Simuleringar er måten du svarar på spørsmålet som stoppar folk frå å slå på ein automasjon: kva gjer denne eigentleg?

Simulering · ordre 88 214Ingenting sendt
  • 1Valider adresseFann samsvar. Ville ha skrive 6 felt.
  • ?VilkårOrdre over 1 000 zł? Nei — 289,00 zł. Kort veg vald.
  • 3FakturaVille ha gjort POST til faktureringssystemet. Nyttelasta vist i full lengd.
  • !Fanga herMva-sats mappa frå feil felt. Oppdaga i ein simulering i staden for i ein revisors innboks.

Sendt: ingentingBelasta: ingenting

Ei køyring går på versjonen ho kom inn på

Å publisere ei endring i ein arbeidsflyt rører ikkje køyringane som allereie er inne i han. Kvar køyring er låst til versjonen ho starta på og fullfører den versjonen, uansett kor lang tid det tar og kor mykje du skriv om i mellomtida.

Så du kan omstrukturere ein arbeidsflyt medan ti tusen menneske er halvvegs i han, og kvar og ein av dei fullfører flyten dei vart lova. Alternativet — utforminga der heile den nedstraumse vegen blir materialisert ved inngang — er grunnen til at det å redigere ein live automasjon kjennest farleg i dei fleste verktøya. Her er det heilt uproblematisk.

Nye køyringar får den nye versjonen frå augneblikket du publiserer. Kva versjon ei køyring er på, står skrive på køyringa sjølv, så eit spørsmål om åtferda i mars har eit svar i september.

Redigering medan alt er livev4 → v5
  • 1Før2 918 køyringar pågår, alle på v4. Nokre i eit todagers ventepunkt.
  • 2Publiser v5To steg omstokka, ei melding skriven om.
  • 3EtterDei 2 918 fullfører v4. Alt som startar frå 11:40 køyrer v5.
  • §Ingenfekk halvparten av ein arbeidsflyt og halvparten av ein annan.

Versjon registrert på kvar køyringGamle versjonar tekne vare på

Nytt forsøk som ikkje kan sende dobbelt

Eit steg er ein rein funksjon av inndataene sine, og effektane blir commita saman med køyringa si eiga vidareføring til neste steg. Det finst ikkje noko vindauge der meldinga er sendt, men køyringa ikkje veit det.

Det er heile trikset, og det er ein strukturell eigenskap, ikkje eit løfte. Ein worker som blir drepen midt i eit steg — ein utrulling, eit krasj, ein maskin som forsvinn — let køyringa ligge akkurat der ho var. Ein annan worker tek over og køyrer steget på nytt. Sidan effekten og vidareføringa blir commita som éi, har det skjedd anten begge eller ingen.

Utgåande kall til system som støttar idempotensnøklar ber med seg ein, avleidd frå køyringa og steget, slik at motparten også kan kjenne att gjentakinga.

Worker drepen midt i sendingaAttoppretta
  • 1Steg 5 byrjarSend fraktvarselet.
  • ✕Worker døyrUtrulling. Ingenting var commita.
  • 2Tek overEin annan worker finn køyringa framleis på steg 5.
  • ✓Sendt éin gongKunden fekk éin e-post, ikkje to.

Effektar blir commita saman med vidareføringaIdempotensnøkkel per køyring og steg

Ein logg skriven for at eit menneske skal lesa han

Kvar køyring, kvart steg, greina han tok og verdien som avgjorde det. Tidsmålingar per steg. Førespurnaden og svaret frå kvart eksternt kall, med påloggingsopplysningar fjerna. Versjonen køyringa gjekk på. Der ei køyring ventar, og kor lenge.

Når nokon spør kva som skjedde med ordre lagt inn den fjortande, finst det eit svar, og å finna det tek eit minutt i staden for ein ettermiddag med å kopla saman loggane frå tre system.

Køyringar som feilar samlast på eitt stad med årsaka gruppert, slik at «førti–ein feil i natt» blir til «ein leverandør returnerte 503 i ni minutt» i staden for førti–ein separate undersøkingar.

I natt, gruppert41 feil
  • 1Éi årsakLeverandør-API returnerte 503 mellom 02:41 og 02:50.
  • 2Kva som skjeddeAlle 41 vart prøvd på nytt; 39 lukkast på andre forsøket.
  • 3AttståandeTo stoppa og ventar på eit menneske. Begge er lista opp med rada som feila.
  • §Ikkje førti–einundersøkingar. Éi, og ei avgjerd om to postar.

Påloggingsopplysningar fjernaVersjon registrert

Kva vi ikkje hevdar

Vi publiserer ikkje ei oppetidstal på ein marknadsføringsside, fordi eit tal utan eit måleintervall og ei definisjon av «oppe» berre er pynt. Om du treng ein kontraktsmessig, spør, og vi snakkar om kva vi faktisk kan forplikta oss til.

Vi kan heller ikkje gjera nokon andre sitt API påliteleg. Om ein leverandør er nede, ventar, prøver og til slutt stoppar ein arbeidsflyt som er avhengig av han, med ei tydeleg årsak. Det vi kan lova, er at feilen er synleg, at han ikkje øydeleggjer noko, og at å halda fram ikkje sender meldinga ein andre gong.

Om venting: ei køyring som ventar i to dagar er ein wake_at på køyringa, ikkje ein jobb som ligg i ei kø. Det er derfor ein arbeidsflyt kan ha hundre tusen køyringar i eit tre-ukers ventehøve utan at noko av det kostar noko, og derfor talet på køyringar som ventar no ikkje er noko du treng å tenkja på.

Køyringa du aldri tenkjer på, er den som lukkast.