blog.dopana

Back

グローバルスケールで低遅延なリアルタイムチャットアプリケーションを構築することは、System Designにおける古典的かつ高度な課題です。従来のAWS Lambda等のサーバーレス環境では、ステートレスな性質上、長時間接続を維持するWebSocketの実装が困難でした。

Cloudflare Edge Platform(Workers、Durable Objects、Cloudflare KV、D1)を組み合わせることで、完全サーバーレスで堅牢なチャット基盤を構築できます。

1. 課題:サーバーレスとWebSocketの相性#

従来のサーバーレス構成での課題:

  • WebSocketの接続状態維持: 常時接続(Long-lived Connection)が必要。
  • メッセージのルーティング: 世界中のエッジノード間に存在するユーザーへのメッセージ配信。
  • データ永続化と低遅延: 過去ログの高速な保存・取得。

2. システム構成概要 (Architecture)#

  1. Cloudflare Workers: グローバルAPI GatewayとしてWebSocketハンドシェイクを処理。
  2. Durable Objects (DO): エッジ上で動くSingleton Actor。チャットルームごとのWebSocket接続管理とメッセージ配信を担当。
  3. Cloudflare D1: 分散SQLiteデータベース。メッセージ履歴やユーザー情報を保存。
  4. Cloudflare KV: 超低遅延なKey-Valueストア。セッションキャッシュ等に使用。

3. 実装例 (Code Implementation)#

3.1. Durable Object: ルーム状態の管理#

4. 利点と制限 (Trade-offs)#

[!TIP] メリット:

  • Zero Cold Starts: V8 Isolatesによる超高速起動。
  • Global Scalability: ユーザーに最も近いエッジで接続処理。

[!WARNING] 注意点:

  • 単一DOインスタンスで数十万人の大規模配信を行う場合は、DOの階層構造(Broadcast Tree)の設計が必要になります。

5. 参考文献#