INTEGRITY Документация

Лимиты

Ниже перечислены ограничения, которые действуют при разработке, развёртывании и выполнении Workflows.

Многие ограничения унаследованы от скриптов Workers и описаны в лимиты Workers документация.

Возможность Workers Free Workers Paid
Определения классов Workflow на скрипт 3MB, максимальный размер скрипта на Лимиты размера Worker 10MB, максимальный размер скрипта на Лимиты размера Worker
Общее количество скриптов на аккаунт 100 500 (используется совместно с Ограничения для скриптов Worker
Время вычислений на шаг 1 10 мс 30 секунд (по умолчанию) / настраивается до 5 минут активное время CPU
Длительность (по астрономическому времени) на шаг 1 Без ограничений Неограниченно, например при ожидании операций I/O по сети или запросов к базе данных
Максимальный размер результата непотокового шага 2 1MiB (2^20 байт) 1MiB (2^20 байт)
Максимальный размер события размер полезной нагрузки 1MiB (2^20 байт) 1MiB (2^20 байт)
Максимальный объём состояния, которое можно сохранить для одного экземпляра Workflow 3 100MB 1GB
Максимум step.sleep продолжительность 365 дней (1 год) 365 дней (1 год)
Максимальное количество шагов на Workflow 4 1,024 10,000 (по умолчанию) / можно настроить до 25,000
Максимальное количество выполнений Workflow 100,000 в день общий с дневным лимитом Workers Без ограничений
Одновременные экземпляры Workflow (выполнения) на аккаунт 5 100 50,000
Максимальная скорость создания экземпляров Workflow 6 100 в секунду 7 300 в секунду на аккаунт 7, 100 в секунду на один Workflow
Максимальное количество экземпляры в очереди 100,000 2,000,000
Лимит хранения состояния завершенных экземпляров Workflow 3 дня 30 дней 8
Максимальная длина имени Workflow 9 64 символа 64 символа
Максимальная длина ID экземпляра Workflow 9 100 символов 100 символов
Максимальное количество подзапросов на экземпляр Workflow 50/запрос 10,000/запрос (по умолчанию) / можно настроить до 10 миллионов
Максимальное количество повторных попыток на шаг 10,000 10,000

В JavaScript Workflows, если вам нужно сохранить большой бинарный результат шага, возвращайте ReadableStream<Uint8Array>. Потоковые выходные данные по-прежнему учитываются в лимите хранилища на экземпляр, поэтому очень большие или долгоживущие артефакты стоит хранить во внешнем хранилище, например R2 и возвращать ссылку, когда это уместно.

waiting инстансы не учитываются в лимите одновременно выполняемых инстансов

Экземпляры, которые находятся в waiting состояние: либо переход в спящий режим через step.sleep, ожидает повторной попытки или ожидает событие через step.waitForEvent : выполните не засчитываются в лимиты параллелизма. Это означает, что могут одновременно существовать миллионы экземпляров Workflow, находящихся в спящем режиме или ожидающих событий, поскольку лимитам параллелизма подлежат только активно running инстансы учитываются в лимите 10 000 одновременно выполняемых инстансов. Однако если уже выполняется 10 000 инстансов одновременно, инстанс, который находится в состоянии waiting будут поставлены в очередь вместо немедленного возобновления. Когда экземпляр переходит из состояния running к waiting, другие queued инстансы будут запланированы (как правило, это самый старый инстанс в очереди, по мере возможности). Этот переход состояния может не произойти, если время ожидания очень короткое.

Например, рассмотрим Workflow, который выполняет часть работы, ждет 30 дней, а затем продолжает выполнение:

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");
				}
			},
		);
	}
}

Когда экземпляр Workflow ожидает в течение 30 дней, он переходит в waiting состояние, позволяя другим queued инстансов для запуска, если достигнуты лимиты одновременного выполнения.

Экземпляры, запускаемые по cron, на тарифе Workers Paid

На Workers Paid, экземпляры Workflow, созданные schedules может выполняться до одного часа за одно срабатывание cron, не занимая слот параллелизма Workflow.

После исчерпания этого бюджета экземпляр приостанавливается и переходит в обычную очередь с учетом лимита параллелизма. Он возобновляет работу, когда освобождается слот параллелизма. Экземпляр не завершается ошибкой, не истекает по таймауту и не прерывается из-за использования этого бюджета параллелизма cron.

Следующие ограничения применяются к Workflow schedules:

Лимит Значение
Максимальное количество schedules (cron-выражений) на аккаунт 100
Максимальная длина cron-выражения 256 символов

Увеличение лимитов шагов Workflow

Каждый экземпляр Workflow по умолчанию поддерживает 10,000 шагов, но это значение можно увеличить до 25,000 шагов в конфигурации Wrangler. См. Лимиты шагов Workflow, где это описано подробнее.

Увеличение лимитов CPU для Workflow

