服务器如何与 RAFT 中的客户端通信?

已感染

根据 RAFT 论文,它提到除了领导服务器之外,每个服务器都有自己的日志条目和状态机,并且每个状态机都处理来自日志的相同命令序列。

我对这种情况几乎没有疑问。

[1] 如果 1 个客户端向领导服务器发出一些请求,这意味着所有跟随服务器都会处理请求并产生输出吗?但是谁将输出与客户端通信呢?

[2] 如果第一个问题的答案只是领导者将输出传达回客户端,那么多个追随者在他们的状态机中从日志条目计算/处理相同的输入有什么用。因为众所周知,RAFT 确保所有日志条目必须以相同的顺序包含相同的命令。仅领导者在其状态机中处理日志中的条目并将其返回给客户端是否就足够了?

[3] 另外,如果有多个客户端向服务器发出相同的请求,是只有领导者将输出传达给所有客户端还是跟随者出现在这里?

九条
  1. 你第一个问题的答案确实是leader的状态机输出返回给客户端。

  2. 从技术上讲,使用基本的 Raft 协议,追随者没有理由必须立即将条目应用到他们的状态机。事实上,追随者通常甚至在领导者已经对客户做出回应之后才知道条目的承诺。追随者将命令应用于他们的状态机的主要原因只是为了跟上领导者。如果领导者崩溃,追随者将被选为领导者,并需要接管为客户请求提供服务。一旦选择,新的领导者将必须在它开始维修客户端请求之前将所有未申请的命令应用于状态机。在追随者提交时对其应用命令可以降低领导者更改的成本,并且在追随者上应用命令的成本无论如何都很低,因为他们不服务客户端请求。

  3. 对追随者应用命令还有另一个原因,你的第三个问题接近于揭示它。只有领导者才会响应客户端的写入请求,但追随者可以以宽松的一致性保证(顺序一致性)响应读取请求。为此,领导者返回已完成命令的写入索引以及输出。然后客户端可以查询一个跟随者,一旦跟随者的状态机至少达到客户端最后一次写入的索引(由客户端提供),跟随者就可以查询状态机并返回输出。这允许客户端在领导者和追随者之间传播查询,这可能是实用系统确保追随者的状态机试图跟上领导者状态的最佳原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中从客户端到服务器的通信

来自分类Dev

Wayland客户端如何与服务器通信?

来自分类Dev

如何在 nats 流媒体服务器中限制 raft.log 大小?

来自分类Dev

如何在PHP中作为客户端与CGI服务器进行通信?

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

蓝牙客户端-服务器通信[java]

来自分类Dev

Swoole WebSocket服务器-客户端之间的通信

来自分类Dev

服务器与客户端之间的通信失败

来自分类Dev

Spring Boot SSL客户端-服务器通信

来自分类Dev

客户端服务器无法通信

来自分类Dev

客户端-服务器Websocket通信

来自分类Dev

服务器和客户端之间的实时通信

来自分类Dev

服务器到客户端的通信方法

来自分类Dev

客户端与服务器之间的通信

来自分类Dev

OMNET ++无线通信客户端-服务器

来自分类Dev

Tornado TCP服务器/客户端进程通信

来自分类Dev

Python 服务器和客户端无法通信

来自分类Dev

服务器和客户端之间的持续通信

来自分类Dev

HornetQ服务器(EAP 6)可以与EAP 5中的JMS客户端通信吗?

来自分类Dev

DJANGO中的REST / JSON通信...在客户端(Linux)和服务器(Django)之间

来自分类Dev

Go中客户端和服务器之间的通信

来自分类Dev

在Google Apps脚本中从服务器到客户端进行通信

来自分类Dev

JavaScript和PHP中的双向服务器/客户端通信

来自分类Dev

JavaScript和PHP中的双向服务器/客户端通信

来自分类Dev

Android for Accounting App中的客户端服务器通信

来自分类Dev

客户端-服务器套接字通信TCP / IP中的对象问题

来自分类Dev

Java中的WebSocket编程:客户端服务器通信问题

来自分类Dev

Java中客户端服务器通信的最佳方法

来自分类Dev

prod中客户端和nodejs服务器错误之间的通信

Related 相关文章

热门标签

归档