コンテンツにスキップ

ハブ・アンド・スポーク・ルーティング

同じプラットフォームをルーティングハブとして見た図です。User Management(apps/user-management、ポート3001)が中央に位置し、すべてのクライアントリクエストとすべてのバックエンドディスパッチがここを通過します。

User Managementが中央ゲートウェイハブ。6つのクライアント面が左から入り、6つのバックエンド宛先が右へ出る。

ハブ — User Management Core

User Management内部の4つのサブティア:

サブティア機能
Inboundイングレス(Cloud Run HTTPS · Tauri HTTP) → 認証ミドルウェア(JWT検証、apps/auth経由のセッション確認) → Webhookレシーバ(/webhook/whatsapp/api/billing Stripe、OAuthコールバック)
UM Core(ディスパッチャ)Route Dispatcher(files · models · billing · plugins · skills · microapps) · Agent Proxy(クラウド:spot-VMプロキシ、ローカル:Tauriサイドカー) · Target Resolution(provisioner/spot-vm.ts)
Outboundエージェントルート → Agent API (4000) · 直接ルート → UM自身が処理 · SSEパススルー → /api/events/company/:id
隣接サービスWeb SSR (3000) · Auth Service (3002) · Tauri Sidecars(ローカルモードのみ — UM + Agent APIをインプロセスで)

なぜ単一ディスパッチャか

ハブなしUMをハブとして使う場合
各クライアントがN個のバックエンドURLを知る必要各クライアントが知るURLは1つ
認証をN回実装ゲートウェイで認証を1回実装
Webhookがあちこちに着信すべてのWebhookが1つのExpressディスパッチャに着信
ローカル vs クラウドモード = 異なるコードパス同じゲートウェイ契約。変わるのは宛先URLだけ
Spot-VMプロビジョニングがクライアントに漏洩プロビジョニングはプロキシの背後に隠蔽

同じゲートウェイ契約、2つのモード

図で最も重要な行はハブ下部のものです。

クラウドモードではUMはCloud Run上で動作し、spot-VMエージェントコンテナへプロキシ。 ローカルモードではUMはTauriサイドカーとして動作し、ローカルAgent APIへプロキシ。 ブラウザコードは同一 — 変わるのは宛先URLだけ。

これがTauriデスクトップ + Cloud Runを1つの製品の2つの面とする所以です。ハブがデプロイメントを抽象化します。

6つのクライアントと6つの宛先

クライアント(ファンイン):

  • Web Users — ブラウザ(Next.js、apps/web · ポート3000、SSR + 静的)
  • Tauri Desktop — macOS · Win · Linux(WebView + サイドカー、ローカルモード)
  • iOS App — apps/iosネイティブ、HTTPSでクラウドUMへ通信
  • Internal Admin — 運用コンソール(deploy · health · cost · routines)
  • Chat Users — WhatsApp · Telegram(メッセージ駆動、UIは見えない)
  • Phone Caller — 音声ブリッジ(SIP/WebRTC入力、Gemini Liveリアルタイム)

バックエンド宛先(ファンアウト):

  • Auth Service — apps/auth · 3002(アイデンティティ、トークン、リフレッシュ、セッション)
  • Agent API · Orchestration — apps/api · 4000(heartbeat · invoker · runs · routines · issues)
  • Agent API · Channels — registry · dispatch(WhatsApp Baileys、Telegram grammy)
  • Direct APIs — files · models · billing · plugins · skills · OAuth(UMが直接処理)
  • External Providers — LLM · OAuth · Voice · Stripe · Firebase · GCS
  • Data Tier — Postgres/SQLite · Filestore/ローカルFS · Secretsキーチェーン

次に読む