具有使用共享凭据的多个客户实例的多租户应用程序

时间:2011-08-12 01:50:49

标签: architecture entity-framework-4.1 saas multi-tenant

我已经搜索了SO和其他景点,以寻求有关我如何做到这一点的帮助。我看到许多人建议不要这样做,但我有合理而简单的原因,客户会想要这样做。

以下是我要做的事情:

我有一个多租户应用程序,其中包含一个用于管理应用程序的多租户方面的通用框架,例如数据存储位置等。每个租户都有“x”个用户可以访问租户的帐户。但是,每个租户可以将多个实例绑定到其帐户。例如,租户可能还有一个生产实例和一个测试或开发实例。每个实例与隔离数据库具有一对一的关系。我最有意义的是,我会在框架级别存储登录凭据,而不是每个单独的实例,因为这会以指数方式增加用户名和密码的数量。

设计相当简单,有一个Tenant对象,它包含一组用户和一组实例。将有一个额外的交叉引用对象,它将授权用户访问特定实例。例如,我可能只允许大多数租户用户访问生产实例,但对于系统管理员,他们可以完全访问所有实例。

我挂掉的部分是:

存储在所有实例中的用户信息实际上应该只包含用户名和密码等基础知识,因为名称,电话号码等详细信息都应该驻留在特定于实例的数据库中。更重要的是,用户将在每个实例中与另一个实体建立一对多的关系,无论是员工,个人还是联系对象。

我的问题变为:

根据设计,我有什么最简单的方法来链接模型(框架,实例)中的对象(用户和员工)?更重要的是,如何在所有实例中保持数据更改或修改同步,或者我是否应该担心?

我真的很感激任何人都可以提供任何反馈,特别是如果你已经解决了这样的问题或者有这种模型的经验。我非常注重现有的设计,因为它必须以这种方式工作以满足客户的要求,我需要使技术能够满足要求。

感谢您的专业知识!

布伦特

2 个答案:

答案 0 :(得分:11)

答案 1 :(得分:0)

<强>重写:

[看起来我的原始答案是偏离目标的,而且它大致就是你所拥有的。所以...]

  
    

如何在所有实例中保持数据更改或修改同步,或者我是否应该担心?

  

您是否有要求保持同步的要求或任何其他驱动程序?如果不... 假设你这样做,你需要决定你要同步的内容;什么是真理的唯一来源。

Publish / SubscribeObserver类型的方法可能就是你所追求的。

  • 实例“发布”对中央系统的更改,其他实例在其正常生命周期或ad-hoc期间根据中央系统发出的事件/通知进行更改。
  • 或类似但分散的方法,一次性向所有感兴趣的各方广播变化(我认为更难,并带来一系列新问题)。