【云驻共创】数据隔离方案-助力Saas应用开发
【摘要】 “文章通过对数据路由与数据隔离方案的探讨,为开发者学习数据库开发提供参考。”
Saas数据路由实现
1.什么时候需要数据路由
- 租户1,应用层和数据库独立,不涉及资源共享,天然隔离,预算充足,对稳定,隔离性,运维有很高要求时选用;
- 租户2,应用层独立,共享数据库,适用于计算密集型业务;
- 租户3、4,共享应用层、数据库,业务数据分布在相同实例的不同schema中,可容纳较多租户;
- 租户5、6,共享应用层,数据库,不同租户的业务数据存放在同一个schema中,使用租户标识隔离(行隔离);
- 租户7,共享应用层,数据库独立,对数据隔离有一定的要求,业务数据量比较大,对数据的运维要求比较高时适用,避免与其他租户相互影响。
共享应用层和数据库实例时,在处理业务逻辑过程中需要将租户的数据库相关操作指向目标库,为了避免数据污染等一系列问题,此时即需要进行路由。
2.数据路由需求来源
2.1 租户标识传递
- 路由依据,以租户标识来区分租户,以此作为依据对租户数据进行路由;
- 标识传递,需要传递标识的场景包含但不限于服务访问,服务之间相互调用,消息传递,缓存读写,持久化数据读写等等,可以使用header,请求内容,消息topic,消息内容,缓存key前缀等等来进行传递;
- 数据路由生命周期,从发起服务请求开始,租户标识需要向后传递,直到不再需要区分租户为止,比如请求结束。
2.2 路由承担角色
- 当不同的租户的业务数据隔离存放时,需要依赖一个可信的绑定规则来确定最终访问的数据;
- 绑定规则不统一管理时,绑定规则不可见,不易维护与追溯,甚至无法访问正确的数据,导致权限,数据污染等一系列问题;
- 绑定规则统一管理,可维护性强,可以结合业务进行扩展,回溯,并对资源进行管控。
设定超级管理员角色,对租户绑定信息以及相应数据资源池进行管理,在用户使用时通过数据路由进行统一入口访问。
2.3 多因素考虑
- 资源共享需求:同样资源规模下,资源共享程度越高,支持的租户规模越大;
- TCO(总拥有成本):不同的租户预算不一,客户群体大小不一,降低成本是问题关键,资源共享程度越高,TCO越低;
- 数据安全需求:资源共享程度越高,为保证数据隔离所做的工作量越大;
- 持续稳定需求:共享程度越高,租户之间相互影响越大,运维越复杂。
3.路由插件分享特点
3.1 配置式
- 数据源组列表,一组可包含一主多从;
- 租户与数据源组绑定关系;
- 租户与schema绑定关系。
3.2 松散配置
- 多个租户可以绑定同一个数据源组,可细化绑定关系到schema;
- 绑定关系与数据源组配置的修改不相互影响。
3.3 动态数据库
- 支持数据源新增,变更,关闭,如新增租户,租户过期等等;
- 支持变更绑定关系,如配置升降级,迁移等等。
3.4 精细化配置
- 连接池配置可以细化到数据源组内单数据库实例。
3.5 可拓展性
- 租户与数据源绑定关系除配置方式外,可扩展绑定策略;
- 租户与schema绑定关系除配置方式外,可扩展绑定策略;
- 可为不同数据库实例配置不同类型连接池,可以扩展自定义连接池;
- 读库负载均衡策略可扩展。
3.6 插件设计-租户标识传递
- 过滤器,在当前线程中初始化HystrixRequestVariableDefault,并存入从header中获取租户的标识;
- 可以加入需要在本次会话中传递的其他信息,如当前登录用户信息,语言环境等;
- 在父线程中执行初始化,子线程中同样可以读取到父线程中设置的内容,需要在会话结束时手动清理,避免线程复用导致的问题。
4.数据隔离
4.1 Schema隔离
- 数据表方面,Schema方式隔离的数据表内容和单体应用没有差别,以Schema不同的命名来区分租户的数据库,单个库拆分的Schema数量由自身数据量、访问量和集群规模自行拟定;
- Schema隔离可以认为是在数据源隔离的基础之上继续细分,不同的租户可能分割在不同库的不同Schema中,也可能在同一个库的不同Schema中Schema隔离;
- 在处理Schema隔离时,需要具备数据源隔离的能力,需要在库隔离的基础上增加选Schema的能力。
4.2 行隔离
- 多个租户的业务数据放在同一个Schema中的同一个业务表中,在每个表加上“租户id”字段用于数据隔离,绑定数据与租户的对应关系。
相关技术链接:
本文参与华为云社区【内容共创】活动第20期。
https://bbs.huaweicloud.cn/blogs/374925
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)