Paralelní cron - PostponedTaskCron

PostponedTaskCron může spouštět od verze 5.7.40 naplánované úkoly. Jedná se o tzv. "Paralelní cron" tedy cron, který může být naklonován a pouštěn vícekrát. Umožňuje tak odbavovat větší množství dlouhotrvajících úloh.

Před spuštěním PostponedTaskCron je potřeba deaktivovat cron Cron! Poté už ho nezapínat, PostponedTaskCron nahrazuje původní Cron!

Postup nasazení paralelního fungování

Pro využití PostponedTaskCron k paralelnímu odbavování naplánovaných úkolů je potřeba následující postup:

  1. Vypnout cron Cron
  2. Vytvořit tolik instancí PostponedTaskCron, kolik potřebujete. Jako aktuální best practice se osvědčilo 4 instance — počet lze ale libovolně škálovat nahoru podle zátěže a výkonu prostředí, 4 rozhodně nejsou strop.
  3. Každé instanci nastavit spouštění každých 5 minut, posunuté proti sobě tak, aby se crony nespouštěly ve stejný okamžik. V příkladu níže je posun řešen kombinací sekund (01, 15, 30, 45) a startovní minuty v intervalu /5 (0, 1, 2, 3).
  4. Střídavě nastavit parametr startFromNewest — sudé instance true, liché false (crony jedou proti sobě).
  5. U všech instancí nastavit nízkou hodnotu parametru limit (v příkladu 25).
Pro ještě vyšší propustnost je možné na prostředí zapnout více cronových backendů. Toto nastavení musí provést DevOps.
Konkrétní příklad konfigurace 4 instancí (best practice)

Všechny instance běží každých 5 minut po celý den (výraz hodin *), sdílí fromTime, lockTtl: 1800000 a limit: 25. Liší se sekundou, startovní minutou intervalu /5 a parametrem startFromNewest.

PostponedTaskCron (instance 1) — v 01 sekund, každých 5 minut od minuty 0
sekundyminutyhodinydnyměsícetýdny
010-59/5****
Parametry:
{
            "fromTime": "2025-09-25T06:00:00.000Z",
            "lockTtl": 1800000,
            "startFromNewest": false,
            "limit": 25
          }
PostponedTaskCron_2 — v 15 sekund, každých 5 minut od minuty 1
sekundyminutyhodinydnyměsícetýdny
151-59/5****
Parametry:
{
            "fromTime": "2025-09-25T06:00:00.000Z",
            "lockTtl": 1800000,
            "startFromNewest": true,
            "limit": 25
          }
PostponedTaskCron_3 — v 30 sekund, každých 5 minut od minuty 2
sekundyminutyhodinydnyměsícetýdny
302-59/5****
Parametry:
{
            "fromTime": "2025-09-25T06:00:00.000Z",
            "lockTtl": 1800000,
            "startFromNewest": false,
            "limit": 25
          }
PostponedTaskCron_4 — v 45 sekund, každých 5 minut od minuty 3
sekundyminutyhodinydnyměsícetýdny
453-59/5****
Parametry:
{
            "fromTime": "2025-09-25T06:00:00.000Z",
            "lockTtl": 1800000,
            "startFromNewest": true,
            "limit": 25
          }
Klíčová doporučení: nastavit nízký limit, spouštět crony často, střídat směr řazení (startFromNewest — instance proti sobě) a zajistit, aby se jednotlivé instance nespouštěly ve stejný okamžik. V příkladu je to zajištěno kombinací různé sekundy (01/15/30/45) a různé startovní minuty intervalu /5 (0/1/2/3), takže se běhy vzájemně prokládají.

Konfigurace

V rámci cronu lze nastavit následující parametry:

fromTime

Definuje od kdy bude cron brát naplánované úkoly. Může být vložen string nebo timestamp. Default je nastaven na null (což znamená 1970). Toto nastavení se hodí v případě kdy by z nějakého důvodu bylo potřeba nastavit další cron až od nějakého specifického data. Je to pojistka v podstatě pro to když by se nějaký cron vytížil a nešel spustit další. V příkladu výše je u všech instancí shodně nastaven na "2025-09-25T06:00:00.000Z".

lockTtl

Doba na jakou se zamkne úkol, po tuto dobu není možné úkol aktivovat. Aby cron zpracoval a aktivoval naplánovaný úkol musí projít zápis unikátního záznamu do Redis. Pokud ho nezíská, úkol přeskočí. Tím se zajistí, že se dva a více cronů nesnaží najednou aktivovat stejný úkol. Zámky se explicitně neodemykají, ale nechává se jim vypršet jejich platnost. Výchozí hodnota je 30 minut (1800000 ms). Takový úkol je tedy možné zaktivovat až po daném termínu.

limit

Dostupné od verze 5.7.71. Maximální počet položek zpracovaných v jednom běhu. Limit se aplikuje zvlášť pro Events a InstanceTasks. Typ: number. Výchozí hodnota: 1000. V příkladu výše je u všech instancí nastaven na 25.

startFromNewest

Dostupné od verze 5.7.71. Určuje pořadí řazení zpracovávaných úkolů. Hodnota true znamená řazení od nejnovějších po nejstarší, hodnota false od nejstarších po nejnovější. Typ: boolean. Výchozí hodnota: false. V příkladu výše se hodnota u jednotlivých instancí střídá (false / true / false / true), aby crony zpracovávaly frontu z obou konců proti sobě.

Frantisek Brych Updated by Frantisek Brych

CleanupCron

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)