Durable Objects は一般提供(GA)です。ただし、いくつか既知の問題があります。
グローバル一意性は、ある ID を持つ Durable Object class のインスタンスが、世界中で同時に 1 つだけ動くことを保証します。
一意性は、新しいイベントの開始時(HTTP リクエストの受信など)と、ストレージへのアクセス時に強制されます。
イベントを受け取ったあと、実行に時間がかかり、かつ永続ストレージに一度もアクセスしない場合、その Durable Object は最新ではなくなっている可能性があります。同じ Durable Object ID の別インスタンスが、ほかの場所で作成されていることがあります。この時点でイベントがストレージにアクセスすると、例外 を受け取ります。ストレージに一度もアクセスせずにイベントが完了すると、Durable Object が最新でなくなっていたことに気づかない場合があります。
ネットワーク分断やソフトウェア更新(Durable Object のクラスコードの更新、または Workers システム自体の更新)では、Durable Object が置き換わることがあります。wrangler tail や Cloudflare ダッシュボード ↗ のログを有効にすると、ソフトウェア更新が必要です。
Workers と Durable Objects のコード変更は、結果整合でグローバルにリリースされます。各 Durable Object はグローバルに一意なため、次の状況が起きえます。リクエストが Worker の最新バージョン(世界のある場所で動作)に到着し、その Worker が短い時間(通常は数秒から数分)だけ以前のコードで動いている一意の Durable Object を呼び出す、という状況です。段階的デプロイ を作成している場合、この期間は、ライブデプロイが複数バージョンを使うよう設定されている時間で決まります。
このため、Workers と Durable Objects のあいだの API 変更は、コード更新をまたいで前方互換・後方互換にしておくのがベストプラクティスです。
wrangler tail は、WebSocket にアップグレードされたリクエストのログを、WebSocket が閉じるまで遅延します。大量のトラフィックを受け取る想定の Worker には、wrangler tail を接続しないでください。
Cloudflare ダッシュボード ↗ の Workers エディターでは、Worker と Durable Objects を対話的に編集・プレビューできます。エディターでは、プレビュー対象の Worker が Durable Object class をエクスポートし、かつそれにバインドしている場合に限り、プレビューリクエストから Durable Objects に話せます。ほかの Worker がエクスポートした Durable Objects には、エディターのプレビューから話せません。
wrangler dev は Durable Object ストレージへの読み取りアクセスがあります。書き込みはメモリ上に保持され、永続データには影響しません。ただし、Durable Object binding で script_name を明示した場合は、書き込みが永続データに影響します。その場合、Wrangler は警告を出します。
現在、ローカル開発(npx wrangler dev)では、ホットリロード(コード実行中に編集した場合)のあと、Durable Object の alarm メソッド が失敗することがあります。
この問題を避けるには、Durable Object の Alarms を使うときは、コードを編集したあと wrangler dev コマンドを終了して再起動してください。