INTEGRITY Dokumentace

Ceny

Durable Objects mohou být účtovány dvěma způsoby: za výpočet a za úložiště.

V plánu Workers Free:

Fakturace Compute

Durable Objects se účtují podle doby výpočtu (reálného času), po kterou Durable Object aktivně běží nebo je nečinný v paměti, ale není možné ho hibernovat. Durable Objects, které jsou nečinné a splňují podmínky pro hibernaci, nejsou účtovány za dobu běhu, a to ještě předtím, než je runtime skutečně hibernuje. Požadavek na Durable Object jej udrží aktivní, nebo pokud byl neaktivní, objekt vytvoří.

U každé měřené dimenze představuje zpoplatněné využití množství spotřebované nad rámec zahrnuté měsíční alokace. Toto zpoplatněné využití se před uplatněním příslušné sazby zaokrouhluje nahoru na nejbližší zpoplatnitelnou jednotku. Například 500,000 GB-s zpoplatněné doby výpočtu se zaokrouhlí nahoru na 1,000,000 GB-s a odpovídajícím způsobem se naúčtuje.

Tarif Free Placený plán
Požadavky 100,000 / den 1 milion / měsíc, + $0.15/milion
Zahrnuje požadavky HTTP, relace RPC1, zprávy WebSocket2, a vyvolání alarmů
Doba trvání3 13,000 GB-s / den 400,000 GB-s / měsíc, + $12.50/milion GB-s4,5

Poznámky pod čarou

1 Každý Relace RPC je účtován jako jeden požadavek na váš Durable Object. Každý Volání metody RPC na Stub Durable Objects je vlastní relací RPC, a proto jde o jeden účtovaný požadavek.

Volání metod RPC mohou vracet objekty (stuby) rozšiřující RpcTarget a volejte metody na těchto stub objektech. Následná volání na vráceném stub objektu jsou součástí stejné relace RPC a neúčtují se jako samostatné požadavky. Například:

let durableObjectStub = OBJECT_NAMESPACE.get(id); // retrieve Durable Object stub
using foo = await durableObjectStub.bar(); // billed as a request
await foo.baz(); // treated as part of the same RPC session created by calling bar(), not billed as a request
await durableObjectStub.cat(); // billed as a request

2 Pro vytvoření připojení WebSocket je potřeba požadavek. Za odchozí zprávy WebSocket se neúčtuje nic, stejně tak za příchozí Pingy protokolu WebSocket ↗. Pro účely fakturace výpočetních požadavků se na příchozí zprávy WebSocket uplatňuje poměr 20:1, který zohledňuje menší velikost zpráv při komunikaci v reálném čase. Například 100 příchozích zpráv WebSocket by se pro účely fakturace počítalo jako 5 požadavků. Poměr 20:1 neovlivňuje metriky a analytiku Durable Object, které odrážejí skutečné využití.

3 Automatické odpovědi na úrovni aplikace zpracovává state.setWebSocketAutoResponse() nezaberou žádný další reálný čas, a proto se za ně neúčtuje nic navíc.

4 Doba běhu se účtuje ve skutečném čase (wall clock), dokud je objekt aktivní a nesplňuje podmínky pro hibernaci, ale je sdílena mezi všemi požadavky aktivními na objektu současně. Volání accept() na WebSocketu v objektu bude účtovat poplatky za dobu trvání po celou dobu připojení WebSocketu. Doporučujeme použít WebSocket Hibernation API, aby se po dokončení všech obslužných rutin událostí neúčtovaly poplatky za dobu trvání. Úplné vysvětlení najdete v Kdy se Durable Objectu účtují poplatky za dobu běhu?.

5 Účtování za dobu běhu zohledňuje 128 MB paměti alokované pro váš Durable Object bez ohledu na skutečné využití. Pokud váš účet vytváří mnoho instancí jedné třídy Durable Object, mohou Durable Objects běžet ve stejném isolate na stejném fyzickém stroji a sdílet 128 MB paměti. I tak jsou tyto Durable Objects účtovány, jako by měly alokováno plných 128 MB paměti.

Fakturace úložiště

Durable Objects Storage API je přístupné pouze zevnitř Durable Objects. Cena závisí na úložném backendu vašich Durable Objects.

Backend úložiště SQLite

plán Workers Free plán Workers Paid
Přečtené řádky 1,2 5 milionů / den Prvních 25 miliard / měsíc zahrnuto + $0.001 / milion řádků
Zapsané řádky 1,2,3,4 100,000 / den Prvních 50 milionů / měsíc zahrnuto + $1.00 / milion řádků
Uložená data SQL 5 5 GB (celkem) 5 GB-měsíc, + $0.20/ GB-měsíc

