n8n v produkci: co se rozbije, když se workflow stane kritickým
Workflow, které v klidu běží na notebooku, se chová jinak ve chvíli, kdy na něm závisí firma. Režimy selhání, na které narážím při přechodu n8n automatizací z dema do produkce — a co s každým z nich dělám.
Postavit v n8n workflow, které funguje, je snadné. O tom n8n je a je to opravdu dobrý nástroj.
Co snadné není — a před čím vás nikdo nevaruje — je přechod od "tohle funguje" k "na tomhle závisí firma a musí to správně proběhnout ve tři ráno v neděli, když se nikdo nedívá". Ten přechod má konkrétní režimy selhání a jsou pokaždé stejné.
Tohle jsou ty, na které narážím nejčastěji, zhruba v pořadí, v jakém koušou.
1. Opakování, které zdvojí vedlejší efekty
Tohle je první a nejdražší.
Uzel selže kvůli výpadku sítě. n8n to zkusí znovu. Druhý pokus projde. Jenže první pokus už fakturu vytvořil, než mu vypršel čas na odpověď — takže teď jsou faktury dvě a nikdo si toho měsíc nevšimne.
Cokoli, co zapisuje do vnějšího světa, musí být idempotentní — tedy spuštění dvakrát dá stejný výsledek jako spuštění jednou. V praxi:
- Posílejte s každým požadavkem na vytvoření deterministický idempotenční klíč, pokud ho API podporuje. Spousta API ho má; skoro nikdo ho nepoužívá.
- Když API klíč nemá, nejdřív ověřte, pak zapisujte: dotázejte se na záznam podle přirozeného klíče.
- Seřaďte uzly tak, aby zápis byl poslední věc, která se stane. Workflow, které zapíše a pak dělá dalších pět kroků, má pět dalších příležitostí selhat už po nevratné části.
Pravidlo, které používám: než u uzlu zapnete opakování, zeptejte se, co se stane, když proběhne dvakrát. Když neumíte odpovědět, nezapínejte ho.
2. Žádné chybové workflow, takže selhání jsou tichá
Výchozí režim selhání rozbité automatizace není alarm. Je to ticho — a ticho vypadá přesně jako úspěch.
Nastavte chybové workflow (Settings → Error Workflow) u každého produkčního workflow, hned první den. Má dělat dvě věci: upozornit člověka tam, kam se opravdu dívá, a přidat dost kontextu k diagnóze — které workflow, které ID běhu, který uzel a jaká vstupní data to způsobila.
Rafinovanější verze téhož problému: workflow, která selžou tím, že nedělají nic. Trigger, který přestane spouštět, nevyrobí žádnou chybu, protože nic neproběhlo. To je výpadek, který nikdo tři týdny neodhalí. Jediná spolehlivá odpověď je hlídač: samostatná naplánovaná kontrola, která upozorní, když očekávaný běh neproběhl.
3. Jedno obrovské workflow
Každá zralá instalace n8n, kterou jsem viděl, má jedno workflow o šedesáti uzlech, na které nikdo nechce sáhnout. Obvykle začínalo na dvanácti.
Cena není estetická. Je v tom, že nemůžete znovu spustit krok, který selhal uprostřed, aniž byste znovu spustili všechno před ním — což u čehokoli s vedlejšími efekty znamená, že to znovu spustit nemůžete vůbec. Selhání pak vyžadují ruční opravu místo opakování.
Dělte to v místech, kde byste chtěli navázat. Rodičovské workflow volající podřízená přes Execute Workflow stojí trochu přehlednosti v editoru a kupuje vám schopnost opravit jednu fázi, aniž byste sahali na ostatní.
4. Přístupy, které vyprší o svátcích
OAuth tokeny vyprší. API klíče vymění IT oddělení, které o vašem workflow neví. Certifikáty propadnou. Všechno tohle vyrobí chyby autentizace, které vypadají jako náhlá záhadná porucha.
Pomáhají dva zvyky. Veďte si přehled, které workflow používá které přístupy — tabulku, ne kmenovou znalost. A ať zpráva z chybového workflow odlišuje chyby autentizace od všeho ostatního, protože autentizační chyba má pevnou známou příčinu a neměla by stát čtyřicet minut ladění.
5. Velikost dat a paměť
n8n předává data mezi uzly v paměti. To je v pořádku, dokud někdo nenahraje soubor o 200 MB, nebo dokud dotaz, který obvykle vrací 50 řádků, nevrátí 500 000, protože přestal platit filtr.
Hlídejte vstup. Přidejte hned na začátek explicitní kontrolu velikosti dávky a nahlas ukončete běh, když přesáhne to, na co jste to navrhli. "Příliš mnoho položek, končím" je mnohem lepší výsledek než pád na nedostatek paměti v polovině zpracování, kdy část záznamů zapsaná je a část ne.
U opravdu velkých úloh zpracovávejte po dávkách ve smyčce a předávejte odkazy — ID souborů, URL — místo obsahu souborů mezi každými dvěma uzly.
6. Žádná použitelná historie verzí
Editor je živé produkční prostředí. Upravujete, uložíte, je to naostro. Žádný pull request, žádný diff, žádné review.
Minimum, které dnes dělám: exportovat produkční workflow do JSONu a pravidelně je commitovat do gitu. Není to pořádná správa verzí — diffy jsou ošklivý, skoro nečitelný JSON — ale umíte odpovědět na "co se změnilo v úterý" a umíte obnovit funkční verzi.
Lepší varianta, pokud na tom workflow záleží: oddělená vývojová a produkční instance a povyšování importem. Pomalejší — a vyplatí se to přesně jednou.
7. Nikdo neví, co znamená "funguje"
Automatizace není správná proto, že neskončila chybou. Je správná proto, že vyrobila správný výstup.
Tenhle rozdíl je nejdůležitější u všeho s LLM, kde workflow s klidem uspěje a přitom vyrobí nesmysl. Ale platí i pro běžnou automatizaci: synchronizace dat, která proběhne čistě a synchronizuje špatné pole, je zelená fajfka a tichý problém.
Pomáhá definovat už při stavbě jedno ověřitelné tvrzení o výstupu — počet, který má sedět, součet, který se má rovnat, pole, které nesmí být nikdy prázdné — a nechat workflow to zkontrolovat a skončit chybou, když to neplatí. Není to efektní a chytí to třídu chyb, kterou monitoring nikdy nezachytí.
8. Rozhodnutí o self-hostingu, která padnou jednou a lituje se jich pak
Když hostujete sami — což já dělám — stojí za to rozhodnout tři věci vědomě, ne výchozím nastavením:
- Doba uchování dat o bězích. n8n uchovává historii běhů včetně dat, která jím protekla. U workflow, které zpracovává osobní údaje, je to tichá GDPR expozice sedící ve vaší databázi. Nastavte retenci; nenechte ji ve výchozím "navždy".
- Queue mode. Regulární režim je jednodušší a stačí, dokud nezáleží na souběžnosti. Přechod později je migrace; rozhodnutí hned je konfigurace.
- Zálohy, které zahrnují databázi. Workflow jsou v ní, spolu s přístupy a historií. Zálohovat kontejner a ne databázi znamená zálohovat nic podstatného.
Krátká verze
Když si máte odnést jednu věc: než workflow pustíte naostro, sepište si, co se stane, když každý uzel selhá, a co se stane, když proběhne dvakrát. Deset minut s papírem. Skoro každý produkční incident, který jsem s n8n zažil, by tohle cvičení odhalilo — a ty, které by neodhalilo, byly vypršené přístupy, a proto v seznamu existuje bod čtyři.
n8n není křehké. Je to opravdu dobrý nástroj, který dělá stavbu tak snadnou, že lidé přeskočí část, kde se přemýšlí o selhání. Problém není nástroj, ale těch deset chybějících minut.