スケーリング戦略
Bazbiiプロジェクトのインフラスケーリング戦略について説明します。
概要
インフラは、トラフィックとユーザー数の増加に応じて段階的にスケールアップします。初期段階では必要最小限のリソースで開始し、実際の負荷に応じてリソースを拡張していきます。
スケーリングフェーズ
フェーズ1: MVP段階(初期)
想定トラフィック: 月間アクティブユーザー 1,000~10,000人
構成:
- VPSサーバー: 2台
- Server 1: API + Gateway(2 vCPU、4GB RAM、100GB SSD)
- Server 2: PostgreSQL(2 vCPU、4GB RAM、100GB SSD)
- Cloudflare: Proプラン
- Grafana Cloud: Proプラン(3ユーザー)
- Cloudflare R2: 200GB
コスト: 約$113/月(¥15,820/月)
フェーズ2: 本番環境(中規模)
想定トラフィック: 月間アクティブユーザー 10,000~100,000人
構成:
- VPSサーバー: 3台
- Server 1: API(4 vCPU、8GB RAM、200GB SSD)
- Server 2: Gateway(2 vCPU、4GB RAM、100GB SSD)
- Server 3: PostgreSQL + レプリカ(4 vCPU、8GB RAM、500GB SSD)
- Cloudflare: Businessプラン
- Grafana Cloud: Advancedプラン(5ユーザー)
- Cloudflare R2: 1TB
コスト: 約$557/月(¥77,980/月)
フェーズ3: 大規模スケール
想定トラフィック: 月間アクティブユーザー 100,000人以上
構成変更:
- VPSサーバー: 追加サーバー
- API Serverを+1台追加(負荷分散)
- Gatewayを+1台追加(負荷分散)
- PostgreSQL Serverのスペックアップ(8 vCPU、16GB RAM)
- Cloudflare: Enterpriseプラン検討
- Cloudflare R2: 5TB以上
追加コスト: 約+¥35,000/月(約+$250/月)
VPSサーバーのスケーリング戦略
水平スケーリング(スケールアウト)
API Server
フェーズ1: 1台(API + Gateway統合)
- 2 vCPU、4GB RAM、100GB SSD
フェーズ2: 分離
- Server 1: API専用(4 vCPU、8GB RAM、200GB SSD)
- Server 2: Gateway専用(2 vCPU、4GB RAM、100GB SSD)
フェーズ3: 水平スケール
- API Server: +1台追加(負荷分散)
- Gateway: +1台追加(負荷分散)
メリット:
- リクエスト処理能力の向上
- 単一障害点の解消
- 段階的なコスト増加
垂直スケーリング(スケールアップ)
PostgreSQL Server
フェーズ1:
- 2 vCPU、4GB RAM、100GB SSD
フェーズ2:
- 4 vCPU、8GB RAM、500GB SSD
- 読み取り専用レプリカ追加
フェーズ3:
- 8 vCPU、16GB RAM、1TB SSD
- レプリカ構成の拡張
メリット:
- データベース性能の向上
- クエリ処理能力の増加
- レプリカによる読み取り負荷分散
データベースのスケーリング
読み取り専用レプリカ
タイミング: フェーズ2以降
構成:
- マスター: 書き込み専用
- レプリカ1: 読み取り専用(レポート生成、集計クエリ)
- レプリカ2以降: 必要に応じて追加
メリット:
- 読み取り負荷の分散
- マスターの負荷軽減
- 高可用性の向上
パーティショニング
タイミング: データ量が1TBを超える場合
戦略:
- テーブル単位でのパーティショニング
- 日付やユーザーIDによる分割
- クエリ性能の向上
インデックス最適化
継続的に実施:
- 頻繁に使用されるクエリの分析
- 適切なインデックスの追加
- 不要なインデックスの削除
オブジェクトストレージのスケーリング
Cloudflare R2
ストレージ容量
フェーズ1: 200GB フェーズ2: 1TB フェーズ3: 5TB以上
最適化戦略
-
画像・動画の圧縮
- アップロード前に画像を最適化
- 動画の解像度やビットレートの調整
- ストレージ使用量の削減
-
CDNキャッシュの活用
- Cloudflare CDNによるキャッシュ
- オリジン(R2)へのリクエスト削減
- 操作料金の削減
-
ライフサイクルポリシー
- 古いファイルの自動削除またはアーカイブ
- ストレージコストの最適化
-
アクセスパターンの最適化
- 頻繁にアクセスされるファイルをCDNキャッシュで配信
- 読み取り操作の削減
Cloudflareプランのアップグレード
Pro → Business
タイミング: フェーズ2(本番環境)
理由:
- レート制限機能の強化
- 詳細分析機能
- 優先サポート
- 無制限転送(プラン内)
Business → Enterprise
タイミング: フェーズ3(大規模スケール)
理由:
- カスタマイズ可能な機能
- 専用サポート
- SLA保証
- 高度なセキュリティ機能
トラフィック増加シナリオ
シナリオ: 10,000 → 100,000人
前提条件:
- 月間アクティブユーザー: 10,000 → 100,000人
- APIリクエスト数: 1,000万 → 1億リクエスト/月
- データベースサイズ: 100GB → 1TB
必要な対応:
| 項目 | 増加内容 | 追加コスト/月 |
|---|---|---|
| VPSサーバー | API Serverを+1台追加 | +¥9,980 |
| VPSサーバー | Gatewayを+1台追加(負荷分散) | +¥4,980 |
| データベース | Server 3のスペックアップ(8 vCPU、16GB RAM) | +¥10,000 |
| オブジェクトストレージ | R2ストレージ拡張(1TB → 5TB) | +$60 |
| Cloudflare | Enterprise検討 | +$500(要問い合わせ) |
| 合計追加 | 約+¥35,000/月(約+$250/月) |
注意: Cloudflare経由のネットワーク転送は無料(プラン内)のため、転送コストの増加はありません。
監視とメトリクス
スケーリング判断の指標
以下のメトリクスを監視し、スケーリングのタイミングを判断します:
-
CPU使用率
- 継続的に70%以上 → スケールアップ検討
- スパイクが頻繁 → 水平スケール検討
-
メモリ使用率
- 継続的に80%以上 → メモリ増量検討
-
ディスクI/O
- 継続的に高負荷 → SSDアップグレード検討
-
データベース接続数
- 最大接続数の70%以上 → 接続プール最適化またはサーバー追加
-
APIレイテンシ
- p95レイテンシが500ms以上 → スケール検討
-
エラー率
- エラー率が1%以上 → リソース不足の可能性
監視ツール
- Grafana Cloud: メトリクス、ログ、トレースの統合監視
- Cloudflare Analytics: トラフィック分析とボット検出
- PostgreSQL監視: クエリパフォーマンス、接続数、レプリカラグ
コスト最適化
段階的なスケーリング
- 初期段階での過剰な投資を回避
- 実際の負荷に応じてリソースを追加
- 不要なリソースの早期削減
リソースの効率化
- アイドルリソースの削減
- 適切なリソースサイズの選択
- 不要なサービスの停止
キャッシュ戦略
- Cloudflare CDNの最大限活用
- アプリケーションレベルのキャッシュ
- データベースクエリキャッシュ