- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
京东CDS原理与实践.pptx
分库分表理论
CDS实践
如何接入CDS
目录
分库分表理论
分库分表
为什么
有什么难点
怎么分
如何
解决
分库分表理论
为什么要分库分表?
业务数据量剧增
访问并发量剧增
业务系统可用性需求
如何选择拆分策略?
垂直拆分
水平拆分
两者结合
分库分表理论
分库分表理论
分库分表理论
分库分表带来了哪些难题?
分布式事务
复杂SQL查询
跨库跨表Join
数据运维
CDS系统架构
CDS驱动架构
Application
Application
MySQL
Oracle
SQL Server
SQL查询流程
Sql和参数
Sql解析
tables
columns
where clase
max/min/count/sum/avg
limit
group by
order by
规则计算
分表定位
Sql重写
执行sql
返回结果集
合并结果集
查询或更新结果
CDS集群结构
…
全局表A
孤立表C
切分表B
全局表A
全局表A
全局表A
孤立表C
切分表B_01
切分表B_02
切分表B_10
全局组
分库1
分库2
分库10
全局表:每个工作组都存在相同的数据备份(比如.城市、类别)
切分表:插入数据时根据切分键插入到不同分表(比如.业务流水表)
孤立表:可以存放在任意工作组包含数据表(比如.配置表)
CDS集群
CDS水平拆分
单库
多级路由
水平拆分
级联路由策略
SP2=XSP3
X值Hash路由
Range路由策略 + Hash路由策略
CDS基本特性
分库分表
分区规则支持:Hash, Range, List,自定义(groovy)
支持oracle、mysql、sql server数据库
支持复合切分键
支持级联切分键
支持DDL变更
支持Sum/Max/Min/Count/Avg聚合函数
不支持:复杂子查询、更新切分键字段
非分库分表
支持存储过程
支持大部分DML、DDL
CDS特性--读写分离
负载均衡
权重设置
故障恢复
复制
复制
复制
复制
CDS特性—Failover
适用于流水型业务表,记录变更与查询不依赖之前的信息
主库故障由生产DBA手动触发推送事件,将新请求指向failover库,主库恢复后需要手动做数据回迁操作
备
APP
CDS
复制
复制
CDS特性--Sequence
全局Sequence
全局唯一
不保证全局有序
单点问题
分表Sequence
解决单点问题
与分表一一对应
唯一性由业务保证
数据管道
业务库
BinLogs
业务数据
数据管道服务
分布式事务
分布式系统事务处理的三种方式:
分布式事务
基于Best Efforts 1PC模式的事务
事务补偿机制
小结:
分布式事务,最严格的事务实现,性能是个大问题;
Best Efforts 1PC模式,性能与事务可靠性的平衡,支持系统水平伸缩,大多数情况下是最合适的选择;
事务补偿机制,最终一致,牺牲实时一致性,获得最大的性能回报。
CDS事务补偿
基于BASE模型,通过解析Mysql的binlog来实现事务补偿,对用户完全透明,不一致时间窗口控制在秒级;
最终状态为事务失败状态,业务能感知事务失败异常;
CDS事务补偿
问题:
补偿哪个binlog事务?
怎么建立mit()和mit()的联系
mit()
mit()
CDS事务补偿
CDS事务补偿
try{
connection1.insert、update、delete...
connection2.insert、update、delete...
... ...
try{
insert cluster_xa_1
insert cluster_xa_2
mit();
mit();
}
catch(Exception e){
notifyTxServer(); //通知事务服务
…..
}
}catch(Exception e){
connection1.rollback();
connection2.rollback();
}
CDS Driver向每个分库cluster_xa表插入一条相同记录,业务服务完全透明
CDS事务补偿
xa_uuid
xa_dbunits
cur_dbunit
timestamp
xxx
db1,db2
db1
xxx
… …
… …
… …
… …
Cluster_XA表
xa_uuid:每个外围事务分配一个uuid,唯一标识分布式事务
xa_dbunits:外围事务涉及到的数据库单元
cur_dbunit: 当前分库标识;
timestamp:时间戳,用于计算超时时间
CDS事务补偿--时序图
CDS事务补偿
?
进程自己宕机了,
而无法向TxServer发出事务补偿通知…
解决了DB2宕机事务补偿
文档评论(0)