Workflows являются скриптами Workers и используют одинаковые лимиты CPU на один вызов как и любые Workers. Обратите внимание: процессорное время означает время активной обработки, а не время ожидания сетевых запросов, обращений к хранилищу или других операций ввода-вывода, которое не учитывается в процессорном времени или потреблении вычислительных ресурсов Workflows.

Если ваш Workflow превысит лимит времени CPU, он выдаст следующую ошибку:

Error: Worker exceeded CPU time limit.

Это будет отображаться как exceededCpu в wrangler tail результатов, а также как exceededResources в Workers metrics.

По умолчанию максимальное время CPU на один вызов Workflow составляет 30 секунд, но его можно увеличить для всех вызовов, связанных с определением Workflow, задав limits.cpu_ms в конфигурации Wrangler:

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

Подробнее о процессорном времени и лимитах см. ознакомьтесь с документацией Workers.

Увеличение лимитов подзапросов Workflow

Подзапросом называется любой запрос, который Workflow отправляет либо к интернет-ресурсам с использованием Fetch API или запросы к другим сервисам Cloudflare, например R2, KV, или D1. Поскольку Workflows выполняются долго и часто отправляют много запросов к внешним сервисам или API Cloudflare, они могут превысить лимит подзапросов по умолчанию.

Если ваш Workflow превысит лимит подзапросов, он выдаст следующую ошибку:

Error: Too many subrequests.

Это будет отображаться как exceededResources в Workers metrics и как exception в wrangler tail результатов.

По умолчанию максимальное количество подзапросов на один экземпляр Workflow составляет 10,000 на плане Workers Paid, но его можно увеличить до 10 миллионов, задав limits.subrequests в конфигурации Wrangler:

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

На тарифе Free для Workers по-прежнему действует ограничение: 50 внешних подзапросов и 1,000 подзапросов к сервисам Cloudflare за один вызов.

Подробнее об ограничениях на количество подзапросов см. в ознакомьтесь с документацией Workers.

Лимиты астрономического времени по типу вызова

Астрономическое время (также называемое wall-clock time) обозначает общее время, прошедшее от начала до конца вызова, включая время ожидания сетевых запросов, операций ввода-вывода и других асинхронных операций. Это отличается от Процессорное время, который измеряет только время, которое CPU активно тратит на выполнение вашего кода.

В следующей таблице приведены ограничения по фактическому времени выполнения для разных типов вызовов Worker на платформе для разработчиков:

Тип вызова Лимит астрономического времени Подробности
Входящий HTTP-запрос Без ограничений Жёсткое ограничение отсутствует, пока клиент остаётся подключённым. Worker, который продолжает передавать тело ответа потоком, остаётся активным. waitUntil() продлевает выполнение до 30 секунд после ответа или отключения.
Cron Triggers 15 минут Для запланированных Workers максимальное время выполнения составляет 15 минут на один вызов.
Потребители Queue 15 минут Максимальное время выполнения каждого вызова потребителя составляет 15 минут.
Обработчики alarm Durable Object 15 минут Вызовы alarm handler выполняются не более 15 минут.
Durable Objects (RPC / HTTP) Без ограничений Жёсткое ограничение отсутствует, пока вызывающая сторона остаётся подключённой к Durable Object. Durable Object остаётся активным, пока выполняется запрос, RPC-вызов, передача ответа, соединение WebSocket или ожидающая операция ввода-вывода.
Workflows (за шаг) Без ограничений Каждый шаг может выполняться неограниченное время. На отдельные шаги распространяется настроенный Лимит времени CPU.

Сноски

  1. Экземпляр Workflow может выполняться бесконечно долго, если каждый шаг укладывается в лимит процессорного времени и не превышено максимальное количество шагов на Workflow. ↩ ↩2

  2. Применяется к нестриминговым step.do() возвращаемые значения. В JavaScript Workflows, ReadableStream<Uint8Array> также является поддерживаемым сериализуемым типом возвращаемого значения для больших бинарных данных. ↩

  3. В общий объём входят сохранённые байты из потоковых выходных данных шага, возвращённых из JavaScript step.do() вызовов. ↩

  4. step.sleep не учитывается при подсчёте максимального количества шагов ↩

  5. Только для экземпляров с running учитываются в лимитах параллелизма. Экземпляры в состоянии waiting исключены из этих лимитов. Для экземпляров Workflow плана Workers Paid, запускаемых по cron, действует отдельный часовой бюджет параллелизма cron на каждый запуск. ↩

  6. Каждый созданный или перезапущенный экземпляр учитывается в рамках этого лимита ↩

  7. Workflows вернёт ошибку HTTP 429 (превышено ограничение скорости), если вы превысите скорость создания новых экземпляров Workflow. ↩ ↩2

  8. Состояние экземпляра Workflow и журналы хранятся 3 дня на тарифе Workers Free и 30 дней на тарифе Workers Paid. ↩

  9. Шаблон соответствия: _^[a-zA-Z0-9_][a-zA-Z0-9-_]\*$_ ↩ ↩2