SaaS(Software as a Service)とは、ソフトウェアをクラウド環境などでホストし、ユーザーにサービスとして提供する形態のビジネスモデルです。マルチテナントとは、複数のユーザーが同一のリソースを共有するモデルや、それらを統一された体験を通じて管理する仕組みを指します。セキュリティや可用性、運用面などで独自の考慮事項が必要となりますが、インフラストラクチャコストの削減や運用効率の向上が見込めるため、近年その採用件数は右肩上がりに増加しています。本書は、エンジニア向けの本格的なSaaS解説本として、マルチテナントSaaSの概念、実践的なテクニックなど、総合的なノウハウをまとめ、ベストプラクティスとパターンに沿った効率的な開発を提案しています。
マルチテナントSaaSアーキテクチャの構築
―原則、ベストプラクティス、AWSアーキテクチャパターン
Tod Golding 著、河原 哲也、櫻谷 広人 訳
- TOPICS
- 発行年月日
- 2025年01月
- PRINT LENGTH
- 468
- ISBN
- 978-4-8144-0101-7
- 原書
- Building Multi-Tenant SaaS Architectures
- FORMAT
- Print PDF
目次
日本語版に寄せて 訳者まえがき はじめに 1章 SaaSマインドセット 1.1 出発点 1.2 統合モデルへの移行 1.3 マルチテナントの再定義 1.3.1 SaaSの境界線は? 1.3.2 マネージドサービスプロバイダーモデル 1.4 SaaSの本質はビジネスモデル 1.5 製品ではなくサービスを構築する 1.6 SaaSの定義 1.7 まとめ 2章 マルチテナントアーキテクチャの基礎 2.1 テナントを追加したアーキテクチャ 2.2 あらゆるSaaSアーキテクチャの2つの要素 2.3 コントロールプレーンの内部 2.3.1 オンボーディング 2.3.2 アイデンティティ 2.3.3 メトリクス 2.3.4 請求 2.3.5 テナント管理 2.4 アプリケーションプレーンの内部 2.4.1 テナントコンテキスト 2.4.2 テナント分離 2.4.3 データパーティショニング 2.4.4 テナントのルーティング 2.4.5 マルチテナントアプリケーションのデプロイ 2.5 グレーエリア 2.5.1 ティアリング 2.5.2 テナント、テナント管理、システム管理者 2.5.3 テナントのプロビジョニング 2.6 コントロールプレーンとアプリケーションプレーンの統合 2.7 自社のプレーンに最適な技術を選ぶ 2.8 絶対的なものを避ける 2.9 まとめ 3章 マルチテナントのデプロイモデル 3.1 デプロイモデルとは何か? 3.2 デプロイモデルの選択 3.3 サイロモデルとプールモデルの紹介 3.4 フルスタックのサイロデプロイ 3.4.1 フルスタックのサイロが適している場面 3.4.2 フルスタックのサイロに関する考慮事項 3.4.3 フルスタックのサイロの実例 3.4.4 フルスタックのサイロにおけるマインドセットに一貫して取り組む 3.5 フルスタックのプールモデル 3.5.1 フルスタックのプールに関する考慮事項 3.5.2 サンプルアーキテクチャ 3.6 ハイブリッドなフルスタックのデプロイモデル 3.7 混合モードのデプロイモデル 3.8 ポッドのデプロイモデル 3.9 まとめ 4章 オンボーディングとアイデンティティ 4.1 ベースライン環境の構築 4.1.1 自社のベースライン環境の構築 4.1.2 システム管理者のアイデンティティの作成と管理 4.1.3 管理コンソールからのオンボーディング 4.1.4 コントロールプレーンのプロビジョニングの選択肢 4.2 オンボーディング体験 4.2.1 オンボーディングはサービスの一部 4.2.2 セルフサービスと内部オンボーディングの比較 4.2.3 オンボーディングの基本要素 4.2.4 オンボーディングの状態の追跡と可視化 4.2.5 ティアベースのオンボーディング 4.2.6 オンボーディングされたリソースの追跡 4.2.7 オンボーディングの障害対応 4.2.8 オンボーディング体験のテスト 4.3 SaaSアイデンティティの作成 4.3.1 テナントアイデンティティの追加 4.3.2 オンボーディングにおけるカスタムクレームの追加 4.3.3 カスタムクレームの適切な利用 4.3.4 テナントコンテキストを解決するための一元化されたサービスは存在しない 4.3.5 フェデレーションSaaSアイデンティティ 4.3.6 テナントのグループ化/マッピング構造 4.3.7 テナント間でのユーザーIDの共有 4.3.8 テナント認証はテナント分離ではない 4.4 まとめ 5章 テナント管理 5.1 テナント管理の基礎 5.1.1 テナント管理サービスの構築 5.1.2 テナント識別子の生成 5.1.3 インフラストラクチャ構成の保存 5.2 テナント構成の管理 5.3 テナントライフサイクルの管理 5.3.1 テナントの有効化と無効化 5.3.2 テナントの廃止 5.3.3 テナントのティアの切り替え 5.4 まとめ 6章 テナントの認証とルーティング 6.1 正面玄関から入る 6.1.1 テナントドメイン経由でのアクセス 6.1.2 単一ドメイン経由でのアクセス 6.1.3 間接層の課題 6.2 マルチテナントの認証フロー 6.2.1 認証フローの例 6.2.2 フェデレーション認証 6.2.3 万能な認証方法は存在しない 6.3 認証済みテナントのルーティング 6.4 さまざまな技術スタックによるルーティング 6.4.1 サーバーレスのテナントルーティング 6.4.2 コンテナのテナントルーティング 6.5 まとめ 7章 マルチテナントサービスの構築 7.1 マルチテナントサービスの設計 7.1.1 従来のソフトウェア環境におけるサービス 7.1.2 プール型マルチテナント環境におけるサービス 7.1.3 既存のベストプラクティスの拡張 7.1.4 ノイジーネイバーへの対応 7.1.5 サイロ化するサービスの特定 7.1.6 コンピューティング技術の影響 7.1.7 ストレージに関する考慮事項の影響 7.1.8 メトリクスを用いた設計の分析 7.1.9 1つのテーマ、多くの視点 7.2 マルチテナントサービスの内部 7.2.1 テナントコンテキストの抽出 7.2.2 テナントコンテキストを用いたログとメトリクス 7.2.3 テナントコンテキストを用いたデータへのアクセス 7.2.4 テナント分離のサポート 7.3 マルチテナントの詳細の隠ぺいと一元化 7.4 傍受ツールと戦略 7.4.1 アスペクト 7.4.2 サイドカー 7.4.3 ミドルウェア 7.4.4 AWS Lambdaレイヤー/Extensions 7.5 まとめ 8章 データパーティショニング 8.1 データパーティショニングの基礎 8.1.1 ワークロード、SLA、そして顧客体験 8.1.2 Blast Radius 8.1.3 分離の影響 8.1.4 管理と運用 8.1.5 適材適所で使い分けるツール 8.1.6 プールモデルのデフォルト化 8.1.7 複数環境のサポート 8.2 ライトサイジングの課題 8.2.1 スループットとスロットリング 8.2.2 サーバーレスストレージ 8.3 リレーショナルデータベースのパーティショニング 8.3.1 リレーショナルデータベースのプールデータパーティショニング 8.3.2 リレーショナルデータベースのサイロデータパーティショニング 8.4 NoSQLのデータパーティショニング 8.4.1 NoSQLのプールデータパーティショニング 8.4.2 NoSQLのサイロデータパーティショニング 8.4.3 NoSQLのチューニング方法 8.5 オブジェクトのデータパーティショニング 8.5.1 オブジェクトのプールデータパーティショニング 8.5.2 オブジェクトのサイロデータパーティショニング 8.5.3 データベースのマネージドアクセス 8.6 OpenSearchのデータパーティショニング 8.6.1 OpenSearchのプールデータパーティショニング 8.6.2 OpenSearchのサイロデータパーティショニング 8.6.3 混合モードのパーティショニングモデル 8.7 テナントデータのシャーディング 8.8 データライフサイクルの考慮事項 8.9 マルチテナントデータのセキュリティ 8.10 まとめ 9章 テナント分離 9.1 中心的な概念 9.1.1 分離モデルの分類 9.1.2 アプリケーションによる強制的な分離 9.1.3 RBAC、認可、分離 9.1.4 アプリケーションの分離とインフラストラクチャの分離 9.2 分離モデルのレイヤー 9.3 デプロイ時とランタイムでの分離 9.3.1 傍受による分離 9.3.2 拡張性の考慮事項 9.4 実例 9.4.1 フルスタックの分離 9.4.2 リソースレベルの分離 9.4.3 アイテムレベルの分離 9.5 分離ポリシーの管理 9.6 まとめ 10章 EKS SaaS:アーキテクチャパターンと戦略 10.1 EKSとSaaSの相性 10.2 デプロイパターン 10.2.1 プールデプロイ 10.2.2 サイロデプロイ 10.2.3 プールデプロイとサイロデプロイの組み合わせ 10.2.4 コントロールプレーン 10.3 ルーティングに関する考慮事項 10.4 オンボーディングとデプロイの自動化 10.4.1 Helmを使用したオンボーディングの設定 10.4.2 Argo WorkflowsとFluxによる自動化 10.4.3 テナントを意識したサービスのデプロイ 10.5 テナント分離 10.6 ノードタイプの選択 10.7 サーバーレスコンピューティングとEKSの組み合わせ 10.8 まとめ 11章 サーバーレスSaaS:アーキテクチャパターンと戦略 11.1 SaaSとサーバーレスの相性 11.2 デプロイモデル 11.2.1 プールデプロイとサイロデプロイ 11.2.2 混合モードのデプロイ 11.2.3 デプロイに関するその他の考慮事項 11.2.4 コントロールプレーンのデプロイ 11.2.5 運用上の影響 11.3 ルーティング戦略 11.4 オンボーディングとデプロイの自動化 11.5 テナント分離 11.5.1 動的注入によるプール分離 11.5.2 デプロイ時の分離 11.5.3 サイロ分離とプール分離の同時サポート 11.5.4 ルートベースの分離 11.6 同時実行数とノイジーネイバー 11.7 サーバーレスコンピューティングのその先へ 11.8 まとめ 12章 テナントを意識した運用 12.1 SaaS運用のマインドセット 12.2 マルチテナント運用メトリクス 12.2.1 テナントアクティビティに関するメトリクス 12.2.2 俊敏性メトリクス 12.2.3 使用量メトリクス 12.2.4 テナントあたりのコストメトリクス 12.2.5 ビジネス健全性メトリクス 12.2.6 複合メトリクス 12.2.7 ベースラインメトリクス 12.2.8 メトリクスの計装と集約 12.3 テナントを意識した運用コンソールの構築 12.3.1 体験と技術メトリクスの組み合わせ 12.3.2 テナントを意識したログ 12.3.3 能動的な戦略の作成 12.3.4 ペルソナ固有のダッシュボード 12.4 マルチテナントデプロイの自動化 12.4.1 デプロイ範囲の制御 12.4.2 ターゲットリリース 12.5 まとめ 13章 SaaS移行戦略 13.1 移行におけるバランスの取り方 13.1.1 タイミングに関する考慮事項 13.1.2 フィッシュモデルの活用 13.1.3 技術変革の先に目指すもの 13.2 移行パターン 13.2.1 基礎 13.2.2 サイロ型リフトアンドシフト 13.2.3 レイヤー型移行 13.2.4 サービスごとの移行 13.2.5 パターンの比較 13.2.6 段階的なアプローチ 13.3 どこから始めるかが重要 13.4 まとめ 14章 ティアリング戦略 14.1 ティアリングパターン 14.1.1 使用量重視のティアリング 14.1.2 価値重視のティアリング 14.1.3 デプロイ重視のティアリング 14.1.4 フリーティア 14.1.5 複合ティアリング戦略 14.1.6 請求とティアリング 14.1.7 ティアリングとプロダクトレッドグロース 14.2 ティアリングの実装 14.2.1 APIのティアリング 14.2.2 コンピューティングのティアリング 14.2.3 ストレージのティアリング 14.2.4 デプロイモデルとティアリング 14.2.5 スロットリングとテナント体験 14.2.6 ティアの管理 14.3 運用とティアリング 14.4 まとめ 15章 SaaS Anywhere 15.1 基本的な概念 15.1.1 オーナーシップ 15.1.2 流れを制限する 15.1.3 さまざまな種類のリモート環境 15.1.4 地域ごとのデプロイvs.リモートリソース 15.2 アーキテクチャパターン 15.2.1 リモートデータ 15.2.2 リモートアプリケーションサービス 15.2.3 リモートアプリケーションプレーン 15.2.4 同じクラウド内にとどまる 15.2.5 統合戦略 15.3 運用上の影響と考慮事項 15.3.1 プロビジョニングとオンボーディング 15.3.2 リモートリソースへのアクセス 15.3.3 拡張性と可用性 15.3.4 運用上の洞察 15.3.5 更新のデプロイ 15.4 まとめ 16章 生成AIとマルチテナント 16.1 中心的な概念 16.1.1 マルチテナントによる影響 16.1.2 カスタマイズされたテナントAI体験の構築 16.1.3 幅広い可能性 16.1.4 SaaSとAI/ML 16.2 テナント固有のリファインメントの導入 16.2.1 RAGによるテナントレベルのリファインメントのサポート 16.2.2 ファインチューニングによるテナント固有のリファインメントのサポート 16.2.3 RAGとファインチューニングの組み合わせ 16.3 一般的なマルチテナントの原則の適用 16.3.1 オンボーディング 16.3.2 ノイジーネイバー 16.3.3 テナント分離 16.4 生成AIのプライシングとティアリングに関する考慮事項 16.4.1 プライシングモデルの開発 16.4.2 階層型テナント体験の構築 16.5 まとめ 17章 指針となる原則 17.1 ビジョン、戦略、組織 17.1.1 ビジネスモデルと戦略を構築する 17.1.2 効率性を徹底的に重視する 17.1.3 技術ファーストの罠を回避する 17.1.4 コスト削減を越えて考える 17.1.5 SaaSに全力で取り組む 17.1.6 サービス中心のマインドセットを採用する 17.1.7 既存のテナントペルソナを越えて考える 17.2 主要な技術上の考慮事項 17.2.1 万能なモデルは存在しない 17.2.2 マルチテナントの原則を守る 17.2.3 マルチテナントの基盤を初日から構築する 17.2.4 1回限りのカスタマイズは避ける 17.2.5 マルチテナントアーキテクチャを測定する 17.2.6 開発者体験を効率化する 17.3 運用のマインドセット 17.3.1 システムの健全性を越えて考える 17.3.2 能動的に構成を変更する 17.3.3 マルチテナント戦略を検証する 17.3.4 あなたはチームの一員です 17.4 まとめ 索引