分布式数据库CDS-原理与实践| MySlide - 专注PPT分享,追随 ...

王义林 - 分布式数据库CDS-原理与实践

CDS(Completed Database Sharding )是京东金融自主研发的高性能、高可靠分布式数据库。围绕高吞吐数据存取需求,CDS各项特性、产品的演进过程,具体解决的问题。以及在实施过程中的有益实践。

1. 分布式数据库CDS-原理与实践 嘉宾:王义林
2. 议题 • 数据分片概述 • CDS架构及关键特性 • 实践:平滑实施分库分表
3. 数据分片概述 l遇到容量瓶颈了? VS Scale Up Scale Out l 集中式 ü Scale Up ü 成本高 ü 扩展性差,到顶 ü 易管理 l 分布式 ü Scale Out ü 成本较低 ü 扩展性好 ü 较难管理
4. 数据分片概述 l垂直拆分先行! Product Config Order Product Config l 垂直拆分 ü 按功能模块拆分,分散数据 库压力; ü 结合服务化改造,强耦合的 系统拆分成多个弱耦合的服 务; ü 可以规避跨库表之间的join场 景; ü 单服务下,也避免了分布式 事务场景; Order
5. 数据分片概述 l读写分离 or 水平拆分 ? Product l 读写分离 ü 数据量在千万级别以内; ü 对数据一致性要求较弱,可接受数据延时 ü 访问量大,写少读多; Config Order l 不用拆分 ü 数据量小,访问量大,考虑缓存; l 水平拆分 ü 数据为流水性质,数据量剧增; ü 两组业务数据间依赖关系弱(流水之间) ü 访问量大,重要性高,影响可用率; l 水平拆分 + 读写分离 ?
6. 数据分片概述 l读写分离实施简单,但需要注意场景 不适用读写分离场景 适用读写分离场景 • 对数据有强一致性要求; • 流水数据,写多; • 依据当前状态做下一步 处理的场景; • 对数据能接受一定延时 • 主数据、配置数据查询 • 运营查询 Tips: ü 很多能做读写分离的场景也可以使用缓存
7. 数据分片概述 l分库分表实施步骤 ü第1步-必要性评估 ü第2步-配置表处理 ü第3步-拆分维度确定 ü第4步-分表、分库数量确定 ü第5步-事务处理 ü第6步-跨分片join处理 ü第7步-全局唯一id生成 ü第8步-聚合处理
8. 数据分片概述 l客户端中间件 or 服务端代理层 APP 中间件JAR APP Proxy DB1 DB2 … DBn DB1 DB2 DBn … l 客户端类型 l 服务端(代理)类型 ü 兼容多种数据库类型 ü 支持多种开发语言;应用透明; ü 拓扑结构简单,可用性好,集群间无耦合 ü 可用性稍差,集群间耦合 ü JAR包嵌入,对应用有细微影响 ü 针对特定数据库;
9. 议题 • 数据分片概述 • CDS架构及关键特性 • 实践:平滑实施分库分表
10. 简介 l基于京东金融业务特点、发展现状 简称 • Completed Database Sharding 功能 特点 • 数据分片、读写分离,海量数据存取; • 运维控制台;数据迁移、扩容平台; • 离线准实时查询、统计; • 兼容JDBC,接入成本低; • 支持MySQL/Oracle/SQL Server; • 形成数据分片运维体系的生态圈;
11. 版本演进 分库分表,读写分离,Failover。 运维监控,自定义路由,级联路由,重读双写,集群配置在线推送, 弱XA事务支持,作业平台,离线数据集中平台。 优化sql解析模块,宏定义语法,groovy路由算法,数据管道服务,分布式 事务服务。
12. 系统架构 业务应用进程 CDS Driver(JDBC) CDS集群 CDS Server CDS Console MyDB 作业平台 离线数据中心 数据管道服务
13. CDS中驱间动件架:构驱动架构 Console Service1 Service2 路由规则 读写分离 容灾模块 事件控制 SQL Parser 对 象 缓 存 SQL Rewriter ResultSet Statement 链接池 Native JDBC Driver MySQL Oracle SQL Server
14. 事件控制过程 应用进程1 Driver(JDBC) 业务应用进程2 Driver(JDBC) 业务应用进程n Driver(JDBC) SSeSrevrevervrerer Zookeeper Console
15. CDS集群元素 l 表类型 切分表 全局表 孤立表 l 切分键类型 级联切分键 复合切分键 查询切分键 l 高可用组类别 全局组 工作组 重读组
16. CDSC集DS群集结群构结构 全局组 全局表A 切分表B 孤立表C 分库1 全局表A 切分表B_01 分库2 全局表A 切分表B_02 孤立表C … 分库10 全局表A 切分表B_10 全局表:每个工作组都存在相同的数据备份(比如.城市、类别) 切分表:插入数据时根据切分键插入到不同分表(比如.业务流水表) 孤立表:可以存放在任意工作组包含数据表(比如.配置表)
17. CDS关键特性(一) l兼容JDBC标准 l支持MySQL/Oracle/SQL Server l内嵌高性能连接池组件 l读写分离 ü权重定义 ü故障读节点自动摘除及恢复 l水平拆分 üRange、Hash、List、支持自定义路由规则 ü全局id ü常见聚合函数 ü多级路由
18. CDS特性:兼容JDBC标准 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.wangyin.cds.driver.CdsDriver"/> <property name=“url” value= "jdbc:cds://127.0.0.1:8088/CardOrder " /> <property name="username" value="cardorder" /> <property name="password" value="xxxxx" /> <property name="connectionProperties"> <props> <prop key="dbpool.class">com.wangyin.commons.cp.WangyinCPDataSource</prop> <prop key="dbpool.minConnections">2</prop> <prop key="dbpool.maxConnections">50</prop> <prop key="wycds.sql">true</prop> <prop key="urlparam.allowMultiQueries">true</prop> </props> </property> </bean>
19. CDS关键特性(一) l兼容JDBC标准 l支持MySQL/Oracle/SQL Server l内嵌高性能连接池组件 l读写分离 ü权重定义 ü故障读节点自动摘除及恢复 l水平拆分 üRange、Hash、List、支持自定义路由规则 ü全局id ü常见聚合函数 ü多级路由
20. CDS关键特性(二) l图形化控制台 ü集群配置 ü管理及监控 ü事件控制 l工具集 üMyDB,统一查询路口,分库分表对开发人员透明; ü作业平台,内置存量数据迁移和增量数据同步作业; ü离线数据中心; ü数据管道服务 ; ü分布式事务服务;
21. 议题 • 数据分片概述 • CDS架构及关键特性 • 实践:平滑实施分库分表
22. 实践:平滑实施分库分表 l平滑实施分库分表 Ø 采用1+N方式; Ø 模拟MySQL主从切换方式;
23. 1+N : 介绍 l切分列值在时间维度是增序的,范围路由; l支持多级路由: 一级路由提供横向扩展的能力,二级路由扩展计算能力 1<=X<SP1 Sharding Point Current SP2<=X 水平切分 实施点 X值Hash路由 时间轴
24. 1+N:满足前提 l订单号前8位提供分区表分区键功能; l系统版本位提供一级路由功能,分库分表位提供二级路由功能; l分库分表位+8位sequence保证订单号全局唯一性,单库每天订单容 量1亿; l根据订单号进行水平切分 位 8位日期 置 例 20150101 数据版本 系统版本 3位业务标识 1位新应用标 位位位 示位 0 0 001 1 3位分库分表 位 055 8位 sequence 00000001 分区键 一级路由 二级路由 固定长度,每 天单库订单容 量1亿
25. 1+N:关键设计 l采用1+N方式 ü1: 当前单库保留; üN: 水平拆分为N个库; ü1+N:当前历史库中已有流水数据不迁移,新交C易D流S集水群路由到新增的N台库中。 拆分 当前库 当前库 … 新增库
26. 1+N:关键设计 l 当前库 ü 历史订单数据、孤立表数据 l 新增库 ü 新增订单数据、外部订单号和内部订单号的映射表 l 优点 ü 当前库无新正单数据进入,解决空间压力,过一段时间 后当前库可直接作为历史库 ü 新数据均匀进入新增库,历史数据不用迁移至新增库 ü 当前库和新增库均能提供读写服务,对应用功能无影 响
27. 1+N:两级路由 l主流水表第一级路由:系统版本位 ü避免一级路由引发正单和退款间分布式事务,正单退款订单需要在同一库 中; ü考虑不停机发布,一级路由需延时生效; ü新流水数据进入新库,当前库上无新正单记录写入; 日期条件 系统版本位 路由所在库 正单 老正单 -- 0 当前库 新正单 <某日期 0 当前库 >=某日期 1 新库 退款 老退款 -- 0 当前库 新退款 -- 取正单位0 当前库 -- 取正单位1 新库 注:某日期为晚于应用上线时间点的日期
28. 1+N:两级路由 l应用负责系统版本位生成逻辑: 是否正单 是 大于切 换日期 是:1 否 否:0 避免分布 式事务 取正单系统版本位
29. 1+N:两级路由 l中间件负责分表位生成逻辑: 避免分布 式事务 是否正单 是 否 取正单分表位 大于切换 日期 是 路由规则: PS:外部订单号Hash后取模 无需生成:000 结束
30. 1+N:两级路由 l流水主表两级路由过程 2014053100000000000000004883960 2016051701000010000000139144813 订单号查询 系统版本位1、0 历史数据 0 一级路由 分表位 1 二级路由:分表位 新数据 ·… 当前库 新增库
31. 1+N:不停机关键 l 不停机方案的关键在于解决升级过程新老版本应用并存时,延时生效时间点前完成所 有应用发布上线: ü增量映射数据的查询、写入 重查、双写 ü 新增流水数据入库的精确时间控制系统版本位值延时生效 ü 防止资损风险停退款服务
32. 1+N:步骤小结 l Step1. 全量映射数据迁移; l Step2. 开始应用发布上线,新老应用并行阶段; l Step3. 老应用没有变化,新应用对映射数据实现重查双写,新应用将流水数 据写入当前库 l Step4. 全部完成应用升级后做增量映射数据迁移,此时所有映射数据均在新 库存在 l Step5. 第一次推送切换时间点,流水数据一级路由的系统版本位置根据时间 自动切换到新增库; l Step6. 第二次推送新路由规则,实现去除新应用对当前库映射数据的查询和 写入,由重查双写改为单查单写;
33. 主从切换:概要 Ø 并不是所有切分列值都是在时间维度上增序的; Ø 省去双写过程,减少切换边界; Ø 通过Binlog解析, CDS集群模拟成老库的从库; Ø 切换过程就像mysql主从切换;
34. 主从切换:增量同步 老库 Binlog、CDC 老库 数据管道服务 数据同步 模拟从库 … CDS集群
35. 模拟从库:切换 业务应用进程 CDS-Driver(JDBC) 一级路由 老库 >切换时间 点 一级路由 CDS集…群 二级路由
36. 模拟从库:重读 重读 业务应用进程 CDS-Driv查er(JDBC) …
37. 模拟从库:在线控制 1、停止数据同步作业 2、关闭重读开关 3、水平切分完成 业务应用进程 CDS-Driver(JDBC) …
38. 主从切换:步骤小结 l Step1. 做1次全量数据迁移,迁移前记录binlog当前位置; l Step2.启动增量数据同步作业; l Step3. 应用灰度上线(数据源是CDS数据源,一级路由还是访问老库); l Step4. 等待增量数据同步作业,执行速度追上最新提交的事务; l Step5. 在CDS控制台中,推送切换时间(一个大于当前时间的时间点); l Step6. 切换时间生效后,一级路由转为访问分库分表集群,二级路由Hash分片; l Step7. 在CDS控制台中,关闭增量数据同步作业,推送关闭重读命令; l Step8. 完成水平分库分表上线。
39. 平滑拆分:小结 Ø 支持重读、双写机制; Ø 配置在线推送生效; Ø 多级路由功能支持; Ø 作业平台:存量数据迁移; Ø 数据管道服务支持;
40. 团队介绍 Ø分布式数据库各部件基本功能完成; Ø正在研发数据管道平台3.0; Ø人手比较紧张……
41. 谢 谢!


https://myslide.cn/slides/3874?vertical=1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值