INTEGRITY Dokumentace

Limity

Limity, které platí pro vytváření, nasazování a spouštění Workflows, jsou podrobně popsány níže.

Mnohé limity jsou zděděny z limitů platných pro skripty Workers a jsou zdokumentovány v Limity Workers dokumentace.

Funkce Workers Free Workers Paid
Definice tříd Workflow na skript 3MB max. velikost skriptu na Limity velikosti Workeru 10MB max. velikost skriptu na Limity velikosti Workeru
Celkový počet skriptů na účet 100 500 (sdíleno s Limity skriptů Worker
Výpočetní čas na krok 1 10 ms 30 sekund (výchozí) / nastavitelné až na 5 minut aktivní doba CPU
Doba trvání (reálný čas) na krok 1 Neomezeně Neomezeno, například čekání na síťové vstupně-výstupní operace nebo dotazy do databáze
Maximální velikost nestreamovaného výsledku na krok 2 1MiB (2^20 bajtů) 1MiB (2^20 bajtů)
Maximální velikost payloadu 1MiB (2^20 bajtů) 1MiB (2^20 bajtů)
Maximální stav, který lze uchovat na instanci Workflow 3 100MB 1GB
Maximální doba trvání step.sleep doba trvání 365 dní (1 rok) 365 dní (1 rok)
Maximální počet kroků na Workflow 4 1,024 10,000 (výchozí) / lze nastavit až na 25,000
Maximální počet spuštění Workflow 100,000 za den sdílený s denním limitem Workers Neomezeně
Souběžné instance Workflow (spuštění) na účet 5 100 50,000
Maximální rychlost vytváření instancí Workflow 6 100 za sekundu 7 300 za sekundu na účet 7, 100 za sekundu na workflow
Maximální počet instance ve frontě 100,000 2,000,000
Limit uchovávání stavu dokončené instance Workflow 3 dny 30 dní 8
Maximální délka názvu Workflow 9 64 znaků 64 znaků
Maximální délka ID instance Workflow 9 100 znaků 100 znaků
Maximální počet subrequestů na instanci Workflow 50/požadavek 10,000/požadavek (výchozí) / lze nastavit až na 10 milionů
Maximální počet opakování na krok 10,000 10,000

Pokud potřebujete ve Workflows v JavaScriptu uchovat velký binární výstup z kroku, vraťte ReadableStream<Uint8Array>. Streamované výstupy se stále započítávají do limitu úložiště na instanci, proto velmi velké nebo dlouhodobě uchovávané artefakty ukládejte do externího úložiště, například R2 a v případě potřeby vrátit odkaz.

waiting instance se nezapočítávají do limitů souběžnosti instancí

Instance, které jsou ve stavu waiting stavu, ať už prostřednictvím uspání pomocí step.sleep, čeká na opakování, nebo čeká na událost prostřednictvím step.waitForEvent, provede ne se započítávají do limitů souběžnosti. To znamená, že můžete mít současně miliony instancí Workflow, které spí nebo čekají na události, protože se počítají pouze aktivně running instance se započítávají do limitu 10,000 souběžných instancí. Pokud je však aktivně spuštěno 10,000 souběžných instancí, instance, která byla ve stavu waiting stavu budou zařazeny do fronty místo okamžitého pokračování. Když instance přejde ze stavu running na waiting, ostatní queued instance budou naplánovány (obvykle nejstarší instance v čekání, na základě nejlepší snahy). K tomuto přechodu stavu nemusí dojít, pokud je doba čekání velmi krátká.

Představte si například Workflow, který vykoná určitou práci, počká 30 dní a poté pokračuje další prací:

src/index.ts
import {
	WorkflowEntrypoint,
	WorkflowStep,
	WorkflowEvent,
} from "cloudflare:workers";

type Env = {
	MY_WORKFLOW: Workflow;
};

export class MyWorkflow extends WorkflowEntrypoint<Env> {
	async run(event: WorkflowEvent<unknown>, step: WorkflowStep) {
		await step.do("initial work", async () => {
			let resp = await fetch("https://api.cloudflare.com/client/v4/ips");
			return await resp.json<any>();
		});

		await step.sleep("wait 30 days", "30 days");

		await step.do(
			"make a call to write that could maybe, just might, fail",
			{
				retries: {
					limit: 5,
					delay: "5 seconds",
					backoff: "exponential",
				},
				timeout: "15 minutes",
			},
			async () => {
				if (Math.random() > 0.5) {
					throw new Error("API call to $STORAGE_SYSTEM failed");
				}
			},
		);
	}
}

Pokud daná instance Workflow čeká 30 dní, přejde do stavu waiting stavu, což umožňuje jiným queued instance ke spuštění, pokud jsou dosaženy limity souběžnosti.

Instance spouštěné cronem na Workers Paid

Na Workers Paid, instance Workflow vytvořené schedules může běžet až jednu hodinu na jedno spuštění cronu, aniž by spotřeboval slot souběžnosti Workflow.

Jakmile je tento rozpočet vyčerpán, instance se pozastaví a zařadí do běžné fronty souběžnosti. Pokračuje ve chvíli, kdy je k dispozici volný slot souběžnosti. Kvůli vyčerpání tohoto cron rozpočtu souběžnosti instance neselže, nedojde jí čas ani se neukončí.

Následující omezení platí pro Workflow schedules:

Limit Hodnota
Maximální počet schedules (cron výrazy) na účet 100
Maximální délka cron výrazu 256 znaků

Zvýšení limitů počtu kroků pro Workflow

Každá instance Workflow standardně podporuje 10,000 kroků, ale v konfiguraci nástroje Wrangler lze tento limit zvýšit až na 25,000 kroků. Více informací najdete v Limity kroků Workflow s dalšími informacemi.

Zvýšení limitů CPU pro Workflow

Workflows jsou skripty Workers a sdílejí stejné limity CPU na jedno volání stejně jako kterýkoli Worker. Upozorňujeme, že čas CPU je aktivní doba zpracování: nezahrnuje čas strávený čekáním na síťové požadavky, volání úložiště ani jiné běžné vstupně výstupní operace, které se do vašeho času CPU ani spotřeby výpočetního výkonu Workflows nezapočítávají.

Pokud váš Workflow překročí limit doby využití CPU, vyvolá následující chybu:

Error: Worker exceeded CPU time limit.

Zobrazí se jako exceededCpu v wrangler tail výsledky a jako exceededResources v Metriky Workers.

Maximální doba CPU na jedno spuštění Workflow je ve výchozím nastavení 30 sekund, lze ji ale zvýšit pro všechna spuštění patřící k dané definici Workflow nastavením limits.cpu_ms ve vaší konfiguraci Wrangler:

{
	// ...rest of your configuration...
	"limits": {
		"cpu_ms": 300000, // 300,000 milliseconds = 5 minutes
	},
	// ...rest of your configuration...
}
[limits]
cpu_ms = 300_000

Chcete-li se dozvědět více o CPU čase a limitech, prostudujte dokumentaci Workers.

Zvýšení limitů subrequestů pro Workflow

Subrequest je jakýkoli požadavek, který Workflow odešle buď na internetové zdroje pomocí Fetch API nebo požadavky na jiné služby Cloudflare, jako je R2, KV, nebo D1. Protože Workflows běží dlouhodobě a často provádějí mnoho volání externích služeb nebo Cloudflare API, mohou překročit výchozí limit subrequestů.

Pokud váš Workflow překročí limit počtu subrequestů, vyvolá následující chybu:

Error: Too many subrequests.

Zobrazí se jako exceededResources v Metriky Workers a jako exception v wrangler tail výsledky.

Maximální počet subrequestů na jednu instanci Workflow je ve výchozím nastavení 10,000 v plánech Workers Paid, ale lze jej zvýšit až na 10 milionů nastavením limits.subrequests ve vaší konfiguraci Wrangler:

{
	// ...rest of your configuration...
	"limits": {
		"subrequests": 10000000, // 10 million (maximum)
	},
	// ...rest of your configuration...
}
[limits]
subrequests = 10_000_000

Workers na bezplatném plánu mají limit 50 externích subrequestů a 1,000 subrequestů do služeb Cloudflare na jedno volání.

Další informace o limitech dílčích požadavků najdete prostudujte dokumentaci Workers.

Limity reálného času podle typu vyvolání

Reálný čas (anglicky též "wall-clock time") představuje celkovou dobu od začátku do konce vyvolání, včetně času stráveného čekáním na síťové požadavky, I/O operace a další asynchronní operace. Liší se od Čas CPU, které měří pouze čas, který CPU stráví aktivním prováděním vašeho kódu.

Následující tabulka shrnuje limity reálného času pro různé typy vyvolání Workeru v rámci vývojářské platformy:

Invocation type Limit reálného času Podrobnosti
Příchozí HTTP požadavek Neomezeně Žádný pevný limit, dokud zůstává klient připojen. Worker, který stále streamuje tělo odpovědi, zůstává aktivní. waitUntil() prodlužuje běh až o 30 sekund po odeslání odpovědi nebo odpojení.
Cron Triggers 15 minut Naplánovaní Workers mají maximální reálný čas běhu 15 minut na jedno vyvolání.
Queue consumers 15 minut Každé volání consumeru má maximální reálný čas běhu 15 minut.
Obslužné rutiny alarmů v Durable Object 15 minut Volání alarm handleru mají maximální reálnou dobu běhu (wall time) 15 minut.
Durable Objects (RPC / HTTP) Neomezeně Žádný pevný limit, dokud zůstává volající připojen k Durable Object. Durable Objects zůstávají aktivní, dokud probíhá požadavek, RPC volání, stream odpovědi, WebSocket nebo čekající I/O operace.
Workflows (na krok) Neomezeně Každý krok může běžet po neomezenou dobu. Na jednotlivé kroky se vztahuje nakonfigurovaný Limit CPU času.

Poznámky pod čarou

  1. Instance Workflow může běžet neomezeně dlouho, pokud žádný krok nepřekročí limit CPU času a není dosažen maximální počet kroků na Workflow. ↩ ↩2

  2. Platí pro nestreamované step.do() návratové hodnoty. V JavaScript Workflows ReadableStream<Uint8Array> je také podporovaný serializovatelný návratový typ pro větší binární výstup. ↩

  3. Tento součet zahrnuje persistované bajty ze streamovaných výstupů kroků vrácených z JavaScriptu step.do() volání. ↩

  4. step.sleep se nezapočítává do limitu maximálního počtu kroků ↩

  5. Do limitů souběžnosti se započítávají pouze instance se stavem running stav se započítává do limitů souběžnosti. Instance ve stavu waiting stavy jsou z těchto limitů vyloučeny. Instance Workflow spouštěné pomocí cronu v plánu Workers Paid mají pro každé spuštění samostatný hodinový limit souběžnosti pro cron. ↩

  6. Každá vytvořená nebo restartovaná instance se počítá do tohoto limitu ↩

  7. Pokud překročíte limit rychlosti vytváření nových instancí Workflow, Workflows vrátí chybu HTTP 429 rate limited. ↩ ↩2

  8. Stav instance a protokoly Workflow se uchovávají po dobu 3 dnů v plánu Workers Free a po dobu 30 dnů v plánu Workers Paid. ↩

  9. Vzor pro shodu: _^[a-zA-Z0-9_][a-zA-Z0-9-_]\*$_ ↩ ↩2