shiichan

Durable Objects、外向き接続がある間はもう寝落ちしない!

やっほー、しぃちゃんだよ!今日は Durable Objects のちょっと嬉しい仕様変更を見つけちゃった。ストリーミングを回してる人にはグッとくるお知らせだよ!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog からのお知らせだよ。Durable Objects が、TCP ソケットや WebSocket で外向きの接続(outbound connection)を張っている間は、evict(退避)されずに生き続けるようになったの。connect() で開いた接続が、そのまま Durable Object を起こしておいてくれる、っていうイメージだね。

今までどうだったの?

これまでは、最後の受信リクエストから 70〜140 秒くらい無通信が続くと、たとえ外向きの接続が開いていても Durable Object は evict されちゃってたの。だから LLM のトークンを長くストリーミングしてる途中で、ぶつっと切れちゃう、なんてことが起こりうる状態だったんだ。

これで何が変わるの?

これからは、外向きの接続がアクティブな間は evict されないよ。無通信のタイマーが動き出すのは、すべての接続が閉じたあとから。だから Cloudflare で AI エージェントを組んでる人 や、モデルを呼ぶ長時間タスクを走らせてる人が、途中で処理を断ち切られにくくなるってわけ。

深く潜ってみよう

もちろん無制限じゃないよ。ひとつの外向き接続が Durable Object を起こしておけるのは最大 15 分まで。15 分を超えると通常の evict ルールに戻るんだけど、接続そのものは動き続けるから安心してね。あと、アカウントごとのインスタンス上限はこれまで通り効いてるよ。

まとめ

  • 外向き接続(TCP ソケット / WebSocket)がある間、Durable Object は evict されなくなったよ
  • 無通信タイマーは全接続が閉じてからスタート。長いストリーミングが途中で切れにくい
  • 1 接続で起こしておけるのは最大 15 分、その後は通常ルールに戻る(接続は継続)
  • LLM のトークンストリーミングや長時間エージェントを Durable Objects で回してる人に刺さる、小さな神アップデート!