マルチテナントとは何か
このドキュメントの目的
マルチテナントの概念を理解し、なぜ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による機能切り替え
次のステップ
✅ マルチテナントの概念を理解した!
📖 次に読むべきドキュメント
- データパーティション化とテナント分離 - データをどう分離するか
- テナントオンボーディング設計 - テナントをどう作り・管理し・削除するか
関連リソース
- Concept: マルチテナント - idp-serverにおけるマルチテナント実装の詳細
最終更新: 2025-12-18 対象: IDサービス開発初心者