マルチテナンシーのサポート


10

シングルテナントアプリをマルチテナントアプリに変換するときに発生する典型的な課題は何ですか?セキュリティとデータの分離が最も重要だと私は思います。他には何がありますか?

私はかなり重要な自動化作業のアーキテクトの1人であり、歴史的にそれは私たちの会社がそれを使用しているだけでした。他の人にも利用してもらいたい。「マルチテナント化」について話すときは常に、あるテナントを持つユーザーを別のテナントが所有するデータから遠ざけることと、あるテナントを持つユーザーが(意図的または意図せずに)別のテナントに影響を与えないようにすることを話し合いますテナントの環境。私が疑問に思っているのは、セキュリティ/データ分離が本当にここでの唯一の主要な懸念であるのか、それとも私たちが考えていない他のいくつかの主要な懸念があるのか​​です。


最も簡単な解決策は?ハードウェアを含むシステム全体の新しいインスタンス。空の状態で、テナントごとに1つの新しいシステム。システムとデータが非常に貴重である場合、これはかなり良いオプションかもしれません。各インスタンスの新しいハードウェアが気に入らない場合は、仮想化を使用してください。それは最も効率的ではないかもしれませんが、確かに頭痛のトンを節約します。
SF。

おそらく、設計の観点からはこれが最も簡単ですが、管理の観点からはそうではありません。少なくとも私たちのシステム管理者は、この提案にあまり興奮していません。(そして、ええ、私たちはVMを使用しています。)管理するインスタンスの数(監視、展開など)を増やしています。実際に、これを管理しやすくして物理的な分離を実現する方法を検討していますが、表面的には、アプローチは、開発のシンプルさと管理のシンプルさをトレードオフするようです...?

回答:


11

データのサイロ化に加えて、次の問題が発生する可能性があります

  1. 可用性-単一のテナントでは、DoSのみがDoSを実行できますが、データが適切にサイロ化されている場合でも、テナントはリソースを使い果たす可能性があります。
  2. ロギング-すべてのログメッセージは単一のテナントを想定しています。テナントごとにログを保存しない限り、ログメッセージの有用性が低下する可能性があります。
  3. 同時実行性-シングルテナントのアプリは中程度の負荷で実行される可能性があります。または、いくつかのロックの高い競合により、特定の操作が効率的にシリアル化される場合があります。テナントごとにロックが乗算されると、以前には発生しなかった操作のインターリーブが発生する場合があります。これまで明らかになる可能性が非常に低かった競合状態は、現在現れる可能性があります。
  4. リソース競合の新しいソース-以前はn個のソケットとm個のファイルハンドルがあった可能性がありましたが、現在はテナントごとに乗算されます。
  5. 構成可能性/下位互換性のトレードオフ-置き換えをロールアウトするときにコンポーネントを廃止する前に、1つのテナントがコンポーネントを要求し、1つのテナントがそれを置き換える古いコンポーネントが無期限に残ることを要求することができます。
  6. 召喚状のターゲット-現在、あなたはあなたの会社に関連する問題の召喚状のターゲットです。マルチテナントでは、法的措置の当事者ではない場合でも召喚状の要求に応答する必要がある場合があります。

これらの一部は、すべてのテナントを同じアドレス空間(マシンまたはクラスター)で実行していると想定しています。各テナントがハードウェアでソフトウェアを実行している場合は、上記の一部を無効にして追加できます。

  1. デバッグするためにマシンにアクセスすることが難しい。
  2. 古いバージョンのサポートリクエスト。
  3. サードパーティの請負業者が設定できるようにするリクエスト。
  4. 実行するハードウェアに対する制御が少ない。
  5. 実行しているOSのパッチ/更新サイクルの制御が少ない。

1

私の意見では、マルチテナンシーの最大の問題はカスタマイズです。これは、ビジネスアプリケーションを企業に販売する場合に日常的に発生します。独自のスキンを必要とするすべての顧客のような単純なものから、追加のフィールド、ルール、フォーム、レポートを構成する機能まで、さまざまなものがあります。サポートする必要のあるカスタマイズのレベルは、アーキテクチャで重要な役割を果たします。


1

マイクの答えは非常に良いです。そして、そこにある多くのポイントは、それらがどれほど短いためにそれらの複雑さをほとんど下回っていますので、それらを心に留めてください。

私が付け加えたい1つの点は、新しいテナントを作成(および後で管理)するための優れた管理ツールが必要であることです。使用する物理アーキテクチャによっては、これは簡単なことではなく、見過ごされがちです。サービス製品としてのソフトウェアの利点は、テナントの数が多い場合にのみ効果を発揮するため、これに対応するにはかなりの労力を費やす必要があります。

スリラムの答えを拡張する。テナントごとのカスタマイズはほとんど禁止されています。テナントが変更する可能性のあるすべてのものは構成可能である必要があります。たとえば、ソリューションが少なくともいくつかの主要な領域でのデータフィールドの動的な追加に対応していない場合、カスタマイズの要求が殺到する可能性があります。それは(あなたがそれでは、それはYAGNIに反するとしましょう、あるいは少なくとも、コンフィギュレーションのこのレベルはほとんど重要な要件である少し追加の複雑さの先行投資が実際に完済んいくつかのケースの一つだあり、それを必要とするつもり)。


なぜカスタマイズが「禁止」されているのですか?それは確かに技術的に達成可能です。個々のテナント用にカスタマイズされた部分を提供しながら、複数のテナントのコアシステムの再利用を可能にするさまざまなパターンがあります。顧客がカスタマイズの代金を喜んで支払う場合は、それを検討するのが妥当だと思われます。このため、クライアントごとにカスタマイズできるマルチテナント製品は数多くあります。拡張性を可能にし、すべてを構成可能にすることをデフォルトにするのではなく、YAGNI IMOの精神に基づいています。
RationalGeek

1
ええと、私はソフトウェアをサービスとして実装することを一般的に言っています(「マルチテナンシー」から)。もちろん、技術的には達成可能ですが、SaaSの基本に反します。財務的には、多くのテナントの実装とおそらくインフラストラクチャを共有することで、コストを削減できます。これにより、製品を低価格で提供できるため、市場の「ロングテール」を捉えることができます(多数の人が小額の支払いのみを望んでいます)。システムの5つのブランチを維持できますが、15000は維持できません。それがSaaSの目的です。
ダニエルB

企業レベルでは、顧客を上陸させるためにコードを大幅にカスタマイズすることをいとわないSaaSベンダーがよく見られます。顧客がサービスに6または7の数値を支払う場合、これはおそらく妥当なビジネスモデルです。
RationalGeek

ええ、そのような場合には、私はそう思います。私が見たほとんどの変更は、既存のクライアントに対してデフォルトでオフになっている新しい設定可能な機能として実装されました。問題は、解決策がまだ始まっていないため、最初の3人または4人のクライアントがそれぞれ特別な扱いを受けるときだと思います。解決策は具体的になりすぎて、「OK、ハックするだけだ」という文化を生み出します。しかし、そうです、私は大口顧客に関するあなたのコメントに同意します。
ダニエルB

これは、カスタマイズ性に関して皆さんが行っている有用な区別です。同じ考え方が管理性にも当てはまると思います。私たちのマルチテナンシーはおそらく、ロングテールの顧客ではなく、比較的少数の大規模な顧客を対象としています。マルチテナンシーの主な目的がロングテールをキャプチャすることである場合、それは私たちにとって正しいアプローチではないかもしれません。これらの反射をありがとう。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.