美文网首页
Raft实现报告(19)

Raft实现报告(19)

作者: 糖醋沼跃鱼 | 来源:发表于2022-03-29 14:36 被阅读0次

    Raft实现报告(19)

    客户端的交互

    本篇将会介绍客户端如何与Raft交互,包括客户端如何找到集群的leader,以及Raft如何支持线性化语义。这些问题适用于所有基于共识的系统,Raft的解决方案与其他系统类似。

    Raft的客户端将所有请求发送给leader。当客户端第一次启动时,他会连接到随机选择的服务器。如果客户端的首选不是leader,则该服务器将拒绝客户端的请求并提供有关它所听到的最新的leader的信息(AppendEntries请求包括leader的网络地址)。如果leader崩溃,客户端请求会超时;客户端然后使用随机选择的服务器重试。

    我们对Raft的目标是实现可线性化的语义。然而,到目前为止,Raft可以多次执行命令:例如,如果leader在提交日志条目后但在响应客户端之前崩溃,则客户端将使用新的leader重试命令,导致他被执行了多几秒的时间。解决方案是让客户为每一个命令分配唯一的序列号。然后,状态机跟踪为每个客户端处理的最新序列号以及相关响应。如果他收到一个序列号已经被执行过的命令,他会立即响应而不重新执行一次。

    相关文章

      网友评论

          本文标题:Raft实现报告(19)

          本文链接:https://www.haomeiwen.com/subject/ocmpjrtx.html