Architecture 多租户中间层体系结构

Architecture 多租户中间层体系结构,architecture,multi-tenant,middle-tier,Architecture,Multi Tenant,Middle Tier,我们正在开发一个“中间层”来取代现有的业务逻辑/数据访问层。我们所关注的设计问题之一是,我们需要以一种允许多个客户的数据库和/或中间层数据块作为托管产品的一部分存在于同一台服务器上的方式进行设计。在这一点上,托管环境的数据库模式和设置是一成不变的,因为它已经投入生产。实际上,在托管环境中的给定DB服务器上,每个客户都有一个使用其唯一客户ID命名的SQL server实例 我们试图决定的是,是否为每个客户提供一条从客户端应用程序到web服务、业务逻辑和数据库数据访问的单独路径,还是为每个部分提供一

我们正在开发一个“中间层”来取代现有的业务逻辑/数据访问层。我们所关注的设计问题之一是,我们需要以一种允许多个客户的数据库和/或中间层数据块作为托管产品的一部分存在于同一台服务器上的方式进行设计。在这一点上,托管环境的数据库模式和设置是一成不变的,因为它已经投入生产。实际上,在托管环境中的给定DB服务器上,每个客户都有一个使用其唯一客户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]

这是一个相当普遍的问题,所以我将给出一个相当普遍的答案。我过去曾基于类似的原则构建过平台,我能给你的唯一建议是仔细考虑将架构分为两层:

  • 一个完全通用的框架,处理所有常见的通用操作
  • 一个可定制的“客户”特定层,其中可以包含任何不寻常的客户特定功能
也许您的许多客户可以单独在通用框架上操作,这很好,但是当客户愿意为一些提示付费时,您可以通过对通用层的扩展(而不是修改)来适应他们

总的来说,我们通过相当标准的技术处理了这种扩展性和通用与专用行为的耦合——每个客户的配置文件定义了他们的处理“管道”、客户程序集的动态加载、接口的大量使用、,允许通用组件在运行时将操作委托给标准实现或特定于客户的实现,等等


希望能有所帮助。

谢谢您的回复。事实上,我们最终选择了第二个,不是因为我们在任何东西上都有大量需要的定制材料,而是因为它更符合我们的目标。希望你不要等得太久,等着听到你的回答。