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