在筏子上,领导者
- 收据请求,
- 转义日志条目,
- 发送 RPC,
- 应用于状态机
- 最后回应客户。
这个过程需要一些时间,那么,如何处理下一个请求?拒绝它们?
Raft 的要点是所有仍在工作的参与者都同意系统的状态是什么(或者至少他们应该在有时间找出总共识是什么时做)。这意味着他们都同意接收到的消息以及接收顺序。这也意味着他们在计算接收这些消息的后果时必须得到相同的答案。所以消息必须按顺序处理,或者如果并行处理,参与者必须使用事务和锁定等,这样的效果就好像消息是按顺序处理的一样。在负载下,响应可能会延迟,或者其他类型的背压用于让发件人放慢速度,但你不能因为太忙而丢弃消息,
大多数 raft 实现都使用流水线,您可以在从主机到从机的飞行中进行多个日志条目。但是,只有在 master 收到来自 quorum slave 的 ACK 响应后,master 才会成功响应客户端写入请求,其中日志偏移量等于或大于此客户端请求写入的日志偏移量。