← Cloudflare Durable Objects / durable-objects / reference
Časté dotazy
Ceny
Kdy se Durable Objectu účtují poplatky za dobu běhu?
Durable Object účtuje poplatky za dobu trvání, když aktivně vykonává JavaScript, tedy zpracovává požadavek nebo spouští obslužné rutiny událostí, nebo když je nečinný, ale nesplňuje podmínky pro hibernaci. Neaktivní Durable Object, který splňuje podmínky pro hibernaci, neúčtuje poplatky za dobu běhu, a to ani v krátkém okně předtím, než ho runtime hibernuje.
Jakmile je objekt vyřazen z paměti, při příštím použití se znovu vytvoří opětovným zavoláním konstruktoru.
Existuje několik faktorů, které mohou Durable Object zabránit v hibernaci a způsobit, že mu budou nadále účtovány poplatky za dobu běhu.
Další informace najdete v Životní cyklus Durable Object.
Přispívá prázdná tabulka nebo databáze SQLite k mému úložišti?
Ano, i když minimální. Prázdné tabulky mohou zabírat alespoň několik kilobajtů v závislosti na počtu sloupců (šířce tabulky). Prázdná databáze SQLite zabírá přibližně 12 KB úložiště.
Počítají se metadata uložená v Durable Objects do mého úložiště?
Každý zápis do Durable Object založeného na SQLite ukládá do interních tabulek Durable Object nepatrné množství metadat, které se započítává do vašeho zpoplatněného úložiště.
Metadata zůstávají v Durable Object, dokud nezavoláte deleteAll().
Limity
Kolik práce zvládne jeden Durable Object?
Durable Objects lze škálovat horizontálně napříč velkým množstvím Durable Objects. Každý jednotlivý objekt je ze své podstaty jednovláknový.
- Jednotlivý objekt má měkký limit 1,000 požadavků za sekundu. Počet jednotlivých objektů v rámci namespace není omezen.
- Jednoduchý úložiště
get()na malé hodnotě, která rovnou vrátí odpověď, může dosáhnout vyšší propustnosti požadavků než Durable Object, který (například) serializuje nebo deserializuje velké JSON hodnoty. - Podobně platí, že Durable Object, který provádí více
list()operace mohou mít omezenější propustnost požadavků.
Durable Object, který obdrží příliš mnoho požadavků, se je nejprve pokusí zařadit do fronty a poté vrátí přetížený chybu volajícímu.
Kolik Durable Objects mohu vytvořit?
Durable Objects jsou navržené tak, že počet jednotlivých objektů v systému nemusí být omezený a lze je škálovat horizontálně.
- Můžete vytvořit a spouštět tolik samostatných Durable Objects, kolik chcete, v rámci daného namespace.
- Při použití Durable Objects s úložištěm SQLite na plánu Workers Paid neplatí pro úložiště na účet žádné limity.
- Každý Durable Object s úložištěm SQLite má v plánu Workers Paid limit úložiště 10 GB.
- Viz Limity Durable Object s dalšími informacemi.
Mohu zvýšit limit CPU pro Durable Objects?
Durable Objects jsou skripty Workeru a mají stejné limity CPU na jedno volání stejně jako kterýkoli jiný Worker. Upozorňujeme, že čas CPU je aktivní čas zpracování: nezapočítává se do něj čas čekání na síťové požadavky, volání úložiště ani jiné obecné vstupně výstupní operace, takže se nepočítají do vašeho času CPU ani do spotřeby výpočetního výkonu Durable Objects.
Ve výchozím nastavení je maximální doba CPU na jedno volání Durable Object (HTTP požadavek, zpráva WebSocket nebo Alarm) nastavena na 30 sekund, ale lze ji zvýšit pro všechny Durable Objects patřící k dané definici Durable Object 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_000Co se stane, když Durable Object překročí limit úložiště?
Když Durable Object s úložištěm SQLite dosáhne svého maximální limit úložiště (10 GB v plánu Workers Paid nebo 1 GB v plánu Free), operace zápisu (například INSERT, UPDATE, nebo volání do put() a sql.exec() storage API) selžou s následující chybou:
database or disk is full: SQLITE_FULLOperace čtení (například SELECT dotazů, get(), a list() volání) budou nadále fungovat a DELETE operace se také podaří, takže můžete data odstranit a uvolnit místo.
Chcete-li tuto chybu ve svém Durable Object ošetřit, zachyťte výjimku vyvolanou 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;
}Metriky a analytika
Jak zjistím, která instance Durable Object vygenerovala daný záznam v logu?
Můžete použít $workers.durableObjectId pro identifikaci konkrétní instance Durable Object, která záznam protokolu vygenerovala.