多租户技术是一种软件架构技术,可以实现多个租户共享系统实例,并且租户间能够实现数据与行为的隔离
用户数据存储主要分为三种方式:
- 独立数据库
- 共享数据库但隔离数据结构
- 共享数据库且共享数据结构
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-27-1024x338.png)
传统软件模式是将研发出来的产品直接拿到客户现场去交付,为每一个客户部署一套相应的软件产品,比如医院的管理系统都是部署到医院的内网
Saas模式是类似电商等运营的一些平台,现在更多的是部署到云上,这种就是我们说的采用Saas化的一个模式,客户将通过租户方式做软件开通
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-28.png)
独立数据库模式:
- 独立数据库就是一个租户一个数据库,隔离级别最高
- 系统底层所涉及到的计算、存储、网络等资源的隔离
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-29.png)
优势:
- 满足强隔离的要求
- 计费的逻辑简单
- 降低故障的影响面
- 为不同租户提供独立数据库,有助于简化数据模型的扩展设计,满足个性化需求
- 如果遇到故障时,数据恢复简单
劣势:
- 规模化问题:因为每个租户环境是独立的,租户量(成千上万)大对我们的管理和运营是非常大的挑战
- 成本问题:因为每个租户环境独立,所以我们花费在单个客户上面的成本也就非常高
- 敏捷迭代问题:独立部署独立数据库模式会让我们更新管理和支撑前端的需求变得非常复杂和低效
- 系统管理与监控复杂
共享数据库但隔离数据架构:
- 多个租户或所有用户共享数据库,但每一个租户提供一个Schema(表空间 )的方式
- 即多租户共享一套基础设施资源,这样能让Saas软件服务更加高效、敏捷、低成本
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-30-1024x450.png)
优势:
- 一定程度的逻辑数据隔离,可满足较高程度的安全性保障,高效管理
- 每个数据库,可支持更多租户数量,成本低
劣势:
- 租户之间可能会相互影响,举例:某一个租户某一个时间点业务量很高,占用了大量的这种机器的资源,那么其他租户的使用体验,可能会受到相应的影响。可采用的技术手段:限流降级或者服务器隔离,让我们的影响面尽量可控
- 租户计费困难,共享模式下,需要投入更多的精力去计算单个租户的费用
- 恢复数据较困难,因为牵扯到其他租户数据
- 跨租户统计数据,应用实现难度大,耗费成本高
共享数据库共享数据架构:
- 所有的租户共享同一个数据库、同一个Schema,但是租户之间的数据隔离通过在数据表中添加TenantID属性进行实现
- 所有租户共享一套资源,而专用域是使用竖井模型,每个租户都有独立的资源环境
优势:
- 每个数据库可支持租户数量多,维护和购置成本低
劣势:
- 隔离级别低,数据安全性低,在应用开发时需做大量安全开发工作,提高研发成本
- 需要逐表逐条备份和还原数据,数据备份和恢复困难
多租户隔离方案如何选型
我们从资源共享、数据隔离、应用复杂性、应用成本四个方面进行对比总结
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-31.png)
多租户系统的模型架构
![](https://ichistudio.cn/wp-content/uploads/2023/12/图片-32-1024x309.png)