我们正在开发一个“中间层”来替换现有的业务逻辑/数据访问层。我们面临的一个设计问题是,我们需要以允许多个客户的数据库和/或中间层部分作为我们托管产品的一部分存在于同一服务器上的方式来设计它。托管环境的数据库模式和设置此时已完全确定,因为它已经投入生产。本质上,在托管环境中的给定数据库服务器上,每个客户都有一个使用其唯一客户 ID 命名的 SQL Server 实例。
我们试图决定的是,是从客户端应用程序一直到 Web 服务、业务逻辑和对每个客户的数据库的数据访问都有一条单独的路径,还是每个部分都有一个单独的共享实例,其中数据访问层负责从正确的 SQL Server 实例或两者之间的某个地方获取数据。对于所有东西都有一个共享路径,如果任何一个部分发生故障,所有访问它的客户端都将死在水中。另一方面,对于每个客户都有单独的路径,除了可能过于复杂之外,还有(似乎)需要维护的更多内容?这是我们正在考虑的两个选项的可怕 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]
其中哪一个(或中间选项)会更好,为什么?