快速理解Raft之日志复制(肝了两千五百字)

本文介绍了Raft一致性算法中的日志复制过程及日志冲突的解决方法。包括日志复制背景、committed状态定义、日志特性、日志冲突场景及解决策略等内容。

一、日志复制背景

当raft集群选出领导者的时候,集群就开始提供服务了。这个时候,会有客户端向raft集群发出请求。请求里面会包含一个可以被raft状态机执行的命令。leader会把这个命令作为一个entry(理解成raft中的一小段日记就可以)首先添加到自己的日志中,然后并发的向followeri节点发送请求,让他们复制这一小段日志。当日志安全复制成功后,leader将这段日志applied到自己的状态及,然后把命令的执行结果返回给客户端。如果在日志的复制过程中,有节点因为网络原因或者什么七七八八的原因,导致日志没有复制成功。leader会一直给这个节点发送append请求,直到复制成功。

下面这张图就描述了raft集群中日志的组成结构。每一个小方框就是entry,小方框里面的数字就是entry创建时对应的任期。每一个小方框自己对应的位置就是logIndex。

leader会对收到的entry进行判断,判断什么时候是安全的,是可以把这个entry应用到状态机上。可以被应用到状态机上的entry被称为committed。raft算法保证提交的entry都是持久化存储的,并且保证所有可用的状态机都会执行这个entry。

二、什么是entry的committed状态

        entry的committed的状态是由entry在raft集群中有多少个副本而决定的。如果该entry有多数副本,则判断这个entry是committed状态。从figure6中可以看到index为5、6、7的entry都是committed的,因为这几个entry在raft集群中都有三个副本以上,占大多数。也就是说如果index为7的entry是committed状态的,那么index在7前面的entry都是committed状态,即便这个entry是其他leade

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锤爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值