分布式数据库的全链路高可用解决方案
如果无法正常显示,请先停止浏览器的去广告插件。
1. OceanBase 分布式数据库的高可
用和稳定性之挑战
蔡⻜志 (花名:谷渐)
OceanBase 开源内核技术负责人
2022.07
2.
3. 海量业务十年磨练,厚积薄发
• 自主研发,完整知识产权、核心能力100%掌控 • 原生分布式关系数据库,商用兼容,平滑迁移
• 企业级能力,支撑蚂蚁核心业务100%负载,外部开始规模商用 • 完整工具配套、服务支撑体系
2010
2013
支持集团
产品立项
第一个用户
支持SQL
2016
支付宝账务
核心账务
核心交易支付
2019
2017
打破世界纪录
多家金融客户
互联网核心系统
Oracle 兼容
公有云服务
2020
独立商业化
HTAP 引擎
TPC-C 7.07亿
2021
生态大拓展
开源开放
TPC-H 30T 1526万
TPC-C 6100万
金融核心业务
分布式 NoSQL 存储
SQL引擎,三副本高可用
分布式事务,强一致
透明扩展,多地多活,全分布式
4. TPCC数字的背后
可拓展
高可用
标准文档132⻚,审计流程12⻚,有资格的审计员全部参加
数据库需要能够以最终报告tpmC值在稳定状态无任何人工干预前提下保持运行8小时以上,
每隔半小时需要完成一次checkpoint
最严苛的测试场景:在使用超出标准要求的全量6000W tpmC压力下,
强行销毁了一个云服务器节点,
整体tpmC在两分钟内恢复到6000w并持续跑到测试时间结束
针对OceanBase架构专设的D测试:连续杀掉了两台服务器节点,
首先杀掉一个数据节点,等待tpmC恢复且稳定5分钟后,
再次杀掉了rootserver leader节点,tpmC仍然快速恢复
5. 高可用架构
一主多从
共享存储
Group( Paxos || Raft)
6. 多副本只是高可用冰山一⻆
多副本只是架构师或
DBA 最关注的高可用使
用方式
离全链路高可用还有非常⻓
的距离
7. 高可用 – 全链路上每一处精细活
全链路高可用面临的挑战
非通断性故障影响业务的可用性?
软件升级造成业务一定时间内不可用?
SQL占多过多资源,导致业务其他的请求时间变⻓?
硬件问题或者程序问题,导致业务的数据错误?
业务看到的高可用,才是真正的高可用
8. OceanBase架构方案
Writes
Weak Reads
Reads
OBProxy
OBServer OBServer OBServer
SQL SQL SQL
P1 P2 P1 P2 P1 P2
RS P4 RS P4 RS P4
OBServer OBServer OBServer
SQL SQL SQL
P5 P6 P5 P6 P5 P6
P7 P8 P7 P8 P7 P8
ZONE_1
ZONE_2
Paxos Group
ZONE_3
对等服务端节点
• 无共享架构
• 每个节点有SQL、存储、事务引擎
• 按分区做数据分片扩展
• 多Zone多活高可用
轻量客户端
• 无状态
• 资源占用少
9. OceanBase数据链路
Partition leader路由
给用户返回结果
Writes
OBProxy
访问P1 leader
返回结果,并返回partition hit
OBServer1 OBServer2 OBServer3 客户端location cache有效,
SQL SQL SQL 可以通过本地执行直接返回结果
P1 P2 P1 P2 P1 P2
RS P4 RS P4 RS P4
10. OceanBase数据链路
Partition leader切换,客户端还未更新location
给用户返回结果,并异步更新location
Writes
OBProxy
访问P1旧主
返回结果,并返回partition miss
OBServer1 OBServer2 OBServer3 客户端location cache失效,
SQL SQL SQL 可以通过远程执行及时返回结果
P1 P2
RS P4
返回结果
远程执行
P1 P2 P1 P2
RS P4 RS P4
11. OceanBase数据链路
Session信息同步
1.
2.
3.
4.
5.
6.
Create connection
Use database d1;
Insert into t1 values(…);
Insert into t2 values(…);
Insert into t2 values(…);
Insert into t1 values(…);
OBProxy
1.
2.
3.
6.
Create connection
Use database d1;
Insert into t1;
Insert into t1;
4.1 create connection
4.2 use database d1;
4.3 insert into t2;
5. Insert into t2;
OBServer1 OBServer2 OBServer2
SQL SQL SQL
P1 P2 P1 P2 P1 P2
RS P4 RS P4 RS P4
服务端有session信息变更时,会在返回结果时
“顺带”把信息同步到ObProxy
ObProxy保持一个用户链接,
可能访问多个链接,并且在链接之间维持session信息,
包括系统变量、用户变量、当前数据库等;
ObProxy发生连接切换时,用户层面无感知
12. OceanBase数据链路
读请求路由
LDC • 同机房
• 同城
server状态 • 合并
• 升级中
• 下线中
Weak read
OBProxy
访问follower
OBServer1 OBServer2 OBServer3
SQL SQL SQL
P1
RS
P2
P4
P1
RS
P2
P4
P1
RS
P2
P4
zone状态 • 只读zone
• 下线中
server黑名
单 • 活不可用
• 死不可用
读zone优先、只限读zone、非合并优先等规则供业务按照自身特点配置
13. OceanBase数据链路
Stop server/zone
非通断性故障:
IO 耗时变⻓
网络延迟变⻓
Weak read
OBProxy
访问leader
访问follower
OBServer1 OBServer2
SQL SQL
OBServer3(stopping)
SQL
P1 P2 P1 P2 P1 P2
RS P4 RS P4 RS P4
Stop server/zone:
1. 将leader全部切走;
2. 将server/zone状态修
改成stopping;
14. OceanBase数据链路
upgrade server/zone
和stop server类似
Weak read
OBProxy
访问leader
访问follower
OBServer1 OBServer2
SQL SQL
OBServer3
(upgrading)
SQL
P1 P2 P1 P2 P1 P2
RS P4 RS P4 RS P4
upgrade server/zone:
1. 将leader全部切走;
2. 将server/zone状态修
改成upgrading;
最佳实践:
1. 先升一台server;
2. 再升一个zone;
3. 依次升级其他zone;
15. OceanBase数据链路
ObProxy升级
和ObServer版本解耦
• 标准的Mysql协议通信
• 标准的虚拟表来交互;
• Capacity flag;
• 路由回退;
优化ObProxy的资源占用
• zero copy;
• 全异步模型;
• Simple Parser;
ObProxy和ObServer
的升级计划互相不依赖
部署在业务的机器上,
和业务APP一起升级
ObProxy稳态运行
内存在50M以内
单线程QPS在5W以上
16. 系统保证了能快速容灾恢复
意味着业务高可用了吗?
17. SQL延迟变高
系统资源(CPU、网络、磁盘等)被挤占
同样对业务影响比较大
18. OceanBase-SQL调优
User or DB
Application
SQL statement
SQL的流程比较多
通常对结果影响比较大的是
计划的选择
SQL Compiler
Parser
SQL
Execution
Fast Parser
Parse Tree
Resolver
Stmt
Query
Transformer
Xformed Stmt
命中
Plan Cache
C1 C2
未命中
Optimizer
n
schema
Cost Estimator
Logical Plan
Add to cache
Physical Plan
Code Generator
storage
19. OceanBase-SQL调优
快速参数化
20. OceanBase-SQL调优
Plan cache
PCV
PCV PCV PCV …
PS PS PS …
ACS
PCV_v1
PCV_v2
PCV_v3
Outline(/*+index(t1
Idx1)*/
基于计划缓存实现:
SPM:计划演进
ACS:自适应计划匹配
Outline:计划绑定
21. OceanBase-SQL调优
outline
Outline本质是不需要业务修改代码,在服务端直接给业务SQL增加Hint
• 流量控制
• 设置选择的索引
• 控制查询并发
• 控制查询超时时间
22. OceanBase-SQL调优
资源管理
限制资源使用
面向资源组的隔离机制
• 事务超时 • 单独的“大查询队列”
• RPC 超时 • 租户内存资源单独预留
• 链接超时 • 租户独立线程池
• 查询超时
• 网络超时
• 限制运行时间超过一定阈值的查询的 CPU 使用
• 限制“大”查询执行并发度
• 租户线程绑定cpu
23. OceanBase-SQL调优
读写分离
24. 系统保证了能快速容灾恢复;
SQL也保证了响应时间可控;
意味着业务高可用了吗?
25. 血的教训:
当磁盘数据不可信时?
当网络数据不可信时?
当程序出现 bug ?
技术交流: 钉钉33254054
26. OceanBase的数据可靠性
• 读取最小单位是微块, 写最小单
位是宏块
• 读取时, 会校验 微块校验和
• 迁移/备份时, 会校验 宏块校验和
• 后台周期性巡检宏块校验和
27. OceanBase的数据可靠性
主表
索引
列1-0 列2-0 列3-0 列4-0 索引-0 RID-0
列1-1 列2-1 列3-1 列4-1 索引-1 RID-0
列1-2 列2-2 列3-2 列4-2 索引-2 RID-0
列1-3 列2-3 列3-3 列4-3 索引-3 RID-0
列1-4 列2-4 列3-4 列4-4 索引-4 RID-0
列校验和
列校验和
列校验和
列校验和
校验和
• SSTable 累计行校验和
• SSTable 列校验和
• 合并时:
•
索引列 列校验和和主表列的列校验和
进行比较
•
副本之间的行校验和 和 列校验和 进行比较
28. OceanBase的数据可靠性
一个神奇的函数 - right_to_die_or_duty_to_live
程序出现异常时,
当前线程保留现场,
其他线程继续提供服务
29. OceanBase的数据可靠性
误删数据?
MVCC多版本
支持数据闪回
30. OceanBase的数据可靠性
热备 冷备
• 主备库 • 物理备份
• 异步复制 • 逻辑备份
提供更高的可用性 提供更高的回退能力
31. OceanBase的数据可靠性
32. OceanBase的数据可靠性
可以恢复到特定的时间点
33. 小结
•
•
•
在数据链路层屏蔽容灾切换对于业务的影响
在SQL层,通过执行计划绑定、读写分离、资源隔离等
方式,降低SQL出问题的概率,减少对于业务的影响
在存储、系统等层次,通过程序自检、数据闪回、备份
恢复等方式,降低软件问题导致的业务不可用时间;
34. 一体化架构:原生分布式 + HTAP + 两种兼容模式
MySQL 兼容
Oracle 兼容
HTAP 引擎(TP+AP)
SQL 优化引擎
一套 HTAP 引擎同时支持 TP 和 AP 业务统
SQL 执行引擎
存储过程
单机分布式一体化架构
分布式存储
分布式事务
同城三机房
双机房主备
分布式调度
两地三中心
三地五中心
灵活的部署模式
专有云
独立部署
一SQL界面,共享数据
单机分布式一体化架构,兼具单机性能易用
基于 Paxos + 数据同步的灵活的容灾架构
单机房三副本
一套产品兼容主流的数据库,保证平滑迁移
公有云
性,以及分布式可扩展性,全局强一致性
支持最高级别容灾模式,也支持经典模式
灵活部署,无缝适配云化架构和经典架构
35. 开源开放
期望共建
36.
37. 感谢聆听, 欢迎加入社区
钉钉群
微信交流
https://github.com/oceanbase
https://open.oceanbase.com