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