利用braft快速搭建高性能分布式系统
如果无法正常显示,请先停止浏览器的去广告插件。
1. 使用braft快速构建分布式系统
王耀
百度云
2.
3.
4. 王耀
主任架构师
• 百度云IaaS技术负责人
• braft开源项目负责人
• 分布式存储系统
• 公有云网络虚拟化
5. • 分布式系统与Raft简介
• braft原理与实现
• braft在百度云的实践
• 基于Raft的存储模型
• 百度云CDS系统设计
6. 分布式系统
•
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像
是单个相关系统。
---《分布式系统原理和范型》
• 分布式存储系统
• 分布式计算系统
7. 分布式系统需求
• Scalability
• Performance
• Availability
• Partition
• Replicate
8. 分布式共识
• Paxos
• Zab
• Viewstamped Replication
• Raft
9. Raft复制状态机
• Leader Election
• Log Replication
• Log Compaction
• Membership Change
10. Raft复制结构
• 树形结构
• 多数复制
• 写时修复
• 断点续传
11. Raft节点状态机
捣乱的Candidate
•
• •
•
网络划分
节点负载高
指定节点为Leader
12. • 分布式系统与Raft简介
• braft原理与实现
• braft在百度云的实践
• 基于raft的存储模型
• 百度云CDS系统设计
13. 分布式系统脚手架
•
通信框架
•
•
brpc
一致性框架
•
braft
StateMachine StateMachine StateMachine
braft braft braft
brpc brpc brpc
14. brpc简介
• 丰富的协议支持
• 更好的延时和吞吐
-
-
-
•
便捷的builtin调试服务
-
-
•
组合Channel支持复杂访问模式
-
-
-
•
定制协议、名字服务和负载均衡
15. braft简介
• 功能完备
• 高性能
• PreVote • Append Log Batch
• Leader Transfer • Replicate Batch and Pipeline
• 高灵活性
• 自定义Storage
• 两阶段InstallSnapshot
• Cache Last LogEntries
• Apply Async and Batch
16. braft协议状态机改进
17. braft接口
int init(const NodeOptions& options);
•
Node
void apply(const Task& task);
void add_peer(const PeerId& peer, Closure* done);
void remove_peer(const PeerId& peer, Closure* done);
void change_peers(const Configuration& new_peers, Closure* done);
void on_apply(::raft::Iterator& iter);
•
StateMachine
void on_snapshot_save(SnapshotWriter* writer,
done);
Closure*
int on_snapshot_load(SnapshotReader* reader);
void on_leader_start(int64_t term);
void on_leader_stop(const butil::Status& status);
void on_error(const Error& e);
18. braft实现snapshot
• 加锁拷贝数据,再异步持久化数据
• 存储引擎支持MVCC,引擎snapshot之后异步持久化
• 离线线程合并上一次的snapshot及之后log,生成新的snapshot
• fork子进程,在子进程中遍历状态数据并持久化
• 选从节点进行snapshot,再切换主从
19. braft使用tips
• on_apply保证主从执行结果一致
• on_snapshot_load要先清空状态机
• on_leader_stop保证leader相关任务cancel
• apply task间调用的结果都是独立的
• apply task和configuration_change存在false negative
20. • 分布式系统与Raft简介
• braft原理与实现
• braft在百度云的实践
• 基于Raft的存储模型
• 百度云CDS系统设计
21. braft在百度云的应用
• 元信息管理
• 存储系统
• 容器系统Master • 强一致性MySQL
• 虚机系统Master • 分布式块存储CDS
• 流式计算系统Master • 分布式文件系统CFS
• 分布式NewSQL TafDB
22. 基于Raft的存储模型
23. CDS存储模型
• Volume拆Block
• Block聚BlockGroup
• BlockGroup braft复制
•
Block多版本引擎
1
2
1
1
#
1
24. CDS逻辑数据分布
两级分布
•
• Pool
• ReplicaGroup
25. CDS物理数据分布
五级隔离
•
• Region
• Zone
• Rack
• Node
• Disk
26. CDS中副本管理
Node
•
•
•
Master
•
定期汇报状态 • 维护Node和Replica间映射
定期GC垃圾Replica • 修复Node/Disk故障
• 定期Disk容量均衡
•
Replica数量
定期IO负载均衡
•
•
Leader数量
27. CDS架构
• Master
• BlockServer
• SnapshotWorker
• Executor
28. CDS Master
•
LogicalService
• LogicalMeta
• ReplicaMeta
•
RSMFramework
Volume SnapshotWorker
Service Service
JobMeta
CliService
Node Volume SnapshotWorker
Service Meta Meta
RGMeta
Scheduler
PoolMeta
NodeMeta
DiskMeta
Replicated State Machine
StateMachine
Node
braft
29. CDS存储引擎
3
Block分Slice
•
多版本Slice
•
• 异步Snapshot
•
1
异步Rollback
33
2
30.
31. CDS快照
3
1 .
1 .
1 .
1 .
.
1.
#
3
.
.
1
.
1 .
2.
.
.
3
32.
33.
34.
35. CDS回滚
3
2 /
2 /
./
2 /
3
2/
2
3
. #/
1
2 /
/ .
2
/
1
/
1
/
1