客户端协议

文章讨论了Raft算法中如何通过领导者角色处理客户端请求,避免请求重复执行的问题,关键在于使用唯一ID保证命令的线性一致性。当领导者宕机时,通过检查日志避免执行已处理过的请求。

Raft算法要求由领导者处理客户端请求,如果客户端不知道领导者是谁,那么它会和任意一台服务器通信;如果通信的节点不是领导者,那么它会告诉领导者是谁。
领导者将命令写入本地并复制、提交到状态机之后,才做出相应。
如果领导者收到请求后宕机,则会导致请求超时,客户端会重新发出请求到其他服务器上,最终定位到新的领导者,用新的领导者处理请求,直到命令被执行。

这里有一个问题和multi-paxos类似,就是有一个命令可能被执行两次——领导者可能在执行命令之后在响应客户端之前宕机,该命令已经执行成功,只是回复客户端的过程中宕机,客户端没有收到命令执行的回复,会寻址下一个领导者处理请求,同一个命令会被执行两次,这是不可接受的。
解决办法是让客户端发送给领导者每个请求都附加上一个唯一id,领导者将唯一id写到日志记录中。在领导者接受请求之前,先检查其日志中是否已经具有该请求的id。如果请求id已在日志中,说明这是重复的请求,此时忽略新的命令,直接返回已执行的命令的响应。
每个命令只执行一次,这是实现线性一致性的关键因素。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值