Durable Objects は特殊な種類の Worker です。そのため、Workers プランに応じて Workers の上限 が適用されます。加えて、Durable Objects にはこのページに示す固有の上限があります。
| 機能 | 上限 |
|---|---|
| オブジェクト数 | 無制限(アカウント内、または指定クラス内) |
| Durable Object クラスの上限(アカウントあたり) | 500(Workers Paid)/ 100(Free) 1 |
| アカウントあたりのストレージ | 無制限(Workers Paid)/ 5 GB(Free) 2 |
| クラスあたりのストレージ | 無制限 3 |
| Durable Object あたりのストレージ | 10 GB 3 |
| キーサイズ | キーと値の合計は 2 MB を超えられません |
| 値サイズ | キーと値の合計は 2 MB を超えられません |
| WebSocket メッセージサイズ | 32 MiB(受信メッセージのみ) |
| リクエストあたりの CPU | 30 秒(デフォルト)/ アクティブ CPU 時間 を 5 分まで設定可能 4 |
| 同時送信接続数 / リクエスト | 6(Workers と同じ) |
SQLite ストレージ を使う Durable Object クラスには、次の SQL 上限が適用されます。
| SQL | 上限 |
|---|---|
| テーブルあたりの最大列数 | 100 |
| テーブルあたりの最大行数 | 無制限(オブジェクトあたりのストレージ上限を除く) |
文字列、BLOB、またはテーブル行の最大サイズ |
2 MB |
| SQL ステートメントの最大長 | 100 KB |
| クエリあたりの最大バインドパラメーター数 | 100 |
| SQL 関数あたりの最大引数 | 32 |
LIKE または GLOB パターンの最大文字数(バイト) |
50 バイト |
| 機能 | キー値ストレージバックエンドを使うクラスの上限 |
|---|---|
| オブジェクト数 | 無制限(アカウント内、または指定クラス内) |
| Durable Object クラスの上限(アカウントあたり) | 500(Workers Paid)/ 100(Free) 5 |
| アカウントあたりのストレージ | 50 GB(Cloudflare に連絡すると引き上げ可能) 6 |
| クラスあたりのストレージ | 無制限 |
| Durable Object あたりのストレージ | 無制限 |
| キーサイズ | 2 KiB(2048 バイト) |
| 値サイズ | 128 KiB(131072 バイト) |
| WebSocket メッセージサイズ | 32 MiB(受信メッセージのみ) |
| リクエストあたりの CPU | 30 秒(WebSocket メッセージを含む) 7 |
| 同時送信接続数 / リクエスト | 6(Workers と同じ) |
Durable Objects は、多数の Durable Object に対して水平スケールできます。個々の Object は本質的にシングルスレッドです。
- 個々の Object には、1 秒あたり 1,000 リクエストのソフト上限があります。名前空間あたりの個々のオブジェクト数に上限はありません。
- 小さな値に対する単純な ストレージ
get()をそのまま返す場合、大きな JSON 値をシリアライズ / デシリアライズする Durable Object よりも、高いリクエストスループットを出せることがあります。 - 同様に、複数の
list()操作を行う Durable Object は、リクエストスループットの面でより制約を受けやすくなります。
リクエストが多すぎる Durable Object は、いったんキューに入れたあと、呼び出し元に overloaded エラーを返します。
Durable Objects は、システム内の個々のオブジェクト数を制限する必要がないように設計されており、水平にスケールできます。
- 1 つの Durable Object 名前空間 内で、必要な数だけ個別の Durable Object を作成して実行できます。
- Workers Paid プランで SQLite バックエンドの Durable Objects を使う場合、アカウントあたりのストレージ上限はありません。
- SQLite バックエンドの各 Durable Object には、Workers Paid プランで 10 GB のストレージ上限があります。
- 詳細は Durable Object の上限 を参照してください。
Durable Objects は Worker スクリプトであり、他の Workers と同じ 呼び出しあたりの CPU 制限 が適用されます。CPU 時間はアクティブな処理時間です。ネットワークリクエスト、ストレージ呼び出し、その他の一般的な I/O の待ち時間は、CPU 時間や Durable Objects のコンピュート消費には含まれません。
デフォルトでは、Durable Objects の呼び出し(HTTP リクエスト、WebSocket メッセージ、または Alarm)あたりの最大 CPU 時間は 30 秒です。Wrangler 設定の limits.cpu_ms を指定すると、その Durable Object 定義に紐づくすべての Durable Objects で引き上げられます。
{
// ...rest of your configuration...
"limits": {
"cpu_ms": 300000, // 300,000 milliseconds = 5 minutes
},
// ...rest of your configuration...
}[limits]
cpu_ms = 300_000SQLite バックエンドの Durable Object が ストレージ上限(Workers Paid では 10 GB、Free プランでは 1 GB)に達すると、書き込み操作(INSERT、UPDATE、または put() と sql.exec() ストレージ API の呼び出し)は次のエラーで失敗します。
database or disk is full: SQLITE_FULL読み取り操作(SELECT クエリ、get()、list() の呼び出し)は引き続き動作し、空き容量を確保するための DELETE 操作も成功します。
このエラーを Durable Object 内で扱うには、ストレージ 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;
}ウォールタイム(ウォールクロック時間とも呼ばれます)は、呼び出しの開始から終了までの経過時間の合計です。ネットワークリクエスト、I/O、その他の非同期処理の待ち時間も含みます。CPU 時間 とは異なります。CPU 時間は、CPU がコードを実際に実行している時間だけを測ります。
次の表は、開発者プラットフォーム全体における Worker の呼び出し種別ごとのウォールタイム上限です。
| 呼び出し種別 | ウォールタイム上限 | 詳細 |
|---|---|---|
| 受信 HTTP リクエスト | 無制限 | クライアントが接続している間は、ハード上限はありません。レスポンス本文をストリーミング中の Worker はアクティブのままです。waitUntil() は、レスポンス後または切断後、最大 30 秒まで実行を延ばします。 |
| Cron Triggers | 15 分 | スケジュール実行の Workers は、呼び出しあたり最大 15 分のウォールタイムです。 |
| Queue consumers | 15 分 | 各コンシューマーの呼び出しは、最大 15 分のウォールタイムです。 |
| Durable Object alarm handlers | 15 分 | アラームハンドラーの呼び出しは、最大 15 分のウォールタイムです。 |
| Durable Objects(RPC / HTTP) | 無制限 | 呼び出し元が Durable Object に接続している間は、ハード上限はありません。リクエスト、RPC 呼び出し、レスポンスストリーム、WebSocket、または進行中の I/O がある間、Durable Objects はアクティブのままです。 |
| Workflows(ステップごと) | 無制限 | 各ステップは無制限のウォールタイムで実行できます。個々のステップには、設定した CPU 時間上限 が適用されます。 |
-
Durable Objects のストレージは、ギビバイト(GiB)ではなくギガバイト(1 GB = 1,000,000,000 バイト)で課金し、計測します。
↩ -
Workers Free プランのアカウントは、Durable Objects の合計ストレージが 5 GB までです。 ↩ ↩2
-
受信 HTTP リクエストまたは WebSocket メッセージ ごとに、残りの CPU 時間は 30 秒にリセットされます。そのため Durable Object は、受信ネットワークリクエストのたびに最大 30 秒のコンピュートを使え、新しいネットワークリクエストでタイマーがリセットされます。受信ネットワークリクエストのあいだに 30 秒を超えるコンピュートを使うと、その Durable Object が退避されリセットされる可能性が高くなります。リクエスト呼び出しあたりの CPU 時間は 引き上げできます。 ↩
-
Durable Objects のストレージは、ギビバイト(GiB)ではなくギガバイト(1 GB = 1,000,000,000 バイト)で課金し、計測します。
↩ -
受信 HTTP リクエストまたは WebSocket メッセージ ごとに、残りの CPU 時間は 30 秒にリセットされます。そのため Durable Object は、受信ネットワークリクエストのたびに最大 30 秒のコンピュートを使え、新しいネットワークリクエストでタイマーがリセットされます。受信ネットワークリクエストのあいだに 30 秒を超えるコンピュートを使うと、その Durable Object が退避されリセットされる可能性が高くなります。リクエスト呼び出しあたりの CPU 時間は 引き上げできます。 ↩