過去数年間、私はマルチテナンシーという用語が飛び交うのを聞き続け、そのたびに Googleの意味 私を混乱させます:
(ウィキペディア):「ソフトウェアマルチテナンシー」という用語は、ソフトウェアの単一インスタンスがサーバー上で実行され、複数のテナントにサービスを提供するソフトウェアアーキテクチャを指します。テナントは、ソフトウェアインスタンスへの特定の特権を持つ共通アクセスを共有するユーザーのグループです。
正しい。 しかし、それはすでにサーバーが何であるかではありませんか?!?複数のクライアントにサービスを提供するソフトウェア?!? VM(または物理サーバー)があり、Webサーバー(httpd、Tomcatなど)の実行を開始し、そのWebサーバーが複数のHTTPクライアントへの要求の処理を開始した場合、thatはマルチテナントWebサーバーですか?そして、MySQLデータベースを立ち上げ、そのDBが複数のクライアントへの要求の処理を開始した場合、それは行われません。 マルチテナントDBになりますか?!?
anyサーバーをマルチテナントとして区別する必要はないと思います...サーバーがすでに実行することを意図しているのではありませんか(複数のクライアントにサービスを提供します)?
だから私は尋ねます:マルチテナンシーが "[an]ソフトウェアの単一インスタンスがサーバー上で実行され、複数のテナントにサービスを提供するアーキテクチャ"...それでは、その代替手段は何ですか?
または、言い換えると、サーバー(Webサーバー、DBなど)notをマルチテナントにする方法はありますか?!?
あなたの混乱は、専門用語「クライアント」(クライアントサーバーのように)とビジネス用語「クライアント」(有料の顧客のように)の間にあると思います。マルチテナンシーは通常、共有ハードウェアとソフトウェアを使用して、それぞれが独自の分離された環境を持つ複数のbusinessクライアントにサービスを提供するサーバーを意味します。
たとえば、単一のサーバーインスタンスで複数のWordpressブログを実行しています-実行中のWPプロセスは1つだけですが、展開は1つだけですが、それぞれに複数のブログが定義されています独自の分離されたデータストア(この場合、データベーステーブルのセット、一般的なマルチテナンシー手法)を使用して、各ブログ所有者が自分のサイトのみを管理できるようにします。他のブログと技術的にリソースやファイルを共有していることを知らない、または気にしません。 。これは、(単純な)マルチテナントサービスの例です。
マルチテナンシーの技術的な課題には、セキュリティ(1つのテナントが別のテナントのデータを表示できないようにする方法、大したことはありません)、信頼性と堅牢性(1つのテナントのバグやプラグインが他のテナントを破壊するのを防ぐ方法、または方法1つのテナントをオフラインにするか、他のテナントに影響を与えずにデータをバックアップする)、スケーラビリティ(サーバー全体を新しいハードウェアに移行することなく、多数の動的なテナントをサポートする方法)、プロビジョニング(管理、拡張する方法) 、システムを停止せずに無効にして新しいテナントを追加します)。
あなたがソフトウェアビジネスであり、顧客向けのカスタムWebアプリケーションを開発するとします。あなたは彼らのためにそれをサーバー上で実行します、そして時々彼らはいくつかの変更を注文します。
次に、別の顧客を獲得します。彼らもあなたのアプリケーションを望んでいます。いくつかの変更があります-独自のロゴなど、そしてもちろん異なるデータで、別のデータベースで実行されます。したがって、アプリケーションを微調整して、このバージョンを2番目のサーバーにインストールします。
顧客が多いほど、管理が難しくなります。
最終的には、oneアプリケーションに移動し、oneインストールを使用します。おそらく、oneデータベースを使用しますが、さまざまなユーザーが自分の独自のデータ。これは、アプリケーションのマルチテナントバージョンです。
もちろん、多くの顧客向けの製品を作成しているという考えから始めたとしたら、おそらく最初からそのようなWebアプリケーションを設計していたでしょう。しかし、ある顧客向けのカスタムソフトウェアとして始まり、その後、より大きなものに進化することがよくあります。そのため、「シングルテナント」から「マルチテナント」への移行は大きな問題になります。
重要な部分は、「テナントは、ソフトウェアインスタンスへの特定の特権を持つ共通のアクセスを共有するユーザーのグループです」です。
これをStackExchangeの例に入れましょう。ユーザーには、未登録ユーザー、ユーザー、モデレーター、スタッフの4つの主要なクラスがあります。また、ネットワークには160を超えるサイトがあり、ユーザーはサイトごとに異なる権限を設定している可能性があります。スタッフはどこにでもいる可能性がありますが、私はここソフトウェアエンジニアリングのモデレーターであり、StackOverflowのユーザーです。いくつかのサイトに登録されていません。
マルチテナントインスタンスでは、すべてのサイトが同じリソース(同じWebサーバー、同じファイルディレクトリ、同じデータベースなど)を共有します。次に、私がアクセスできるものとそのアクセスレベルを判別するための検出があります。たとえば、サブドメインを使用して、資格情報からアクセスレベルを読み込むことができます。すべてのユーザーレコードは同じデータベースに保存されていますが、サブドメインがアクセス許可と設定を読み込むためのキーになる場合があります。
シングルテナントの場合、すべてのサイトに異なるリソースがあります。それらは共通のコードベースを共有する場合があります。それらは同じ物理リソースを共有する場合がありますが、複数のデータベースまたはディレクトリ構造を持つ場合があります。データが混ざり合うことはありません。私のStackExchangeの例では、同じコードベースを160のWebルートディレクトリにデプロイし、新しいコードをデプロイするときに160のデータベーススキーマを更新できます。