はじめに:なぜ今マルチエージェントアーキテクチャなのか

スポティファイが広告プラットフォームをマルチエージェントアーキテクチャで再構築したというニュースは、単なる技術アップグレード以上の意味を持ちます。これはAIエージェント時代に合わせてインフラそのものを再設計した事例だからです。

CloudflareのBrowser Runチームは、既存のBrowser Isolation(BISO)とのインフラ共有で発生していた諸問題を解決するため、Durable Object(DO)ベースのContainersへの全面マイグレーションを実施しました。本記事では、その決定の背景、具体的なアーキテクチャ変更、そして実務で得られる教訓を詳しく解説します。

本ケースの原文はCloudflareブログでご確認いただけます。

Cloudflare server infrastructure with multiple browser containers running globally

アーキテクチャ変更の核心:Containers導入とリージョナルプール戦略

1. 従来アーキテクチャの限界

BISOとの共有インフラには以下の問題がありました。

  • コンテナイメージの肥大化:BISOの大きなイメージサイズにより起動時間が長期化
  • グローバル分散の不足:最適リージョンにブラウザが配置されずレイテンシ増大
  • 使用パターンの衝突:BISOの長時間セッションとBrowser Runの短くスパイク的な使用パターンがマッチせず、スケーリングボトルネックに

2. Containersへの段階的マイグレーション

CloudflareチームはWorkerをリクエスト経路に挿入し、一部ユーザーにのみContainerベースのブラウザを提供する形で段階的移行を開始しました。これはA/Bテスト的な安全なアプローチです。

3. リージョナルプール(Pre-warmed Pools)

DOとContainer間の地理的距離問題を解決するため、リージョンごとに事前ウォームアップされたブラウザプールを構成しました。

# 擬似コード:リージョナルプールから最寄りのブラウザを割り当て
def assign_browser(user_region):
    # リージョン内のDO-Containerペアから最低レイテンシのものを選択
    best_pair = min(
        region_pools[user_region],
        key=lambda pair: latency(user_region, pair.do) + latency(pair.do, pair.container)
    )
    return best_pair.container

この戦略により、ユーザー→DO、DO→Containerの両区間でレイテンシを最小化できました。

Diagram of multi-agent architecture with Durable Objects and regional container pools Technical Structure Concept

リアルタイム状態管理:KVからD1 + Queuesへの移行

初期はWorkers KVを使用してコンテナ状態を保存していましたが、KVの結果整合性(最小30秒のキャッシュTTL) が致命的なボトルネックになりました。

「KVでコンテナを'available'と読み込んでも、実際にルーティングする頃には既に割り当て済みという競合状態が発生」

解決策:D1 + Queues

D1のトランザクション特性を活用し、アトミックな割り当てを保証しました。

-- ブラウザ取得クエリ(擬似コード)
WITH candidate_pool AS (
    -- レイテンシベースの候補プール選定
)
UPDATE containers
SET status = 'picked'
WHERE sessionId IN (
    SELECT sessionId
    FROM candidate_pool
    ORDER BY RANDOM()
    LIMIT ?5
)
RETURNING data

バッチ書き込み(100行バッチ) によりP95書き込み時間0.1msを達成し、Queueを利用した非同期状態更新で遅延時間2秒未満を維持しました。

{
  "queues": {
    "consumers": [
      {
        "queue": "production-core-containers-queue-weur",
        "max_batch_size": 100,
        "max_batch_timeout": 1,
        "max_retries": 1
      }
    ]
  }
}

日本開発コミュニティでの適用文脈

国内のスタートアップやエンタープライズでも、リアルタイム状態共有が必要なサービス(例:チャット、コラボレーションツール、ゲームサーバー)で同様のパターンを適用できます。特にKVの代わりにRDBMS(MySQL, PostgreSQL)のトランザクションを活用する、あるいはRedis Streams + バッチ処理の組み合わせで代替可能です。

Performance comparison chart showing latency improvements after migration to Cloudflare Containers Developer Related Image

まとめ:マルチエージェントアーキテクチャの教訓

Cloudflare Browser Runの事例は以下の核心的インサイトを提供します。

  1. 段階的移行(A/Bテスト) が大規模マイグレーションのリスクを低減する
  2. 地理的分散アーキテクチャではリージョナルプールがレイテンシ解決の鍵
  3. リアルタイム状態管理は結果整合性よりトランザクションベースのアプローチが適切な場合がある
  4. Customer Zero戦略(自社製品をまず使う)は製品品質向上に大きく貢献する

次のステップ学習方向

本技術の限界と注意点

  • 初期Containersプラットフォームはドキュメントと可観測性が不足しており、初期学習コストが高い
  • Queueバックログによる状態遅延の可能性があり、フォールバック戦略(バックアップリージョン)が必須
  • 全てのサービスにこのアーキテクチャが適しているわけではない。トラフィックパターンが短くスパイク的な場合に特に効果的
本コンテンツは、信頼性の高い情報源をもとにAIツールを活用して作成され、編集者によるレビューを経て公開されています。専門家によるアドバイスの代替となるものではありません。