多租户是一种软件架构技术,可以实现多个租户共享系统实例,用户间能够实现数据与行为的隔离。在开发多租户系统中我们常遇到一下问题。
租户识别
- 如何识别租户,一般从
Cookie
,Header
,Domain
,URL Path
,Env
,JWT
中解析租户标识
租户标识传播
- 下租户标识转播
Seata
,Feign
,RestTemplate
数据隔离
- 一般数据隔离模式主要有三种,行级别、Schema、database级别。三种模式的优缺点不过多介绍了。网上有很多资料
- 对于schema或database级别的隔离来说,当微服务架构下。可能数据库连接数会很快达到瓶颈难以支撑大量租户。
- 需要做Connection级别的重用
- redis数据隔离
定制化业务逻辑
- toB Saas 下很常见的定制化业务逻辑,如何让定制化不要侵入到标准产品中。需要租户级别的隔离
个性化配置
- 某些租户列表展示或者过滤条件不同,需要支持配置化。
动态脚本引擎
- 例如金额计算,易变业务规则。有可能每个租户都不一样,如何支持。
开户
- 租户快速开户。
多租户开发框架
简介
multi-tenancy-datasource-spring-boot-starter
是一个基于springboot
的多租户的开发神器. 包含了多租户场景下业务封装和组件抽象。
特性
- 数据库隔离模型: 基于
Postgresql
的schema
,database
级别隔离 - Redis隔离模型: 为每个key增加租户前缀
- 租户标识解析: 从
Cookie
,Header
,Domain
,URL Path
,Env
中解析租户标识 - 租户标识传播: 支持
Seata
,Feign
,RestTemplate
- 数据源: 多个租户复用数据库
Connection
减少资源消耗,也可使用独立数据源 - 租户业务执行器: 设置和释放当前线程的租户上下文
- 动态注册租户: 基于
Redis Stream
在运行期注册租户 - baseline jdk17. support Graalvm.
-
postgresql
中表DDL对比和模版Schema
,方便新增租户和查看其差异 - 扩展cola组件,抽象租户定制化配置类
TenantCustomization
,租户动态脚本引擎.TenantDynamicScriptExecutor
满足定制化业务逻辑的开发。
github链接