【问题标题】:Does raft leader deal with client requests synchronously or asynchronously?raft leader 是同步处理还是异步处理客户端请求?
【发布时间】:2018-05-31 09:23:08
【问题描述】:

在筏子上,领导者

  • 接收请求,
  • 转义日志条目,
  • 发送 RPC,
  • 应用于状态机
  • 最后响应客户端。

这个过程需要一些时间,那么,如何处理下一个请求?拒绝它们?

【问题讨论】:

    标签: algorithm raft leader


    【解决方案1】:

    Raft 的要点是所有仍在工作的参与者都同意系统的状态是什么(或者至少他们应该在有时间找出总共识是什么时做)。这意味着他们都同意已收到哪些消息以及以什么顺序。这也意味着当他们计算收到这些消息的后果时,他们都必须得到相同的答案。所以消息必须按顺序处理,或者如果并行处理,参与者必须使用事务和锁定等,这样的效果就好像消息是按顺序处理的一样。在负载下,响应可能会延迟,或者使用其他类型的背压来让发件人放慢速度,但是你不能因为太忙而丢弃消息,除非你这样做的方式可以确保所有参与者对此做出相同的决定。

    【讨论】:

    • 我认为可以将“丢弃消息”视为丢包的情况。 Raft 可以容忍丢包。
    【解决方案2】:

    大多数 raft 实现都使用流水线,您可以在从主机到从机的飞行中进行多个日志条目。 但是,只有在 master 收到来自 quorum slave 的 ACK 响应后,master 才会成功响应客户端写入请求,其中日志偏移量等于或大于此客户端请求写入的日志偏移量。

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多