dledger 自问自答

1. 为什么说 leader 和 follower 之间的日志复制是并行的?

leader 首先接收客户端的 append 日志,写入本地,然后把 DledgerEntry 放入缓冲(pendingAppendResponsesByTerm)中,leader 对应每个 follower 会创建一个 EntryDispatcher 对象,EntryDispatcher 中有一个 writeIndx 属性,EntryDispatcher 其中一个功能是把 leader 的 writeIndex 中的日志推送到 follower 中,当推送的日志收到 follower 的成功响应后,更新 follower 的写入成功的 index,QuorumAckChecker 负责检查所有 follower 写入成功的 index,超过半数的 followers 写入成功,则提交该 index。QuorumAckChecker 再根据提交的 index 来清除 pendingAppendResponsesByTerm 中的 DledgerEntry。

2. leader push 日志给 follower,follower 同步日志失败,怎么处理?

当请求的 index 和 term 和 follower 本地日志不相等时,follower 会拒绝写入当前日志,leader 根据 follower 返回的响应,发现该 follower 和 leader 不一致,则开始比较模式,重新确定 leader 中该 follower 对应的 writeIndex。

猜你喜欢

转载自www.cnblogs.com/allenwas3/p/12456279.html
今日推荐