戻る

マルチテナントSaaSアーキテクチャ

ニキータ・ハビャ

ニキータ・ハビャ

7分間の読み物

|

3 day前

マルチテナントとは、単一のソフトウェアアプリケーションインスタンスが複数の顧客(テナント)にサービスを提供するアーキテクチャスタイルです。これは、複数のユーザーや組織がデータを分離した状態で同じアプリケーションを利用するSaaS(Software as a Service)アプリケーションの台頭とともに普及しました。マルチテナントが登場する以前、SaaSアプリケーションの主流はシングルテナントアーキテクチャであり、各顧客がアプリケーションの専用インスタンスを保有していました。これらの概念を詳しく見ていきましょう。

目次

テナントとは?

テナントとは、単に(ワークスペース内の)ユーザーユーザーグループ、または組織全体であり、共有アプリケーションやシステムを利用する存在です。 これらのテナントは、データの分離と安全性を確保するために効果的に管理される必要があります。これらすべては、テナント管理におけるシングルテナント方式とマルチテナント方式に分類されます。

これらの概念についてさらに掘り下げてみましょう。

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

シングルテナント vs マルチテナント アーキテクチャ図


マルチテナントの深層を探る 🌊

ビルとアパートの比喩 🏢

マルチテナントを議論する際によく用いられる比喩が、アパートの建物個々の住戸です。

なぜマルチテナントなのか? ❓

マルチテナントとは、テナントがデータを共有するのではなく、データを論理的に分離したまま同じアプリケーションインスタンスを共有することを意味します。 以下のような場合に適しています:

  1. コストを抑えることが優先される場合
  2. インフラの保守・管理に費やす時間を削減したい場合

マルチテナントアプリケーションをシングルテナントアプリケーションのように動作させる(専用リソースを提供することで)ことは、その逆よりもはるかに容易です。

騒がしい隣人問題 🏘️

マルチテナント環境におけるカスタマイズの取り扱い ⚙️

テナントのルーティング方法 🚏

マルチテナントアプリケーションにおけるテナントのルーティングは、アプリケーションの要件やアーキテクチャに応じて様々な方法で実現できます。

一般的な方法には以下のようなものがあります:

サブドメインとパスベースルーティングのSEOへの影響 📈

サブドメインは、ウェブサイトの順位や総合的なSEOパフォーマンスへの影響に関して懸念されることがよくあります。 検索エンジンサブドメインをメインドメインとは別個のエンティティとして扱います。つまり、各サブドメインにはバックリンク、コンテンツ最適化、権威性構築など、独自のSEO対策が必要です。 一方、パスベースルーティングでは、すべてのコンテンツがメインドメイン下に配置されるため、メインドメインのSEO上の利点継承できます。

テナントが明確なアイデンティティやブランディングを必要とする場合(例:異なる製品やサービス)、サブドメインがより適切な選択肢となります。一方、SEOが主要な関心事となるアプリケーション(例:コンテンツプラットフォーム、ブログなど)には、パスベースルーティングがより適しています。


マルチテナントにおけるスケーラビリティ 📐

マルチテナントを扱う際に留意すべき核心的な要素は、データ分離リソース管理の2点です。

1. データ分離:

これは単純に、私(テナントとして)が他のテナントのデータにアクセスできず、逆もまた然りであることを意味します。これはテナントのセキュリティとプライバシーにとって重要です。データ分離を実現する主な手法は以下の通りです:

  1. サイロモデル/データベースレベル分離:各テナントが独自のデータベースインスタンスを保有。最高レベルのデータ分離を実現するが、維持コストが高くなる。
  2. 分離スキーマモデル/スキーマレベル分離:共有データベース内に各テナント専用のスキーマを配置。データ分離とリソース利用効率のバランスに優れる。
  3. プールモデル / 行レベル分離: 全テナントが同一データベースとスキーマを共有するが、テナント識別子を用いてデータを論理的に分離する。中小規模のマルチテナントアプリケーション構築において、最も費用対効果が高く一般的な手法である。

データ分離手法の選択は、セキュリティ要件、カスタマイズニーズ、スケーラビリティ目標、予算などの要因によって決まります。

2. リソース管理:

これは、マルチテナントアーキテクチャにおいて、共有リソース(コンピューティング、ストレージ、ネットワークなど)がテナント間でどのように割り当てられ管理されるかを指します。

先述した「ノイジーネイバー問題」は、マルチテナントにおけるリソース管理の課題の一つであり、あるテナントの過剰な使用が他のテナントのパフォーマンスに影響を与える可能性があります。

この問題に対処するには、リソースを効果的に管理し、テナントの要件と使用パターンに基づいて割り当てる必要があります。 これを実現することで、アプリケーションのパフォーマンス、コスト効率、運用効率、スケーラビリティが向上します。

実世界の事例 🌐

マルチテナントは、プロジェクト管理、CRM、コンテンツ管理、LMSなど様々な分野で広く利用されています。 以下のような多くの人気SaaSアプリケーションで採用されています:


Next.js におけるマルチテナント 🚀

Next.js は、マルチテナントアプリケーションの構築に使用できる人気の React フレームワークです。

カスタムサブドメインルーティングと、テナント固有のロジックを処理するミドルウェアの使用によってこれを実現します。

Lee Robinson による Next.js でのマルチテナント実装の動画をご覧ください: Next.jsでのマルチテナントSaaS

マルチテナントデモ: https://vercel.com/templates/next.js/platforms-starter-kit

Github: https://github.com/vercel/platforms

まとめ