4

ASP.NET MVC2 で SaaS 基幹業務アプリケーションの構築を開始していますが、開始する前に適切なアーキテクチャ基盤を確立したいと考えています。

データ アーキテクチャとビジネス ロジックが非常にシンプルになり、効率性と費用対効果が重要な問題になるため、私は共有データベースと共有スキーマのアプローチに取り組んでいます。

テナント間でデータを適切に分離するために、テナント ビュー フィルター セキュリティ パターンを実装したいと考えています (こちらをご覧ください)。これを行うには、アプリケーションにログインしているユーザーに基づいて、アプリケーションがさまざまなテナント (DB ログイン) を偽装する必要があります。ログイン プロセスはできるだけシンプルにする必要があります (エンタープライズ クラスのソフトウェアにはなりません)。そのため、顧客はユーザー名とパスワードのみを入力する必要があります。

ユーザーは、 http ://tenant1.myapp.comやhttp://tenant2.myapp.comなどの独自のサブドメイン (サブドメイン ルーティングを使用) を介してデータにアクセスします。

このシナリオを満たす最善の方法は何ですか?

4

2 に答える 2

6

また、ConfigDB と ContentDB の 2 つのデータベースを使用することをお勧めします。

ConfigDB には、テナント テーブルと、このテーブル内の各テナントのコンテンツ データベースのホスト名、データベース名、sql ユーザー名、および sql パスワードが含まれており、usrAdmin と呼ばれる別の sql ユーザーを介してアクセスされます。

ContentDB には、ユーザーの SID (または SUSER_ID) でセグメント化されたすべてのアプリケーション テーブルが含まれており、usrTenantA、usrTenantB、usrTenantC などと呼ばれる各テナント SQL ユーザーによってアクセスされます。

データを取得するには、管理者として ConfigDB に接続し、適切なクライアントの資格情報を取得し、取得した資格情報を使用してサーバーに接続し、データベースにクエリを実行します。

これを行った理由は、水平方向のスケーラビリティと、必要に応じてクライアントを分離する機能のためです。

多くの ContentDB を持つことができるようになりました。サインアップする 10 テナントごとに、新しいデータベースを作成し、そのデータベースでクライアントのプロビジョニングを開始するようにアプリケーションを構成します。

または、いくつかの SQL サーバーをプロビジョニングし、それぞれにコンテンツ DB を作成し、過去に使用率が最も低いサーバーにコード プロビジョニング テナントを設定することもできます。

すべての通常のクライアントをサーバー A と B でホストすることもできますが、サーバー C は独自の個別データベースにテナントを持つことができます。すべてのマルチテナンシー コードはまだそこにありますが、これらのクライアントは、分離が高いため、より安全であると言えます。 .

于 2010-11-18T03:18:18.797 に答える
0

最も簡単な方法は、通過するすべてのクエリに対して照合する URL フィールドを含む Tenants テーブルを用意することです。

テナントが複数の URL を持つことができる場合は、テナントごとに複数の URL を保持する TenantAlias のようなテーブルを追加するだけです。

頻繁にヒットするため、このテーブルの Web 側をキャッシュします。値が変更されるたびにキャッシュを無効にします。

DotNetNuke を見ることができます。この正確なモデルを実装するのは、オープン ソースの CMS です。私はいくつかのアプリでモデルを使用していますが、うまく機能しています。

ところで、システム内のすべてのエンティティについて、上記のテーブル用に取得されたテナント ID 列が必要です。

于 2010-09-17T19:47:45.273 に答える