Raft实现报告(九)

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

Raft实现报告(九)

读者需要知道先前介绍的日志复制机制

从该机制我们知道,一旦一个日志条目存储在了大多数服务器上,leader就知道当前任期的条目已经提交了。如果leader在提交一条日志条目之前宕机了,未来的leader会企图完成该日志条目的复制工作,但是,一个ledaer没办法立刻知道先前时刻的条目是否已经提交了,即便日志条目已经存在大多数服务器上。对好对照Raft实现报告(八)的那张图去看。

为了减少这种问题的出现,Raft永远不会通过计算副本来提交先前任期的日志条目,只有来自leader当前的任期的条目会通过计算副本来提交,当来自当前term的日志条目被以这种方式提交了之后,由于Log Matching 特性,所有先前的条目会被间接的一起提交了,这一点在之前的报告里,也提到过。

在某些情况下,leader可以安全的断定旧的日志条目已经提交了(例如,该条目已经存储在每台服务器上了),但是Raft为了简单,采用了更加保守的方法。

Raft之所以在提交的时候产生了这种额外的复杂性,是因为leader从之前的term中复制条目的时候,日志条目会保留其原始term的期号。在其他共识算法中,如果一个新的leader从先前任期复制日志,该行为必须带上它当前任期的期号,并不像raft这样日志会保留原始期号。Raft的方法让推理分析日志条目变得更加容易,因为即便是任期变化了,随着时间推移,日志仍然保持原来的任期编号,此外,与其他的算法相比,raft中新的leader发送的前任期日志条目更少。(其他的算法必须发送冗余的日志条目然后重新编号,才能提交)


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