软件即服务概念的推动,定制化到通用化的发展,用一套代码完成适应不同企业的需求,利用多租户技术可以去做到这一点。ABP里提供了多租户这一概念并且也在Zero模块中实现了这一概念。
一、多租户的概念
单部署-单数据库:部署应用程序的单个实例和单个数据库。在每个数据表(关系型数据库)里用一个TenantId(租户Id或类似的如企业Id)字段来隔离区分每个租户数据。
单部署-多数据库:部署应用的单一实例,用一个主(宿主)数据库存储租户元数据(像租户名和子域),并为每个租户建立并维护一个隔离的数据库。操作上通过识别当前租户并从主数据库中读取相对应的存储数据库地址,切换到该租户独有的数据库中执行操作。
多部署-多数据库:为每个租户部署应用的一个实例并使用一个独立的数据库,那么我们就可以在一台服务器上为多个租户服务,只需确保相同应用的多个实例在一个服务器的环境下不会互相冲突就行。
还有两种多租户形式,诸如单部署-混搭数据库、集群部署-单/多/混搭数据库,不再提及,ABP针对于这五种多租户形式都可以使用。
宿主与租户:对于这两个概念,最好的理解方式便是酒店,酒店老板即是宿主,租户只拥有房间权限,酒店老板可以提供管理所有租户和房间。
二、ABP中多租户配置
1、启用/禁用多租户
如果不需要多租户,比如说没有多租户情形,应用部署在企业私有服务器上,那么也可以不考虑多租户的使用,可以在ABP中关闭多租户(尽管关闭了,但默认还是会使用一个租户,默认租户Id为1,此时只有这个默认租户没有宿主)。在WebCoreModule中PreInitialize方法内可以添加如下代码启用或关闭多租户,默认是启用的。
public override void PreInitialize() { ... Configuration.MultiTenancy.IsEnabled = true; ... }