既存のビジネスロジック/データアクセス層を置き換える「中間層」を開発しています。私たちが抱えている設計上の懸念の1つは、複数の顧客のデータベースや中間層の部分が、ホストされている製品の一部として同じサーバー上に存在できるように設計する必要があるということです。ホストされた環境のデータベーススキーマとセットアップは、すでに本番環境にあるため、この時点でかなり固定されています。基本的に、ホストされた環境の特定のDBサーバーでは、各顧客は、一意の顧客IDを使用して名前が付けられたSQLServerインスタンスを持っています。
私たちが決定しようとしているのは、クライアントアプリからWebサービス、ビジネスロジック、および各顧客のデータベースへのデータアクセスを介して個別のパスを使用するか、各部分の単一の共有インスタンスを使用するかです。ここで、データアクセス層は、正しいSQL Serverインスタンス、またはこれら2つの間のどこかからデータを取得する役割を果たします。すべての共有パスが1つであるため、1つのピースがダウンすると、それにアクセスするすべてのクライアントが水中で死んでしまいます。一方、顧客ごとに個別のパスがある場合、おそらく過度に複雑になるだけでなく、(一見)維持する必要があるものがたくさんありますか?これが私たちが検討している2つのオプションの恐ろしいASCIIアート画像です:
[Client]--| |--[DB]
[Client]--| |--[DB]
|--> [Web Service] --> [Business Logic] --> [Data Access] ----|
[Client]--| |--[DB]
[Client]--| |--[DB]
またはこれ:
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
[Client] --> [Web Service] --> [Business Logic] --> [Data Access] --> [DB]
これらのどれ(またはその中間のオプション)が優れているのか、そしてその理由は何ですか?