什么是多租户维基百科:“软件多租户是一个软件架构,软件只有一个实例运行在服务器,并服务于多个租户一个租户包含一组用户,他们拥有指定权限,共同访问一个软件实例一个多租户架构,应用程序为每个租户提供一个专属于他们的数据、配置、用户管理、租户特有的功能和属性多租户架构而多实例框架抽象而成,多实例架构是把每个实例看成一个租户“,现在小编就来说说关于如何解决多租户?下面内容希望能帮助到你,我们来一起看看吧!

如何解决多租户(什么是多租户)

如何解决多租户

什么是多租户

维基百科:“软件多租户是一个软件架构,软件只有一个实例运行在服务器,并服务于多个租户。一个租户包含一组用户,他们拥有指定权限,共同访问一个软件实例。一个多租户架构,应用程序为每个租户提供一个专属于他们的数据、配置、用户管理、租户特有的功能和属性。多租户架构而多实例框架抽象而成,多实例架构是把每个实例看成一个租户。“

多租户通常用来创建Saas(软件作为服务)应用(云计算)。多租户有多种架构:

多部署 - 多数据库

这种实际上不算多租户,但是,如果我们为每个客户(租户)运行应用的一个实例,并使用一个独立的数据库,那么我们就可以在一台服务器上为多个租户服务,我们只要确保应用的多个实例不要在一个服务器的环境下互相冲突就行。

为一个不是为多租户设计,但已经在运行的应用,提供了可能性。这种方式虽然使得创建一个不考虑多租户的应用相对容易,但在安装、使用和维护方面有些问题。

单部署 - 多数据库

用这种方式,我们在一个服务器上运行应用的单一实例,我们有一个主(宿主)数据库存储租户元数据(像租户名和子域),并为每个租户维护一个隔离的数据库。我们一旦识别当前租户(例如:从子域或从一个用户登录窗体),就切换到该租户的数据库里执行操作。

用这种方式,我们应该在设计应用时,在某些层面上设计成多租户,但应用的大部分还是不依赖于多租户。

我们应该为每个租户创建并维护一个隔离的数据库,包括数据迁移。如果我们有多租户就需要维护它们专有的数据库,在应用更新时,可能就需要花很长的时间进行数据库结构迁移。由于我们有租户的隔离的数据库,所以我们可以单独地备份各自的数据库,同样在租户要求下,我们也可以移动租户数据库到一个更强大的服务器。

单部署 - 单数据库

这是最纯粹的多租户架构:我们只在一台服务器上部署应用的单个实例和单个数据库。我们在每个表(关系型数据库)里用一个TenantId(租户Id或类似的)字段来区分隔离每个租户数据。

这种方式易于安装和维护,但难于创建这种应用,因为我们必须防止一个租户读或写其它租户数据。我们得为每次的数据库读取(select)操作添加TenantId来过滤。同样,我们也在每次写数据库时进行检查当前实体是否与当前租户相关,这就是乏味和易犯错的地方。但ABP自动使用数据过滤技术帮我们解决这些问题。

这种方式在有很多租户和大数据量的情况下,可能带来性能问题,我们可以使用表分区或其它数据库特性来解决这个问题。

单部署 - 混数据库

我们可能想存储租户数据到一个数据库,但想为有需要的租户创建单独的数据库。例如,我们可以存储租户的大数据到各自的数据库,但其它的都保存到另一数据库。

多部署 - 单/多/混 数据库

最后,我们可能想部署我们的应用到多个服务器(像分布式服务器集群)获得更好地性能、实用性和扩展性。这是一种依赖于数据库的方式。

宿主与租户

首先我们要在多租户系统里定义两个术语:

,