Skip to content

💻 多租户技术实现原理

多租户技术实现原理

  • 多租户引擎框架内置了一个多租户解析器,根据 请求参数 中的 tenantId 或 请求头 Headers 中的 TENANT-ID 获取租户,如果租户不存在则无法访问系统,如果租户隔离模式为 COLUMN,则不切换数据源,使用该租户的ID进行数据的增删改查操作;如果租户隔离模式为 DATASOURCE,则系统动态切换数据源。

支持主域名子域名模式自动区分租户ID。

请求参数 中的 tenantId 高于 请求头 Headers 中的 TENANT-ID

COLUMN 模式多租户

  • 通过注解 + 拦截器的方式实现租户数据的隔离。
  • COLUMN 模式隔离的租户模式采用的 MyBatis-Plus 的行级多租户插件,即所有租户使用同一个数据库,通过 tenant_id字段区分,在增删改查时,该插件均会自动拼接 tenant_id=xxx 的条件。

多租户插件

TenantLineInnerInterceptor 是 MyBatis-Plus 提供的一个插件,用于实现多租户的数据隔离。通过这个插件,可以确保每个租户只能访问自己的数据,从而实现数据的安全隔离。

DATASOURCE 模式多租户

  • DATASOURCE 模式采用动态数据源方式实现租户数据的隔离。
  • DATASOURCE 模式隔离的租户模式采用的 MyBatis-Plus 的动态数据源方案实现多租户动态切换数据源,即每个租户使用独立的数据库。

动态数据源

  • dynamic-datasource-spring-boot3-starter 是 MyBatis-Plus 提供的一个动态数据源方案,用于动态切换数据源。 通过动态切换数据源,可以确保每个租户只能访问自己的数据源,从而实现数据的安全隔离。