メインコンテンツまでスキップ

スケーリング戦略

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以上

最適化戦略

  1. 画像・動画の圧縮

    • アップロード前に画像を最適化
    • 動画の解像度やビットレートの調整
    • ストレージ使用量の削減
  2. CDNキャッシュの活用

    • Cloudflare CDNによるキャッシュ
    • オリジン(R2)へのリクエスト削減
    • 操作料金の削減
  3. ライフサイクルポリシー

    • 古いファイルの自動削除またはアーカイブ
    • ストレージコストの最適化
  4. アクセスパターンの最適化

    • 頻繁にアクセスされるファイルを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
CloudflareEnterprise検討+$500(要問い合わせ)
合計追加約+¥35,000/月(約+$250/月)

注意: Cloudflare経由のネットワーク転送は無料(プラン内)のため、転送コストの増加はありません。


監視とメトリクス

スケーリング判断の指標

以下のメトリクスを監視し、スケーリングのタイミングを判断します:

  1. CPU使用率

    • 継続的に70%以上 → スケールアップ検討
    • スパイクが頻繁 → 水平スケール検討
  2. メモリ使用率

    • 継続的に80%以上 → メモリ増量検討
  3. ディスクI/O

    • 継続的に高負荷 → SSDアップグレード検討
  4. データベース接続数

    • 最大接続数の70%以上 → 接続プール最適化またはサーバー追加
  5. APIレイテンシ

    • p95レイテンシが500ms以上 → スケール検討
  6. エラー率

    • エラー率が1%以上 → リソース不足の可能性

監視ツール

  • Grafana Cloud: メトリクス、ログ、トレースの統合監視
  • Cloudflare Analytics: トラフィック分析とボット検出
  • PostgreSQL監視: クエリパフォーマンス、接続数、レプリカラグ

コスト最適化

段階的なスケーリング

  • 初期段階での過剰な投資を回避
  • 実際の負荷に応じてリソースを追加
  • 不要なリソースの早期削減

リソースの効率化

  • アイドルリソースの削減
  • 適切なリソースサイズの選択
  • 不要なサービスの停止

キャッシュ戦略

  • Cloudflare CDNの最大限活用
  • アプリケーションレベルのキャッシュ
  • データベースクエリキャッシュ

関連ドキュメント