我们正在开发一个“中间层”来代替现有的业务逻辑/数据访问层。我们面临的设计问题之一是,我们需要以允许多个客户的数据库和/或中间件部件在同一服务器上作为我们托管方案的一部分的方式进行设计。托管环境的数据库架构和设置目前已经比较固定,因为它已经处于生产状态。基本上,在托管环境中的给定DB服务器上,每个客户都有一个SQL Server实例,该实例使用其唯一的客户ID进行命名。
我们试图决定的是,是否为每个客户端应用程序通过Web服务、业务逻辑和数据访问从数据库到单独的路径,还是采用每个部件的单一共享实例,其中数据访问层负责从正确的SQL Server实例获取数据,或者两者之间。如果所有内容都采用单一共享路径,如果任何一个部件出现故障,所有访问它的客户端都将无法使用。另一方面,如果为每个客户端单独提供路径,则似乎需要维护更多内容,可能过于复杂?以下是我们正在考虑的两个选项的可怕ASCII艺术图片:
或者这样:
哪一种选项(或者中间的折中方案)更好,为什么?
我们试图决定的是,是否为每个客户端应用程序通过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]
哪一种选项(或者中间的折中方案)更好,为什么?