Poznámky pod čarou

1 Zahrnuté limity a sazby pro počty přečtených a zapsaných řádků odpovídají Ceny D1, serverless SQL databáze od Cloudflare.

2 Metody typu klíč-hodnota, jako je get(), put(), delete(), nebo list() ukládají a dotazují data ve skryté tabulce SQLite a účtují se jako přečtené a zapsané řádky.

3 Každý setAlarm() je účtován jako jeden zapsaný řádek.

4 Smazání se počítají jako zapsané řádky.

5 Durable Objects budou účtovány za uložená data až do data jsou odstraněna. Jakmile jsou data odstraněna, objekt systém automaticky vyčistí.

Backend úložiště klíč-hodnota

plán Workers Paid
Jednotky read request1,2 1 milion, + $0.20/milion
Jednotky zápisových požadavků3 1 milion, + $1.00/milion
Odstranit požadavky4 1 milion, + $1.00/milion
Uložená data5 1 GB, + $0.20/ GB-month

Poznámky pod čarou

1 Jednotka požadavku je definována jako 4 KB přečtených nebo zapsaných dat. Požadavek, který zapisuje nebo čte více než 4 KB, spotřebuje více jednotek, například zápis 9 KB spotřebuje 3 jednotky zápisových požadavků.

2 Operace list se účtují v jednotkách read request na základě množství prohledaných dat. Například požadavek list, který vrátí celkem 80 KB klíčů a hodnot, bude účtován jako 20 jednotek read request. Požadavek list, který nevrátí nic, je účtován jako 1 jednotka read request.

3 Každý setAlarm je účtován jako jedna jednotka zapisovacího požadavku.

4 Požadavky na smazání se neúčtují podle objemu dat. Například smazání hodnoty o velikosti 100 KB bude účtováno jako jeden požadavek na smazání.

5 Durable Objects budou účtovány za uložená data, dokud nejsou data odstraněna. Jakmile jsou data odstraněna, objekt systém automaticky vyčistí.

Požadavky, které zasáhnou Paměťová mezipaměť Durable Objects nebo které používají víceklíčové verze get()/put()/delete() metody se účtují stejně, jako by šlo o běžný, samostatný požadavek pro každý klíč.

Příklady účtování za výpočetní výkon

Tyto příklady nezahrnují náklady na Workery, které Durable Objects volají. Při modelování nákladů na Durable Object mějte na paměti, že:

Příklad 1

Tento příklad představuje jednoduchý Durable Object použitý jako koordinační služba volaná přes HTTP.

V tomto scénáři by se odhadované měsíční náklady vypočítaly takto:

Požadavky:

Compute Duration:

Odhadovaný celkový součet: $0.15 (požadavky) + $0.00 (doba výpočtu) + minimální využití $5/měsíc = $5.15 za měsíc

Příklad 2

Tento příklad představuje středně vytíženou aplikaci založenou na Durable Objects, která pomocí WebSockets šíří stav hry, chatu nebo uživatele v reálném čase mezi připojenými klienty:

V tomto scénáři by se odhadované měsíční náklady vypočítaly takto:

Požadavky:

Compute Duration:

Odhadovaný celkový součet: $0.45 (požadavky) + $137.50 (doba výpočtu) + minimální využití $5/měsíc = $142.95 za měsíc.

Příklad 3

Tento příklad představuje horizontálně škálovanou aplikaci založenou na Durable Objects, která pomocí WebSockets předává stav specifický pro uživatele jedinému klientovi připojenému ke každému Durable Object.

V tomto scénáři by se odhadované měsíční náklady vypočítaly takto:

Požadavky:

Compute Duration:

Odhadovaný celkový součet: $1.80 (požadavky) + $412.50 (doba výpočtu) + minimální využití $5/měsíc = $419.30 za měsíc

Příklad 4

Tento příklad představuje středně vytíženou aplikaci založenou na Durable Objects, která pomocí WebSocket Hibernation šíří stav hry, chatu nebo uživatele v reálném čase mezi připojenými klienty:

V tomto scénáři by se odhadované měsíční náklady vypočítaly takto:

Požadavky:

Compute Duration:

Odhadovaný celkový součet: $3.15 (požadavky) + $12.50 (doba výpočtu) + minimální využití $5/měsíc = $20.65 za měsíc

1 100 zpráv za minutu vychází z toho, že ke každému DO se připojí 100 klientů a každý odesílá 1 zprávu za minutu.

2 Příklad používá 1 sekundu, protože každý Durable Object je aktivní 1 sekundu za minutu. Dá se to také chápat jako 432 milionů požadavků, z nichž každý trvá 10 ms (4,320,000 sekund).

Často kladené dotazy

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().