castomFLOW

Běhy, kterým můžete věřit

Automatizace si nikdo nevšimne, dokud něco nepošle dvakrát

Pak si ji všimnou všichni. Čtyři mechanismy na této stránce existují proto, že selhání tohoto druhu softwaru jsou vždy ta samá čtyři selhání — a všechna se dají vyhnout návrhem, ne pečlivostí.

Simulujte před publikováním

Pusťte skutečný záznam workflowem, který je vypnutý, a přečtěte si přesně, co by se stalo: zvolenou cestu, každou hodnotu v každém kroku, znění každé zprávy a požadavek, který by odešel do každého externího systému.

Nic neopustí budovu. Neodejde žádný e-mail, nevytvoří se žádná faktura, nepokusí se žádné zatížení karty, nezapíše se žádný řádek. Externí volání se zaznamenávají jako záměry, včetně dat, která by byla odeslána, takže uvidíte, zda je mapování správné, dřív než se z toho stane někdo problém.

Simulace jsou způsob, jak odpovědět na otázku, která lidem brání automatizaci zapnout: co to ve skutečnosti udělá?

Simulace · objednávka 88 214Nic nebylo odesláno
  • 1Ověřit adresuShoda nalezena. Bylo by zapsáno 6 polí.
  • ?PodmínkaObjednávka nad 1 000 zł? Ne — 289,00 zł. Zvolena krátká cesta.
  • 3FakturaByl by odeslán POST do fakturačního systému. Data zobrazena v plném znění.
  • !Zachyceno zdeSazba DPH mapovaná z nesprávného pole. Odhaleno v simulaci, nikoli v e-mailové schránce účetního.

Odesláno: nicZatíženo: nic

Průběh jde verzí, na které vstoupil

Publikování změny workflow se nedotkne průběhů, které už v něm jsou. Každý průběh je připnut k verzi, na které začal, a dokončí ji — bez ohledu na to, jak dlouho to trvá a kolik toho mezitím přepíšete.

Můžete tedy restrukturalizovat workflow, zatímco deset tisíc lidí je v půlce, a každý z nich dokončí tok, který mu byl přislíben. Alternativa — návrh, kde se celá následná cesta materializuje při vstupu — je důvodem, proč úprava živé automatizace působí ve většině nástrojů nebezpečně. Tady je to běžná záležitost.

Nové průběhy dostanou novou verzi od okamžiku publikování. Verze, na které průběh je, je zapsána přímo na průběhu, takže otázka na chování v březnu má v září odpověď.

Úpravy za běhuv4 → v5
  • 1Před2 918 průběhů v běhu, všechny na v4. Některé čekají ve dvoudenní pauze.
  • 2Publikovat v5Dva kroky přeřazeny, jedna zpráva přepsána.
  • 3PoTěch 2 918 dokončí v4. Vše, co začne od 11:40, běží na v5.
  • §Nikdonedostal polovinu jednoho workflow a polovinu druhého.

Verze zaznamenána u každého průběhuStaré verze uchovávány

Opakování, která nemohou odeslat dvakrát

Krok je čistá funkce svých vstupů a jeho účinky se ukládají společně s posunem průběhu na další krok. Neexistuje okno, ve kterém by zpráva už odešla, ale průběh by to nevěděl.

To je celý trik — a je to strukturální vlastnost, ne slib. Pracovník zabitý v půlce kroku — nasazení, pád, zmizelý stroj — nechá průběh přesně tam, kde byl. Jiný pracovník ho vyzvedne a krok spustí znovu. Protože se účinek a posun ukládají jako jedno, buď se staly oba, nebo žádný.

Odchozí volání do systémů podporujících idempotenční klíče ho nesou — odvozený z průběhu a kroku — aby druhá strana mohla opakování rozpoznat také.

Pracovník zabitý v půlce odesíláníObnoveno
  • 1Krok 5 začínáOdeslat oznámení o odeslání.
  • ✕Pracovník umřeNasazení. Nic se neuložilo.
  • 2VyzvednutoJiný pracovník najde průběh stále na kroku 5.
  • ✓Odesláno jednouZákazník dostal jeden e-mail, ne dva.

Efekty se ukládají s posunemKlíč idempotence pro každý běh a krok

Log psaný pro člověka

Každý běh, každý krok, zvolená větev a hodnota, která o ní rozhodla. Časy jednotlivých kroků. Požadavek a odpověď každého externího volání, s utajenými přihlašovacími údaji. Verze, na které běh probíhal. Kde běh čeká a do kdy.

Když se někdo zeptá, co se stalo s objednávkou ze čtrnáctého, odpověď existuje a její nalezení zabere minutu, nikoli odpoledne porovnávání logů tří systémů.

Běhy, které selžou, se shromažďují na jednom místě s důvody seskupenými podle příčiny, takže „čtyřicet jedna selhání přes noc“ se vyřeší jako „jeden dodavatel vracel 503 devět minut“ místo čtyřiceti jedna samostatných vyšetřování.

Přes noc, seskupeno41 selhání
  • 1Jedna příčinaAPI dodavatele vracelo 503 mezi 02:41 a 02:50.
  • 2Co se staloVšech 41 opakováno; 39 uspělo při druhém pokusu.
  • 3ZbýváDva se zastavily a čekají na člověka. Oba jsou uvedeny s řádkem, který selhal.
  • §Ne čtyřicet jednavyšetřování. Jedno, a rozhodnutí o dvou záznamech.

Přihlašovací údaje utajenyVerze zaznamenána

Co neuvádíme

Nezveřejňujeme údaj o dostupnosti na marketingové stránce, protože číslo bez měřicího okna a definice „dostupnosti“ je jen dekorace. Pokud jej potřebujete smluvně, napište nám a probereme, k čemu se můžeme skutečně zavázat.

Nemůžeme také učinit spolehlivým API někoho jiného. Pokud je poskytovatel nedostupný, workflow, které na něm závisí, čeká, opakuje pokusy a nakonec se zastaví s jasným důvodem. Slibovat můžeme to, že selhání je viditelné, že nic nepoškodí a že obnovení nepošle zprávu podruhé.

O čekání: běh čekající dva dny je wake_at na běhu, nikoli úloha sedící ve frontě. Proto může workflow držet sto tisíc běhů ve třítýdenním čekání, aniž by to cokoli stálo, a proto se počtem aktuálně čekajících běhů nemusíte zabývat.

Běh, o kterém nikdy nepřemýšlíte, je ten, který uspěl.