castomFLOW

Zagoni, ki jim lahko zaupate

Nihče ne opazi avtomatizacije, dokler česa ne pošlje dvakrat

Potem pa jo opazijo vsi. Štirje mehanizmi na tej strani obstajajo, ker so napake te vrste programske opreme vedno iste štiri napake, vse pa se jim je mogoče izogniti z zasnovo, ne s skrbnostjo.

Pred objavo simulirajte

Zavrtite pravi zapis skozi izklopljen delovni tok in preberite natančno, kaj bi se zgodilo: pot, vsako vrednost na vsakem koraku, besedilo vsakega sporočila in zahtevek, ki bi šel v vsak zunanji sistem.

Nič ne zapusti stavbe. Ni poslanega e-poštnega sporočila, ni izstavljenega računa, ni poskus bremenitve, ni zapisane vrstice. Zunanji klici so zabeleženi kot namere, s podatkovnim paketom, ki bi bil poslan, tako da lahko preverite, ali je preslikava pravilna, preden postane komu problem.

Simulacije so odgovor na vprašanje, ki ljudi ustavi pred vklopom avtomatizacije: kaj bo to dejansko naredilo?

Simulacija · naročilo 88 214Nič poslano
  • 1Preverite naslovUjemanje. Zapisali bi 6 polj.
  • ?PogojNaročilo nad 1 000 zł? Ne — 289,00 zł. Uporabljena krajša pot.
  • 3RačunSistem za izdajo računov bi prejel POST. Celoten payload je prikazan.
  • !Tukaj ujetoDavčna stopnja DDV je bila preslikana iz napačnega polja. Odkrito v simulaciji, ne v računovodjinem predalu.

Poslano: ničZaračunano: nič

Zagon sledi različici, s katero je vstopil

Objava spremembe poteka ne vpliva na zagonе, ki so že v njem. Vsak zagon je vezan na različico, na kateri se je začel, in to različico dokonča — ne glede na to, koliko časa traja in koliko vmes spremenite.

Tako lahko preoblikujete potek, medtem ko ga deset tisoč ljudi izvaja na polovici, in vsak od njih dokonča tok, ki mu je bil obljubljen. Alternativa — zasnova, kjer je celotna nadaljnja pot materializirana ob vstopu — je razlog, da je urejanje žive avtomatizacije v večini orodij nevarno. Tukaj je to vsakdanje.

Novi zagoni dobijo novo različico od trenutka objave. Različica, na kateri je zagon, je zapisana na zagonu, zato ima vprašanje o vedenju marca odgovor septembra.

Urejanje med delovanjemv4 → v5
  • 1Prej2 918 zagonov v teku, vsi na v4. Nekateri v dvodnevnem čakanju.
  • 2Objavi v5Dva koraka preurejena, eno sporočilo prenovljeno.
  • 3PotemTistih 2 918 dokonča v4. Vse, kar se začne od 11:40, izvaja v5.
  • §Nihčeni prejel polovice enega poteka in polovice drugega.

Različica zabeležena na vsakem zagonuStare različice so ohranjene

Ponovitve, ki ne morejo dvakrat poslati

Korak je čista funkcija svojih vhodov, njegovi učinki pa se potrdijo skupaj s premikom zagona na naslednji korak. Ne obstaja okno, v katerem je sporočilo že odšlo, zagon pa tega ne ve.

To je celoten trik in gre za strukturno lastnost, ne obljubo. Delavec, ubit sredi koraka — namestitev, sesutje, izgubljena naprava — pusti zagon točno tam, kjer je bil. Drug delavec ga prevzame in ponovno izvede korak. Ker se učinek in premik potrdita kot eno, se je zgodilo oboje ali nič.

Odhodni klici do sistemov, ki podpirajo ključe idempotentnosti, take ključ nosijo — izpeljan iz zagona in koraka —, da lahko tudi druga stran prepozna ponovitev.

Delavec ubit sredi pošiljanjaObnovljeno
  • 1Korak 5 se začnePošljite obvestilo o pošiljki.
  • ✕Delavec umreNamestitev. Nič se ni potrdilo.
  • 2PrevzetoDrug delavec najde zagon še vedno na koraku 5.
  • ✓Poslano enkratStranka je prejela eno e-poštno sporočilo, ne dveh.

Učinki se potrdijo s premikomKljuč idempotentnosti na zagon in korak

Dnevnik, napisan za branje s strani človeka

Vsak zagon, vsak korak, izbrana veja in vrednost, ki jo je odločila. Časi po korakih. Zahteva in odgovor vsakega zunanjega klica, s skritimi poverilnicami. Različica, na kateri je bil zagon. Kje zagon čaka in do kdaj.

Ko nekdo vpraša, kaj se je zgodilo z naročilom, oddanim štirinajstega, obstaja odgovor, in njegovo iskanje traja minuto namesto popoldneva primerjanja dnevnikov treh sistemov.

Neuspeli zagoni se zbirajo na enem mestu z razlogi, združenimi po vrsti, tako da »enainštirideset neuspehov čez noč« razreši v »en dobavitelj je devet minut vračal 503« namesto enainštirideset ločenih preiskav.

Čez noč, združeno41 neuspehov
  • 1En vzrokAPI dobavitelja je vračal 503 med 02:41 in 02:50.
  • 2Kaj se je zgodiloVseh 41 je bilo ponovno poskusjenih; 39 je uspelo pri drugem poskusu.
  • 3OstaloDva so se ustavila in čakata na osebo. Oba sta navedena z vrstico, ki ni uspela.
  • §Ne enainštiridesetpreiskav. Ena, in odločitev o dveh zapisih.

Poverilnice zakriteRazličica zabeležena

Česa ne trdimo

Na marketinški strani ne objavljamo podatka o razpoložljivosti, ker je številka brez merilnega okna in definicije »deluje« le okrasek. Če jo potrebujete pogodbeno, vprašajte in pogovorili se bomo o tem, česa se lahko dejansko zavežemo.

Prav tako ne moremo narediti zanesljivega API-ja nekoga drugega. Če je ponudnik nedosegljiv, potek dela, ki je od njega odvisen, čaka, poskuša znova in se na koncu ustavi z jasno razlago. Obljubimo lahko, da je napaka vidna, da ne pokvari ničesar in da nadaljevanje ne pošlje sporočila drugič.

O čakanju: zagon, ki čaka dva dni, je wake_at na zagonu, ne opravilo, ki sedi v vrsti. Zato lahko potek dela drži sto tisoč zagonov v tritedenskem čakanju, ne da bi to kaj stalo, in zato števila trenutno čakajočih zagonov vam ni treba razmišljati.

Zagon, o katerem nikoli ne razmišljate, je tisti, ki je uspel.