利用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