知られている問題
Durable Objectsは一般に利用可能です。ただし、いくつかの知られている問題があります。
グローバルユニーク性は、特定のIDを持つDurable Objectクラスのインスタンスが、世界中で同時に1つだけ実行されることを保証します。
ユニーク性は、新しいイベント(HTTPリクエストの受信など)を開始する際と、ストレージにアクセスする際に強制されます。
イベントが受信された後、イベントの実行に時間がかかり、耐久性のあるストレージにアクセスしない場合、Durable Objectインスタンスがもはや最新でない可能性があり、同じDurable Object IDの他のインスタンスが他の場所で作成されている可能性があります。この時点でイベントがストレージにアクセスすると、例外が発生します。イベントがストレージにアクセスせずに完了した場合、Durable Objectがもはや最新でないことに気付かない可能性があります。
ネットワークパーティションやソフトウェアの更新(Durable Objectのクラスコードの更新やWorkersシステム自体の更新を含む)の場合、Durable Objectは置き換えられることがあります。wrangler tailまたはCloudflareダッシュボード ↗のログを有効にするには、ソフトウェアの更新が必要です。
WorkersとDurable Objectsのコード変更は、最終的に一貫した方法でグローバルにリリースされます。各Durable Objectはグローバルにユニークであるため、リクエストがあなたのWorkerの最新バージョン(世界の一部で実行中)に到着し、その後、短期間(通常は数秒から数分)前のバージョンのコードを実行しているユニークなDurable Objectを呼び出す状況が発生する可能性があります。段階的デプロイメントを作成する場合、この期間は、ライブデプロイメントが複数のバージョンを使用するように構成されている時間によって決まります。
このため、WorkersとDurable Objects間のAPI変更がコードの更新に対して前方および後方互換性があることを確認することがベストプラクティスです。
wrangler tailは、WebSocketにアップグレードされたリクエストからのログがWebSocketが閉じるまで遅延します。wrangler tailは、トラフィックが多くなると予想されるWorkerに接続すべきではありません。
Cloudflareダッシュボード ↗のWorkersエディタでは、WorkerとDurable Objectsをインタラクティブに編集およびプレビューできます。エディタでは、Durable Objectsは、プレビューされているWorkerがDurable Objectクラスをエクスポートし、それにバインドしている場合にのみ、プレビューリクエストによって話しかけることができます。他のWorkersによってエクスポートされたDurable Objectsは、エディタプレビューで話しかけることはできません。
wrangler devはDurable Objectストレージへの読み取りアクセスを持っていますが、書き込みはメモリに保持され、永続データには影響しません。ただし、Durable Objectバインディングでscript_nameを明示的に指定した場合、書き込みは永続データに影響します。その場合、Wranglerは警告を発します。