SaaS開発ガイド【テナント編】

SaaS(Software as a Service)の開発において、アーキテクチャ設計の初期段階で最も重要な意思決定の一つが「データパーティショニング(テナントデータの分割戦略)」です。
「テナントのデータをどのように保存し、分離するか」という問いに対し、単に技術的な好みだけで決めてしまうと、サービスが成長した段階で深刻なパフォーマンス問題やコスト超過、運用崩壊を招くことになります。
今回は、マルチテナントSaaSにおけるデータパーティショニング戦略、特に「プールモデル」と「サイロモデル」それぞれに潜む、代表的な落とし穴について解説します。
本題に入る前に、SaaSにおけるデータ配置の2つの主要なアプローチを整理します。
これらは一長一短あり、「どちらか一方が正解」というものではありません。しかし、それぞれの特性を理解せずに採用すると、以下のような「落とし穴」にはまることになります。
「効率性が高い」としてデフォルトで採用されやすいプールモデルですが、リソースを共有するがゆえの重大なリスクがあります。
プールモデル最大の課題は、ある特定のテナントの振る舞いが、他のテナントに悪影響を及ぼす「ノイジーネイバー(騒がしい隣人)」問題です。
例えば、ある大規模なテナントが大量のデータ処理や複雑なクエリを実行してリソース(CPU、メモリ、I/O)を占有してしまうと、同じデータベースに同居している他のテナントのレスポンスが極端に遅くなってしまいます。
「すべてのデータが同じ場所にある」ため、アプリケーションレベルでの論理的な分離が必須となります。
テナントごとのワークロードは予測が難しく、変動しやすいものです。プールモデルでは複数のテナントが混在するため、データベース全体の負荷予測がさらに困難になります。
パフォーマンス低下を恐れて過剰なリソースを確保(オーバープロビジョニング)してしまい、結果的にコスト効率が悪化するケースも少なくありません。
セキュリティ要件の厳しいエンタープライズ顧客向けに採用されることが多いサイロモデルですが、運用とコストの面で課題が生じやすくなります。
テナント数が少ないうちは問題になりませんが、ビジネスが成長しテナント数が数百、数千と増えた時、サイロモデルは牙を剥きます。
サイロモデルでは、テナントごとにリソースを確保するため、以下の問題が発生します。
データパーティショニングにおいて、「万能なモデル」は存在しません。
成功している多くのSaaSでは、これらを二者択一で考えるのではなく、要件に応じて組み合わせるアプローチを取っています。
例えば、基本的なティアのテナントには効率的な「プールモデル」を適用し、コンプライアンス要件が厳しく高単価なプレミアムテナントには「サイロモデル」を提供する、といった「ティアリング戦略」です。
開発初期においては、まずは効率性の高いプールモデルを基本としつつ、将来的に特定のテナントをサイロへ切り出せるような柔軟性を持った設計にしておくことが推奨されます。
E-Book「SaaS開発ガイド」にてSaaS開発に取り組む前に知っておきたい重要ポイントを解説しています。
SaaSに関する基礎的な知識を身に付けたい方はぜひご一読ください。

Spread the word: