分布式一致算法 | 青训营笔记

100 阅读2分钟

分布式一致算法:Delta Lake, Hudi 与Iceberg | 青训营笔记

这是我参与「第四届青训营」笔记创作活动的的第4天。

Raft 共识算法

image.png Chobby:谷歌内部的zookeeper

Raft 算法

image.png

复制状态机

image.png

用户的状态机:可能是用户内存的B+树 状态机volatile:状态机挂了之后可能会清零,这时候raft会对一条条log进行恢复,恢复到raft认为正确的commit index

Raft 角色

image.png

Raft 日志复制

image.png

Raft 从节点失效,如何处理?

image.png

s3 确认的时候,会迭代地协商回退:

s2 : K前面是Q

s3:不行

s2:Q前面是T

s3:不行

s2:T前是X

s3:OK,我全补全了我缺失的log了

Raft Term

image.png

Raft 主节点失效:跨Term操作(新的leader会有新的term)

image.png

image.png

Raft Leader failure 例子

image.png

数字大的term永远是更加新的,约到新的term就会同意

冲突的log:因为raft强leader base,冲突之后leader会继续给后面的log,直到有一个match之后,会覆盖冲突的log

Raft 安全性-Raft为什么安全

同 term

image.png

至多只有一条log的原因:因为一个term只有一个leader

跨term

image.png

leader 永远有上一个term的commit log

Raft 安全性验证

image.png

会把整个运行过程抽象成状态集合,对所有状态进行穷举,从而验证了正确性

使用 Raft 算法重新打造KV数据库

image.png

方案选择

image.png

方案一基本没人使用,因为读log都写入磁盘

问题:

Raft 不保证一直有一个leader

image.png

读操作不能直接读,因为KV3挂掉之后不能和kv1和 kv2 通信

解决方法

image.png

操作跨Raft组

情况:qps特别高,leader忙不过来,或kv量溢出

image.png

只用一致性已经不够描述这种情况,会涉及事务

回到共识算法

image.png

snapshot:从0开始到这条snapshot的log都可以替换掉 configuration chage:一个时间可能选出多个leader

Raft 一定正确吗?

image.png

实践中的leader有可能会被candidate打扰,实际情况是很复杂的

共识算法的未来

  • 高性能
  • 多节点提交
  • Raft Paxos 相互移植
  • 共识算法作为一个系统