メインコンテンツへスキップ

システムアーキテクチャ

Zenovayは4つの相互接続されたサービスの分散システムとして構築されており、それぞれが特定の役割のために最適化されています。それらが共にどのように機能するかを理解することは、効果的な開発とデバッグに不可欠です。

サービスの概要

プラットフォームはCloudflareのエッジネットワーク上に独立してデプロイされた4つの主要サービスで構成されています:

  • ランディング(zenovay.com) — マーケティングサイトとパブリックページ。SEOと高速ロードのために最適化された静的Next.jsエクスポート。
  • 認証(auth.zenovay.com) — 集中認証サービス。ログイン、サインアップ、OAuth、SSO、MFAフローを処理します。
  • アプリ(app.zenovay.com) — メインのアナリティクスダッシュボード。リアルタイムデータビジュアライゼーション、セッションリプレイ、チーム管理。
  • API(api.zenovay.com) — バックエンドサービス。イベントトラッキング、データ処理、請求、サードパーティ統合。

クロスサービスコミュニケーション

サービスは、セキュリティを維持しながらシームレスなユーザーエクスペリエンスを実現するために、明確に定義されたパターンを通じて通信します:

  • 認証 → アプリ: 認証が成功すると、ユーザーはセキュアなトークンとともにアプリにリダイレクトされます。セッション状態はBroadcastChannel APIを使用してタブ間で同期されます。
  • アプリ → API: ダッシュボードはベアラートークンを使用してAPIに認証済みリクエストを行います。すべてのアナリティクスクエリ、請求操作、データ変更がここを経由します。
  • トラッキング → API: 軽量トラッキングスクリプト(5KB未満)は、広告ブロッカーフレンドリーなエンドポイントへのPOSTリクエストを通じてAPIにイベントを直接送信します。

トークンフロー

認証はサービス間でセキュアなフローに従います:

  • ユーザーがauth.zenovay.comにログイン
  • Supabaseがアクセストークンとリフレッシュトークンを発行
  • トークンはXSS保護のためにhttpOnlyクッキーに保存
  • アプリはミドルウェアを通じて各リクエストでトークンを検証
  • APIエンドポイントは認可のためにベアラートークンを検証
  • リフレッシュトークンは再利用を防ぐために自動的にローテーション

Cloudflareのデプロイ

パフォーマンスと信頼性のためにCloudflareのエコシステムを広範に活用しています:

  • Pages: ランディングとアプリフロントエンドの静的サイトホスティング
  • Workers: エッジで動作するサーバーレスAPI関数
  • KV: レート制限、セッションロック、カスタムエンドポイントマッピングのためのキーバリューストレージ
  • R2: チームアバターとセッション録画のためのオブジェクトストレージ
  • Turnstile: ユーザーに摩擦を与えないボット保護

データベースアーキテクチャ

Supabase(PostgreSQL)はいくつかの重要な設計判断を伴う主要データベースです:

  • チームベースのマルチテナンシー: すべてのデータは個々のユーザーではなくチームにスコープされています。これによりデフォルトでコラボレーションが可能になります。
  • Row Level Security(RLS): データベースレベルのポリシーにより、ユーザーは自分が閲覧を許可されたデータのみにアクセスできます。
  • リアルタイムサブスクリプション: ライブ訪問者データがSupabaseのリアルタイムチャネルを通じてダッシュボードにストリームされます。
  • 適用のためのトリガー: プランの上限と使用状況の追跡はアプリケーションコードだけでなく、データベースレベルで適用されます。