Raft实现报告(19)

简介: Raft实现报告(19)

Raft实现报告(19)

客户端的交互

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

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

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


相关文章
|
存储 安全
Raft实现报告(14)
Raft实现报告(14)
|
安全 开发工具 git
Raft实现报告(二)
Raft实现报告(二)
104 0
|
开发工具 git
Raft实现报告(四)
Raft实现报告(四)
|
存储 算法
Raft实现报告(七)
Raft实现报告(七)
|
存储 算法
Raft实现报告(六)
Raft实现报告(六)
|
存储 安全 算法
Raft实现报告(一)
Raft实现报告(一)
105 0
|
存储 索引
Raft实现报告(15)
Raft实现报告(15)
|
存储 索引
Raft实现报告(16)
Raft实现报告(16)
|
安全
Raft实现报告(11)
Raft实现报告(11)
|
算法 安全
Raft实现报告(13)
Raft实现报告(13)