概要
マルチテナンシー (またはマルチテナント) とは、単一のソフトウェアのインスタンスが複数のテナント (ユーザーグループ) にサービスを提供できるアーキテクチャです。SaaS (Software-as-a-Service) オファリングは、このマルチテナント・アーキテクチャの一例です。
クラウド・コンピューティングにおいて、マルチテナンシーは、サーバーリソースがさまざまな顧客の間で分割される共有ホスティングを指すこともあります。
マルチテナンシーは、ソフトウェアインスタンスまたはコンピューターシステムが 1 人のエンドユーザー、あるいは 1 つのユーザーグループを有するシングルテナンシーと正反対のものです。
マルチテナント・アプリケーションでは通常、アプリケーションのルックアンドフィールをカスタマイズする、テナントがユーザーの特定のアクセス制御権限と制限を決定できるようにするなど、テナント向けのカスタマイズが可能です。
タイムシェアリングから SaaS へ
マルチテナンシーのアイデアは何十年も前からあります。1960 年代、強力で高価なメインフレームを持つ大学で、複数のユーザーが基本的に同時にコンピューターにアクセスできるタイムシェアリング・ソフトウェアが開発されました。
そのアイデアは決して消え去ることはなく、今日ではマルチテナンシーの概念がクラウド・コンピューティングを可能にしています。パブリッククラウドは、共有リソース (処理能力とメモリ) のプールを取得し、それを複数のテナント間で分割します。同じ物理マシンまたはマシンのグループで実行されたとしても、各テナントのデータとワークロードは分離された状態を維持します。
同じアイデアをさらに一歩進めてソフトウェア・アーキテクチャに適用すると、SaaS の先進的なコンセプトにたどり着きます。SaaS プロバイダーは、アプリケーションの単一のインスタンスを実行し、個々の顧客にアクセスを提供します。他のすべてのユーザーと同じソフトウェアにアクセスしている場合でも、各ユーザーのデータは分離された状態を維持します。
Kubernetes のようなコンテナ・オーケストレーション・プラットフォームを指す場合、マルチテナンシーという言葉は通常、複数のプロジェクトに対応する単一のクラスタを意味します。クラスタは、各プロジェクトを他のプロジェクトから分離して実行するように構成されています。
マルチテナンシーとクラウド・コンピューティング
前述の通り、概念としてのマルチテナンシーは、複数のテナントに提供されるソフトウェア・アプリケーションの単一インスタンスであるため、クラウド・コンピューティングの重要な機能です。クラウドは、SaaS アプリケーションに関連付けられることが多いマルチテナンシーとは対照的に、Platforms-as-a-Service (PaaS) と見なされます。
クラウド・サービス・プロバイダーは、複数のユーザー (またはテナント) に割り当てられるリソースのプールから、クラウド・コンピューティングに必要なプラットフォームと基盤となる IT インフラストラクチャをユーザーに提供します。
クラウド・アーキテクチャは、アプリケーションが実行されるオンラインプラットフォームを実現するために、クラウドを構築するために必要なすべてのコンポーネントと機能をつなぎ合わせる方法です。
クラウド・プラットフォームの設計には、コンテナ化、オーケストレーション、アプリケーション・プログラミング・インタフェース (API)、ルーティング、セキュリティ、管理、自動化ソフトウェアなどのテクノロジーを取り入れるために開発レベルをさらに向上する必要があります。
パブリッククラウド・アーキテクチャ:エンドユーザーが所有していないリソースから作成されたクラウド環境。他のテナントに分配できます。
プライベートクラウド・アーキテクチャ:主にエンドユーザー専用に定義されたクラウド環境。通常はユーザーのファイアウォール内部にあり、オンプレミスの場合もあります。
マルチテナント・アーキテクチャのメリット
マルチテナンシーにはさまざまな利点があり、それはクラウド・コンピューティングの利用の広がりからも明らかです。
マルチテナンシーはお金を節約できます。コンピューティングのコストがかなり安価なうえ、マルチテナンシーにより、リソースを統合して効率的に割り当てることができるため、最終的に運用コストを節約できます。個々のユーザーにとって、多くの場合、クラウドサービスや SaaS アプリケーションの利用に料金を支払う方が、シングルテナントのハードウェアおよびソフトウェアを実行するよりも費用対効果が高くなります。
マルチテナンシーは柔軟性をもたらします。独自のハードウェアとソフトウェアに投資している場合、需要量が高いときには容量の上限に達し、需要量が低いときにはアイドル状態になることがあります。一方、マルチテナントクラウドでは、ニーズの増減に応じて、それを必要とするユーザーにリソースのプールを割り当てることができます。パブリッククラウド・プロバイダーのユーザーは、必要なときに追加の容量にアクセスすることができ、不要なときには料金を支払う必要がありません。
マルチテナンシーの方が効率的です。マルチテナンシーにより、個々のユーザーがインフラストラクチャを管理したり、更新と保守に対応したりする必要性が減少します。個々のテナントがこのような定期的な対応を実行する際は、中央のクラウドプロバイダーに頼ることができるため、独自のチームは必要ありません。
クラウドについてさらに詳しく知る
シングルテナントの方が適しているケース
マルチテナントにはさまざまな利点がありますが、プライベートクラウドや独自のデータセンターの使用など、シングルテナントのコンピューターシステムの方が適しているユースケースがあります。
中でも主なものが、機密データを含むアプリケーションのデータセキュリティです。パブリッククラウド環境と SaaS 製品は、ワークロードとデータを分離するように設計されており、設計どおりに機能することが実績として示されています。しかし制御試験で、クラウド環境でのクロステナント攻撃が少なくとも理論的に可能になる脆弱性が発見されています。
実際には、このようなリスクは比較的小さいものです。米国国家安全保障局 (NSA) のクラウドの脆弱性に関する 2020 年のレポートによると、共有されたテナンシーの脆弱性はまれで、発生するには高度な複雑化が必要です。NSA のレポートが公開された時点では、主要なパブリッククラウド・プロバイダーに対するクロステナント攻撃は確認されていません。NSA は、これらのリスクを、不十分なアクセス制御や設定ミスによるリスクよりも小さいと考えています。
Linux のマルチテナント環境
マルチテナント環境をセットアップする場合、仮想マシン (VM) を使って環境を分離するか、それともコンテナを使うかという選択に直面します。
VM を使用すると、ハイパーバイザーは、それぞれ独自のオペレーティングシステム、アプリケーション、依存関係を持つゲストマシンを起動します。ハイパーバイザーによって、ユーザーが互いに分離されていることを確実にすることもできます。
VM に比べて、コンテナはより軽量で柔軟性があり、スケーリングが容易なモデルを提供します。コンテナは、カーネルとコンテナランタイムを使用して各コンテナを起動し、単一のホストに複数のアプリケーションをデプロイすることにより、マルチテナンシーのデプロイを単純化します。それぞれが独自のカーネルを含む VM とは対照的に、コンテナで実行されているアプリケーションは、複数のテナント間でもカーネルを共有します。
Linux® では、名前空間により、複数のコンテナが対立を生じさせることなく、同じリソースを同時に使用できるようになります。コンテナのセキュリティ保護は、実行中のプロセスをセキュリティ保護することと同じです。
コンテナ・オーケストレーションに Kubernetes を使用すると、単一の Kubernetes クラスタを使用してマルチテナント環境をセットアップすることができます。テナントを独自の名前空間に分離し、テナントの分離を強制するポリシーを作成することができます。