【云驻共创】数据隔离方案-助力Saas应用开发

举报
是羽十八ya 发表于 2022/09/25 19:02:47 2022/09/25
【摘要】 “文章通过对数据路由与数据隔离方案的探讨,为开发者学习数据库开发提供参考。”

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.com/blogs/374925

任务3:DTSE Tech Talk 技术直播 NO.3:数据隔离方案探讨,让SaaS应用开发更轻松

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。