Dlouhé nebo dočasně nespolehlivé operace přesuňte na pozadí, vytvořte stabilní záznam úlohy a odolné zpracování. Definujte stavy, idempotenci, timeout, opakování, priority a limity souběhu, poté uživateli zobrazte průběh, výsledek, možnost bezpečného zrušení a způsob řešení chyby.
Export, import, generování dokumentu nebo volání pomalého externího systému nemusí blokovat otevřený webový požadavek. Úloha na pozadí umožní aplikaci rychle potvrdit přijetí a práci dokončit samostatně. Tím však vznikne nový stav: výsledek ještě není hotový a uživatel potřebuje vědět, co se s jeho požadavkem děje.
Fronta sama spolehlivost nevyřeší. Zpracování se může zopakovat, worker může skončit uprostřed operace a jednotlivé úlohy mohou soupeřit o kapacitu. Dobrý návrh spojuje model stavů, idempotenci, řízené opakování, priority, pozorovatelnost a uživatelské rozhraní, které neskrývá chybu za nekonečný indikátor načítání.
Rozhodněte, co má být asynchronní
Úloha na pozadí je vhodná, když operace trvá nepředvídatelně dlouho, čeká na externí službu, zpracovává větší objem nebo může pokračovat bez otevřeného prohlížeče. Krátká lokální změna nemusí procházet frontou jen kvůli architektonické módě. Asynchronnost zvyšuje počet stavů, které je třeba ukládat, vysvětlovat, testovat a provozovat.
Určete okamžik převzetí odpovědnosti. Pokud aplikace oznámí, že požadavek přijala, musí existovat trvalý záznam, ze kterého lze zpracování obnovit. Vstup uložte nebo na něj bezpečně odkažte ještě před odpovědí uživateli. U citlivých souborů nastavte přístup a dobu uchovávání i pro dočasné pracovní kopie.
Modelujte stav a idempotentní zpracování
Stavy mohou rozlišovat čekání, zpracování, úspěch, opravitelnou chybu, trvalé selhání a zrušení. Přechody definujte explicitně, aby dva workery nemohly současně provést stejný účinek. Záznam obsahuje typ úlohy, vlastníka, vstupní odkaz, pokus, časový limit a korelaci s obchodním objektem. Citlivý obsah nevkládejte přímo do obecného logu fronty.
Worker musí počítat s opakováním po ztrátě spojení nebo pádu procesu. Stabilní idempotentní klíč, kontrola existujícího výsledku a transakční hranice brání duplicitní faktuře či opakovanému odeslání. Jedna velká úloha se může dělit na kroky, ale každý potřebuje vlastní stav a jasné pravidlo pokračování po částečném úspěchu.
- jednoznačný identifikátor a vlastník úlohy
- povolené přechody mezi stavy
- časový limit a pravidlo opakování
- idempotentní účinek a dohledatelný výsledek
Řiďte opakování, priority a kapacitu
Dočasná chyba sítě může opravňovat k dalšímu pokusu s rostoucím odstupem a náhodným rozložením. Neplatný vstup se opakováním neopraví a má skončit vysvětlitelným výsledkem. Poskytovatel může určit dobu, po které lze zkusit znovu. Počet pokusů omezte a vyčerpané úlohy přesuňte do kontrolovaného toku k diagnostice.
Naléhavý uživatelský požadavek nemá čekat za rozsáhlým nočním exportem. Oddělte fronty nebo priority podle dopadu a nastavte limity souběhu pro databázi i externí API. Zpětný tlak (backpressure) zabrání přijímat práci rychleji, než ji systém zvládne. Škálování workerů musí respektovat rate limit, paměť a pořadí operací.
Ukažte uživateli pravdivý průběh
Po odeslání zobrazte, že úloha čeká nebo se zpracovává, a umožněte bezpečně zavřít stránku. Pokud neumíte vypočítat přesné procento, používejte stavové kroky místo falešně přesného ukazatele. Centrum úloh může nabídnout čas vytvoření, autora, výsledek a odkaz na výstup. Oprávnění ke stavu i výslednému souboru vždy znovu ověřte.
Zrušení potřebuje definovanou sémantiku. Některou práci lze zastavit před zahájením, jinou pouze označit, aby nepokračovala dalším krokem. Uživatel musí vědět, zda už vznikl částečný účinek. Při chybě nabídněte srozumitelné řešení, možnost opravit vstup nebo kontaktovat podporu s bezpečným identifikátorem, nikoli se surovou výjimkou.
Monitorujte frontu a nacvičte provozní zásahy
Sledujte stáří nejstarší čekající úlohy, délku fronty podle typu, dobu zpracování, opakování, selhání a vyčerpané položky. Samotný počet zpráv může přirozeně kolísat; alarm važte na dopad a rostoucí zpoždění. Korelační identifikátor propojí uživatelský požadavek, úlohu, externí volání a výsledek bez zapisování celého obsahu.
Provozní postup vysvětlí, jak pozastavit problematický typ, změnit kapacitu, bezpečně zopakovat položku a vyhodnotit částečný účinek. Hromadné opětovné spuštění bez kontroly může incident zhoršit. Po změně kódu ověřte kompatibilitu již čekajících zpráv. Vlastník pravidelně odstraňuje zastaralé typy a kontroluje dobu uchovávání vstupů i výsledků.
Časté dotazy
Musí každá pomalejší operace jít přes frontu?
Ne. Posuďte trvání, spolehlivost závislostí, potřebu pokračovat po zavření stránky a náklady na nový stav. Jednoduchá krátká operace může zůstat součástí běžného požadavku.
Proč se úloha na pozadí může provést opakovaně?
Worker může dokončit účinek a ztratit potvrzení nebo skončit uprostřed zpracování. Fronta proto často doručí položku znovu. Idempotentní návrh zabrání duplicitnímu obchodnímu výsledku.
Dá se přesně zobrazit procento dokončení?
Pouze pokud je práce měřitelně rozdělená a zbývající rozsah znáte. U nepředvídatelného externího kroku jsou poctivější pojmenované stavy a informace o čekání než vymyšlená přesnost.