多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。
多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。
多租户技术可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制。通过使用多租户技术可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。而且,在租户之间共享应用程序的单个实例,可以实现当应用程序升级时,所有租户可以同时升级。同时,因为多个租户共享一份系统的核心代码,因此当系统升级时,只需要升级相同的核心代码即可。
这段是来自百度百科对于多租户技术的名词解释,下面是在 ABP 框架装实践启用多租户的主要步骤:
1.确认当前已禁用多租户设置
Configuration.MultiTenancy.IsEnabled = false;
2.初始化租户与租户管理员(启动时 seed 里面初始化)
3.完成一次登录
4.启用多租户
Configuration.MultiTenancy.IsEnabled = true;
5.查询共享数据时禁用租户过滤即可,禁用语法:
UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete);
未禁用可能遇到:Navigation property 'Tokens' on entity of type 'User' cannot be loaded because the entity is not being tracked.
6.解决重启服务后需要重新登录,原因是启用多租户后没有记录到 TenantId 导致的,下面是解决方案
- 登录时记录 TenantId 到 Claim;
- 在 PlatformJwtSecurityTokenHandler 类中手动指定 SetTenantId;