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

Часто задаваемые вопросы

Цены

Когда с Durable Object начинает взиматься плата за длительность работы?

С Durable Object взимается плата за длительность, когда он активно выполняет JavaScript, обрабатывая запрос или запуская обработчики событий, либо когда он простаивает, но не соответствует условия для перехода в спящий режим. Неактивный Durable Object, соответствующий условиям гибернации, не влечёт начисления платы за длительность выполнения, даже в течение короткого промежутка времени перед тем, как runtime переводит его в гибернацию.

После того как объект вытеснен из памяти, при следующем обращении к нему он будет пересоздан (конструктор будет вызван заново).

Есть несколько факторов, которые могут помешать Durable Object перейти в спящий режим, из-за чего с вас продолжат взимать плату за время выполнения.

Дополнительную информацию можно найти в Жизненный цикл Durable Object.

Учитывается ли пустая таблица или база данных SQLite в объёме моего хранилища?

Да, хотя и минимально. Пустые таблицы могут занимать от нескольких килобайт в зависимости от количества столбцов (ширины таблицы). Пустая база данных SQLite занимает приблизительно 12 КБ.

Учитываются ли метаданные, хранящиеся в Durable Objects, в объёме моего хранилища?

Каждая запись в Durable Object на основе SQLite сохраняет небольшой объём метаданных во внутренних таблицах Durable Object, которые учитываются в оплачиваемом объёме хранилища.

Метаданные остаются в Durable Object, пока вы не вызовете deleteAll().

Лимиты

Какой объём работы может выполнить один Durable Object?

Durable Objects могут масштабироваться горизонтально за счёт множества Durable Objects. При этом каждый отдельный объект по своей природе однопоточен.

Durable Object, получающий слишком много запросов, после попытки поставить их в очередь вернёт перегружен ошибку вызывающей стороне.

Сколько Durable Objects можно создать?

Durable Objects спроектированы так, что количество отдельных объектов в системе не ограничено и может масштабироваться горизонтально.

Можно ли увеличить лимит CPU для Durable Objects?

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

По умолчанию максимальное время CPU на один вызов Durable Object (HTTP запрос, сообщение WebSocket или будильник) составляет 30 секунд, но его можно увеличить для всех Durable Objects, связанных с определением Durable Object, задав 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

Что происходит, если Durable Object превышает лимит хранилища?

Когда Durable Object на основе SQLite достигает своего максимальный лимит хранилища (10 ГБ на Workers Paid или 1 ГБ на плане Free), операции записи (например, INSERT, UPDATE, или вызовов put() и sql.exec() storage API) завершатся ошибкой следующего вида:

database or disk is full: SQLITE_FULL

Операции чтения (например, SELECT запросов, get(), а также list() вызовы) продолжат работать, а DELETE операции также будут выполняться успешно, чтобы вы могли удалять данные и освобождать место.

Чтобы обработать эту ошибку в своём Durable Object, перехватите исключение, которое выбрасывает storage API:

try {
	this.ctx.storage.sql.exec(
		"INSERT INTO my_table (key, value) VALUES (?, ?)",
		key,
		value,
	);
} catch (e) {
	if (e.message.includes("SQLITE_FULL")) {
		// Storage limit reached — reads and deletes still work
		// Consider deleting old data or returning a meaningful error to the caller
	}
	throw e;
}

Метрики и аналитика

Как определить, какой экземпляр Durable Object сформировал запись в журнале?

Вы можете использовать $workers.durableObjectId чтобы определить конкретный экземпляр Durable Object, создавший запись в журнале.