Raft实现报告(17)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Raft实现报告(17)

Raft实现报告(17)

紧接着日志压缩和快照

快照

尽管服务器通常独立拍摄快照,但是leader必须偶尔讲快照发送给落后的follower。当leader已经丢弃了他需要给follower发送的下一条日志条目的时候,就会发生这种情况。好的是,这种情况在正常操作中不太可能发生:跟上leader的follower已经有了这个条目。但是异常缓慢的follower或是加入集群的新服务器就不会。那么让这种新服务器追上leader的方法就是,让leader通过网络向他们发送快照。

新的RPC

leader将会使用InstallSnapshot的新RPC讲快照发送给太落后的follower。当follower收到RPC带来的快照时,他必须决定如何处理其现有的日志条目。通常,快照讲包含收件人日志中尚未包含的新信息。在这种情况下,follower会丢弃他的整个日志;它报不被快照所取代,并且有可能有未提交的条目与快照的冲突。相反,如果follower收到描述其日志前缀的快照(由于重新传输或错误),快照覆盖的日志条目将会被删除,但快照后面的条目仍然有效并且必须保留。

这种快照方法违背了Raft的强leader原则,因为follower可以在leader不知道的情况下拍摄快照。但这种偏离或者叫做异常是合理的。虽然拥有leader有助于避免在达成共识时出现了冲突的决策,但是在快照时已经达成共识,因此没有决策冲突。数据仍然只从leader流向follower,只是follower可以重新组织他们的数据。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 索引
Raft实现报告(五)
Raft实现报告(五)
|
安全
Raft实现报告(11)
Raft实现报告(11)
|
Linux
Raft实现报告(18)
Raft实现报告(18)
|
索引
Raft实现报告(八)
Raft实现报告(八)
|
存储 算法
Raft实现报告(七)
Raft实现报告(七)
|
开发工具 git
Raft实现报告(四)
Raft实现报告(四)
|
存储 安全 算法
Raft实现报告(一)
Raft实现报告(一)
|
安全 开发工具 git
Raft实现报告(二)
Raft实现报告(二)
|
存储 索引
Raft实现报告(15)
Raft实现报告(15)