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

マルチテナントとは何か

このドキュメントの目的

マルチテナントの概念を理解し、なぜIDサービスでマルチテナントが重要かを把握することが目標です。


マルチテナントとは

1つのシステム(アプリケーション・インフラ)で複数の顧客(テナント)を管理するSaaSアーキテクチャ

各テナントは独立した顧客・組織を表し、データは論理的または物理的に分離されます。


シングルテナント vs マルチテナント

シングルテナント(従来型)

┌─────────────────┐
│ 会社A用システム │ → データベースA
└─────────────────┘

┌─────────────────┐
│ 会社B用システム │ → データベースB
└─────────────────┘

┌─────────────────┐
│ 会社C用システム │ → データベースC
└─────────────────┘

特徴:

  • 顧客ごとに独立したシステム
  • 完全な分離(安全)
  • コストが高い(顧客数×インフラコスト)
  • メンテナンスが大変(顧客ごとにデプロイ)

マルチテナント(SaaS型)

┌─────────────────────────────┐
│ 1つの統合システム │
│ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │会社A│ │会社B│ │会社C│ │
│ │データ│ │データ│ │データ│ │
│ └─────┘ └─────┘ └─────┘ │
│ │
└─────────────────────────────┘

共通データベース
(論理的に分離)

特徴:

  • 1つのシステムで複数顧客を管理
  • コスト削減(インフラ共有)
  • メンテナンス効率化(一度のデプロイで全顧客に反映)
  • データ分離の実装が必要(セキュリティリスク)

なぜマルチテナントが必要か

理由1: コスト削減

シングルテナントの場合:

100社の顧客 × サーバー3台 = 300台のサーバー
月額コスト: 300台 × $100 = $30,000

マルチテナントの場合:

100社の顧客 → サーバー10台で運用可能
月額コスト: 10台 × $100 = $1,000

削減効果: 約97%のコスト削減

理由2: メンテナンス効率化

シングルテナント:

  • バグ修正 → 100回デプロイ(顧客ごと)
  • 新機能リリース → 100回デプロイ
  • DBマイグレーション → 100回実行

マルチテナント:

  • バグ修正 → 1回のデプロイで全顧客に反映
  • 新機能リリース → 1回のデプロイ
  • DBマイグレーション → 1回の実行

理由3: スケーラビリティ

シングルテナント:

  • 新規顧客 → 新しいシステムを構築(数日~数週間)

マルチテナント:

  • 新規顧客 → テナント作成(数秒~数分)

マルチテナントの主要な課題

課題1: データ分離

リスク: テナントAのユーザーがテナントBのデータを見られてしまう

対策の例:

  • データベースレベルでの分離(PostgreSQL RLS等)
  • アプリケーションレベルでの分離(WHERE tenant_id = ?)
  • ネットワークレベルでの分離(テナントごとにVPC)

詳細: データパーティション化とテナント分離

課題2: パフォーマンス分離(Noisy Neighbor)

リスク: 1つのテナントの負荷が他のテナントに影響

対策の例:

  • リソース制限(Rate Limiting)
  • テナントごとのクォータ設定
  • 大規模テナントは専用リソースに分離

課題3: カスタマイズ性

リスク: テナントごとに要件が異なる(認証方式、ポリシー、UI等)

対策の例:

  • 設定駆動アーキテクチャ(コード変更なしで設定変更)
  • テナントごとの設定管理API
  • Feature Flagによる機能切り替え

次のステップ

✅ マルチテナントの概念を理解した!

📖 次に読むべきドキュメント

  1. データパーティション化とテナント分離 - データをどう分離するか
  2. テナントオンボーディング設計 - テナントをどう作り・管理し・削除するか

関連リソース


最終更新: 2025-12-18 対象: IDサービス開発初心者