技术方案
版权声明
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://duzhou.crazydan.io/docs/development/solution
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》。 转载或商用请注明来自渡舟平台!
多租户
- 共享服务
- 服务运行的资源利用率可以最大化,减少资源浪费
- 租户间的数据可能会存在相互干扰,并有数据泄漏风险,其完全由代码的准确性保证
- 租户共享一套代码,无法在编译期完成定制化,只能在运行期根据租户配置数据动态启禁相关功能模块, 使得定制化和定制化控制的复杂度增加
- 服务不可用会造成所有租户不能正常使用部分或全部功能
- 独立服务
- 数据完全隔离,租户间的数据互不干扰,且不会发生泄漏
- 资源浪费较大,处于静默的租户也会占用大量的内存资源: 可以考虑一种按需启动服务的机制,仅在租户需要使用时才激活服务, 比较理想的方式就是函数化,就像远程调用函数一样,不调用则不消耗资源, 调用后资源也会被自动回收
- 可以对不同租户提供不同的个性化服务,各个租户的运行代码可以是不同的
- 单一租户的服务不可用不会影响其他租户的服务可用性
- 数据隔离方案
- 单库分表:通过
租户标识
分表- 单表数据量会随租户规模快速增长
- 在数据规模较大时,会影响增删改查的性能,主要是查询性能
- 在应用版本升级涉及表结构变化时,能够较为方便地实施,但变更耗时也受数据规模的影响
- 单库多表:通过
租户标识
命名数据表- 单表数据量的增长速度较为平缓,与租户数量无关
- 单表的数据查询性能不受租户数量影响
- 应用升级时涉及表结构变更的实施范围更大,但表的变更耗时也不受租户数量影响
- 单库分表:通过
最终可以采用二者的综合方案,也即,在共享服务的模式下提供水平扩展能力, 根据租户的增减情况,动态增减服务群的规模,一个服务群负责为固定范围内的租户提供服务, 在具体的服务群内以共享服务方式提供给多个租户,且每个服务群均有各自独立的数据库, 该数据库可采用单表或多表模式存储服务群所面向的租户的数据。
通过服务群,可在最大限度利用资源的同时降低全部服务不可用的风险。
数据存储
- Apache CouchDB: JSON 存储方案,与 MongoDB、ElasticSearch 类似
- Apache Doris: 列式数据库,与 ClickHouse 类似,可用作数仓,其支持集群,部署更简单