← Cloudflare Durable Objects / durable-objects / platform
Limity
Durable Objects jsou zvláštní typ Workeru, takže Workers Limits se uplatňují podle vašeho plánu Workers. Durable Objects navíc mají specifické limity uvedené na této stránce.
Obecné limity Durable Objects podporovaných SQLite
| Funkce | Limit |
|---|---|
| Počet objektů | Neomezeno (v rámci účtu nebo dané třídy) |
| Maximum tříd Durable Object (na účet) | 500 (Workers Paid) / 100 (Free) 1 |
| Úložiště na účet | Neomezeno (Workers Paid) / 5GB (Free) 2 |
| Úložiště na třídu | Neomezeno 3 |
| Úložiště na jeden Durable Object | 10 GB 3 |
| Velikost klíče | Klíč a hodnota dohromady nesmí přesáhnout 2 MB |
| Velikost hodnoty | Klíč a hodnota dohromady nesmí přesáhnout 2 MB |
| Velikost zprávy WebSocketu | 32 MiB (pouze pro přijaté zprávy) |
| CPU na požadavek | 30 sekund (výchozí) / nastavitelné až na 5 minut aktivní doba CPU 4 |
| Souběžná odchozí připojení na požadavek | 6 (stejné jako Workers) |
Limity úložiště SQL
U tříd Durable Object s Úložiště SQLite platí tato omezení SQL:
| SQL | Limit |
|---|---|
| Maximální počet sloupců v tabulce | 100 |
| Maximální počet řádků v tabulce | Neomezeno (kromě limitů úložiště na jeden objekt) |
Maximální řetězec, BLOB nebo velikosti řádku tabulky |
2 MB |
| Maximální délka příkazu SQL | 100 KB |
| Maximální počet vázaných parametrů na dotaz | 100 |
| Maximální počet argumentů na funkci SQL | 32 |
Maximální počet znaků (bajtů) v LIKE nebo GLOB vzor |
50 bajtů |
Obecné limity Durable Objects podporovaných KV
| Funkce | Limit pro třídu s úložištěm typu klíč-hodnota |
|---|---|
| Počet objektů | Neomezeno (v rámci účtu nebo dané třídy) |
| Maximum tříd Durable Object (na účet) | 500 (Workers Paid) / 100 (Free) 5 |
| Úložiště na účet | 50 GB (lze navýšit po kontaktování Cloudflare) 6 |
| Úložiště na třídu | Neomezeně |
| Úložiště na jeden Durable Object | Neomezeně |
| Velikost klíče | 2 KiB (2048 bajtů) |
| Velikost hodnoty | 128 KiB (131072 bajtů) |
| Velikost zprávy WebSocketu | 32 MiB (pouze pro přijaté zprávy) |
| CPU na požadavek | 30s (včetně zpráv WebSocket) 7 |
| Souběžná odchozí připojení na požadavek | 6 (stejné jako Workers) |
Často kladené dotazy
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;
}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
-
Shodné s Workers limit skriptu. ↩
-
Durable Objects účtuje i měří úložiště na základě jednotky gigabajt
(1 GB = 1,000,000,000 bajtů), nikoli gibibajt (GiB).
↩ -
Účty v plánu Workers Free mají celkové úložiště Durable Objects omezené na 5 GB. ↩ ↩2
-
Každý příchozí HTTP požadavek nebo WebSocket zpráva obnoví zbývající dostupný čas CPU na 30 sekund. Durable Object tak může po každém příchozím síťovém požadavku spotřebovat až 30 sekund výpočetního času, přičemž každý nový síťový požadavek časovač resetuje. Pokud mezi příchozími síťovými požadavky spotřebujete více než 30 sekund výpočetního času, výrazně se zvyšuje pravděpodobnost, že daný Durable Object bude odstraněn z paměti a resetován. Čas CPU na jedno volání požadavku lze zvýšit. ↩
-
Shodné s Workers limit skriptu. ↩
-
Durable Objects účtuje i měří úložiště na základě jednotky gigabajt
(1 GB = 1,000,000,000 bajtů), nikoli gibibajt (GiB).
↩ -
Každý příchozí HTTP požadavek nebo WebSocket zpráva obnoví zbývající dostupný čas CPU na 30 sekund. Durable Object tak může po každém příchozím síťovém požadavku spotřebovat až 30 sekund výpočetního času, přičemž každý nový síťový požadavek časovač resetuje. Pokud mezi příchozími síťovými požadavky spotřebujete více než 30 sekund výpočetního času, výrazně se zvyšuje pravděpodobnost, že daný Durable Object bude odstraněn z paměti a resetován. Čas CPU na jedno volání požadavku lze zvýšit. ↩