ITPub博客

首页 > > > 共识算法 之 Multi-Paxos(一)

共识算法 之 Multi-Paxos(一)

作者:demiaowu 时间:2018-08-25 08:58:38 0 删除 编辑

1. 算法描述

当前multi-paxos没有权威的文献参考,目前大多采用的参考文献[1]的描述,这里首先给出其翻译版,然后分析其各个模块的细节,Lead election,CommitIndex Advance,Log Replication等。(背景图片来自[2])

1.1. 服务器状态

所有acceptor上面持久化的状态

每个 acceptor上面存放了一个复制日志,日志index (1 <= index <= lastLogIndex)。每个Log Entry 包含如下内容:

**所有proposer上面持久化的状态**

在Proposer里经常改变的


1.2. Prepare RPC (Phase 1)

Request:

Response:

  • 接收者实现:

当接收到 prepare request 后,如果 request. proposalId >= minProposal, 则设置minProposal = request. proposalId。并且保证拒绝所有的 minProposal < request. proposalId 的accept请求。

1.3. Accpet RPC (Phase 2)

Request:

Response:

  • 接收者实现:

如果 proposalId >= minProposalId 就执行如下设置:

acceptedProposal[index] = request. proposalId; acceptedValue[index] = request.value; minProposal = request.proposalId;

对于每一个index < request.commitIndex 的log entry,如果其 acceptedProposal [index] == proposalId ,则可以设置其 acceptedProposal [index] = “无穷大”

1.4. Success (Phase 3)

Request:

Response:

  • 接收者实现:
    设置
    acceptedProposal [index] = “无穷大”
    acceptedValue[index] = request.value;
  • 发送者实现:
    if reply.commitIndex < commitIndex,
    则发送Success(index = reply.commitIndex + 1; value = acceptedValue[reply.commitIndex+1])

1.5. Proposer Algorithm

Write ( inputValue ) -> return bool

Notes,参考文献 [1] 原文中 02.(b) 描述上有错误,整理修正下,是 goto step 7.


这是 multi-paxos 的基本描述,相比 paxos,通过增加 leader 来消除正常情况下的绝大多数的 Prepare 阶段,直接进入 Accept 阶段,实际上熟悉 Raft 的读者可以看出,其 committed index 也是在 accept 阶段 request 来推进的,相比 Raft ,multi-paxos 增加了 success 其实就用于修复日志使用,后面将在(二)篇详细的分析。


参考文献

[1]. paxos-summay. ramcloud.stanford.edu/~

[2]. Implementing Replicated Logs with Paxos. ramcloud.stanford.edu/~

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-08-27

  • 博文量
    55
  • 访问量
    2