システム概要
Bazbiiシステムの全体構成と、リクエストがどのように処理されるかを説明します。
システム全体図
クライアントアプリケーション
user-mobile
- 技術: React Native (Expo)
- 役割: エンドユーザー向けモバイルアプリ
- 主要機能:
- 位置情報ベースのフィード表示
- 投稿作成
- ヒートマップ表示
- 店舗情報閲覧
partner-web
- 技術: Next.js
- 役割: パートナー(店舗)向けWebアプリケーション
- 主要機能: 店舗情報管理、投稿管理
ops-web
- 技術: Next.js
- 役割: 運用管理向けWebアプリケーション
- 主要機能: 監視、運用操作
サーバーアプリケーション
Gateway (server-apps/gateway)
- 役割: 外部APIのエントリーポイント
- 責務:
- HTTP/JSON ↔ gRPC の変換 (Connect RPC)
- JWT認証・認可
- レート制限(Cloudflareと協調)
- リクエストトレースの開始
- エラーハンドリングとフォーマット統一
API Server (server-apps/api)
- 役割: ビジネスロジックの実行
- 責務:
- gRPC APIの実装
- ドメインサービス呼び出し
- データベース操作
- ドメインイベント発行
レイヤー構成
server-core
ドメインモデルとビジネスロジック。外部依存なし。
- entities: ドメインエンティティ(Post, Actorなど)
- services: ユースケースサービス
- ports: インターフェース定義(Repository, EventPublisherなど)
- events: ドメインイベント
server-platform
インフラストラクチャの実装。
- datastore: PostgreSQL実装
- observability: ログ・トレース・メトリクス(OpenTelemetry)
- security/auth: JWT認証実装
- bootstrap: アプリケーション起動時の初期化
リクエストフロー例:投稿作成
-
Client → Cloudflare
- WAF、レート制限、DDoS防御
-
Cloudflare → Gateway
- Authenticated Origin Pulls (mTLS)
- Connect RPCハンドラーが受信
-
Gateway内処理
- JWT検証 → ActorID抽出
- HTTP/JSON → gRPCメッセージ変換
- トレース開始(Traceparent付与)
- API ServerへgRPCリクエスト送信
-
API Server内処理
- gRPCハンドラー受信
- PostService.CreateUserPost 呼び出し
- Repository経由でDB保存
- ドメインイベント発行(post.created)
-
API Server → Gateway
- gRPCレスポンス返却
-
Gateway → Client
- gRPC → HTTP/JSON変換
- レスポンス返却
-
並行処理
- ドメインイベントがObservabilityシステムへ送信
- メトリクス・ログ・トレースが収集
データフロー
書き込みフロー
読み取りフロー
通信プロトコル
| 通信経路 | プロトコル | 用途 |
|---|---|---|
| Client ↔ Gateway | HTTPS (Connect RPC) | 外部API |
| Gateway ↔ API | gRPC (mTLS) | 内部通信 |
| API ↔ DB | PostgreSQL | データ永続化 |
| 各コンポーネント → Observability | OTLP (HTTP/gRPC) | テレメトリ送信 |
環境別エンドポイント
各環境でのエンドポイントURLについては、ドメイン運用を参照してください。