一、多租户基本简介
多租户是一种有选择性的数据隔离技术,可以保证系统共性的部分被共享,个性的部分被单独隔离。
多租户在数据存储上存在三种主要的方案,分别是:独立数据库 一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本也高。
共享数据库,独立Schema 即所有租户共享数据库,但一个租户一个Schema。
共享数据库,共享Schema 即租户共享同一个数据库、同一个Schema,但在表中通过TenantID区分租户的数据。
二、pigx多租户实现原理
pigx采用的是第3种方案,即共享数据库、共享schema,在表中通过tenant_id字段来实现多租户数据隔离
1、如何确定租户的请求
如果把后端抽象的看成服务的集合,那么这些服务可以分为多租户相关服务与共享租户相关服务
PIGX通过在前端请求时头部带上TANENT-ID报文,来确定租户的请求:
后端服务通过TenantContextHolderFilter过滤器将请求中的tenant\_id值拿到(如果为空则采用默认值为1的租户),并通过TenantContextHolder放入上下文中,请求下游的业务便可通过TenantContextHolder.getTenantId()获取当前租户
TenantContextHolderFilter部分源码:@Override
@SneakyThrows
public void doFilter(ServletRequest servletRequest, ServletResponse s