技術 約4分で読めます

Cloudflare Workersでリアルタイム分析基盤を構築した話 - エッジファーストなアーキテクチャの実践

Cloudflare Workers上にリアルタイム分析プラットフォームを構築した開発者が、アーキテクチャの全容を公開した。「サブ100msのグローバルイベント取り込み、リアルタイムダッシュボード、Cookie不使用」を掲げた、エッジファーストなアプローチの詳細な解説だ。

全体アーキテクチャ

データフローはシンプルな3層構造になっている。

  1. ブラウザのトラッキングスクリプト
  2. Cloudflare Worker(Hono.jsで構築)
  3. 3つの永続化レイヤー: KV、Workers Analytics Engine、Supabase PostgreSQL

ダッシュボードへの更新はSupabase RealtimeのWebSocket経由で配信される。V8アイソレートで動作するため、従来のサーバーレス関数にありがちなコールドスタート問題が事実上存在しない(5ms未満)。

Cookieを使わないセッション管理

プライバシーを重視したアプローチとして、Cookieやフィンガープリンティングを一切使わずにセッションを識別している。

  • session_id: sessionStoragecrypto.randomUUID()で生成(タブを閉じると消える)
  • visitor_id: localStoragecrypto.randomUUID()で生成(365日間保持)

このアプローチはシークレットブラウジングやデバイス切り替えで5〜15%程度の過剰カウントを許容するが、個人追跡を行わないトレードオフとしては妥当な設計だ。

パフォーマンス最適化の工夫

重複排除

KVベースの5秒間のデデュプリケーションウィンドウを設けている。リロードや一時的な切断時に重複した書き込みが走るのを防ぐ仕組みだ。

データベース負荷の制御

Supabaseへの書き込みが30〜40msと処理のボトルネックになるため、いくつかの工夫を入れている。

  • Upsert操作で複数イベントを単一のビジターレコードに集約
  • Math.max()で順序外の更新によるレースコンディションを防止
  • ML値スコアリングは5回目のハートビートごと、スクロールやインタラクション変更時のみ再計算
  • 高カーディナリティクエリはWorkers Analytics Engineに二重書き込みしてPostgresをバイパス

レート制限の効率化

レート制限のKV書き込みを、毎リクエストではなく90%閾値到達時にのみチェックする方式に変更。これでオーバーヘッドが約95%削減された。

リアルタイムダッシュボード

2層アプローチを採用している。

  • 即時性: KVカウンターでライブ訪問者数を表示(5分のTTLで自動クリーンアップ)
  • 詳細更新: Supabase RealtimeチャネルがPostgreSQLのLISTEN/NOTIFYを介して更新を配信(合計レイテンシ約400ms)

ダッシュボードはMapbox GL JSを使い、訪問者のバリュースコアに応じた色分けマーカーを地図上に表示する。

実測パフォーマンス

メトリクス
イベント取り込み P9547ms(グローバル)
イベント取り込み P9989ms
ダッシュボードレイテンシ約400ms
コールドスタート5ms未満
レート制限精度99.7%

実運用で得た教訓

うまくいった点と課題がそれぞれ明確に語られている。

成功した選択:

  • Hono.jsはExpressスタイルのAPIをNode.jsなしで提供してくれる
  • Cloudflareのcfオブジェクトによるジオロケーションデータが無料で使え、外部API呼び出しの100msを節約できた
  • KVの結果整合性はデデュプリケーションやレート制限用途には十分

苦労した点:

  • Supabase公式SDKがNode.js依存のためWorkersで動作しない。カスタムPostgRESTクライアントを自作する必要があった
  • KVの書き込み制限(1ネームスペースあたり1,000/秒)のためにアーキテクチャ調整が必要だった
  • ステートレスなWorkersからSupabaseへの接続チャーンでP99レイテンシが増加した

次にやるなら変えること:

  • Workers Analytics Engineを初日からプライマリストアにする
  • 一貫性のあるライブカウントにはDurable Objectsを使う
  • Supabaseへの呼び出しを単一RPC操作にバッチ化する

エッジコンピューティングで分析基盤を構築する際の実践的なリファレンスとして、かなり参考になるアーキテクチャ解説だった。

How We Built a Real-Time Analytics Platform on Cloudflare Workers - DEV Community