理解分布式一致性:Paxos协议之Multi-Paxos

  • Multi-Paxos without failures
  • Multi-Paxos when phase 1 can be skipped
  • Multi-Paxos when roles are collapsed
  • Multi-Paxos when roles are collapsed and the leader is steady

在前面一篇文章我们讲到了理解分布式一致性:Paxos协议之Basic Paxos,本篇文章我会讲解更加通用和普遍的Multi-Paxos协议。

在Basic Paxos协议中,每一次执行过程都需要经历Prepare->Promise->Accept->Accepted 这四个步骤,这样就会导致消息太多,从而影响分布式系统的性能。
如果Leader足够稳定的话,Phase 1 里面的Prepare->Promise 完全可以省略掉,从而使用同一个Leader去发送Accept消息。
当然我们还要对请求消息做一些改造,这里我们在请求里面加入了轮数I,I表示的是同一个leader发送Accept请求的次数,每发送一次请求,I+1 。
下面我们用序列图的形式尽可能的去展示Multi-Paxos的魅力。

Multi-Paxos without failures

下图我们展示一个基本的Multi-Paxos一次执行交互流程,系统有1个Client,1个Proposer, 3个Acceptor, 1个Learner。

#mermaid-svg-7gTBGdSIJhGcS2ip .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .label text{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .node rect,#mermaid-svg-7gTBGdSIJhGcS2ip .node circle,#mermaid-svg-7gTBGdSIJhGcS2ip .node ellipse,#mermaid-svg-7gTBGdSIJhGcS2ip .node polygon,#mermaid-svg-7gTBGdSIJhGcS2ip .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-7gTBGdSIJhGcS2ip .node .label{text-align:center;fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .node.clickable{cursor:pointer}#mermaid-svg-7gTBGdSIJhGcS2ip .arrowheadPath{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-7gTBGdSIJhGcS2ip .flowchart-link{stroke:#333;fill:none}#mermaid-svg-7gTBGdSIJhGcS2ip .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-7gTBGdSIJhGcS2ip .edgeLabel rect{opacity:0.9}#mermaid-svg-7gTBGdSIJhGcS2ip .edgeLabel span{color:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-7gTBGdSIJhGcS2ip .cluster text{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-7gTBGdSIJhGcS2ip .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-7gTBGdSIJhGcS2ip text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-7gTBGdSIJhGcS2ip .actor-line{stroke:grey}#mermaid-svg-7gTBGdSIJhGcS2ip .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-7gTBGdSIJhGcS2ip #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .sequenceNumber{fill:#fff}#mermaid-svg-7gTBGdSIJhGcS2ip #sequencenumber{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip #crosshead path{fill:#333;stroke:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .messageText{fill:#333;stroke:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-7gTBGdSIJhGcS2ip .labelText,#mermaid-svg-7gTBGdSIJhGcS2ip .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-7gTBGdSIJhGcS2ip .loopText,#mermaid-svg-7gTBGdSIJhGcS2ip .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-7gTBGdSIJhGcS2ip .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-7gTBGdSIJhGcS2ip .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-7gTBGdSIJhGcS2ip .noteText,#mermaid-svg-7gTBGdSIJhGcS2ip .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-7gTBGdSIJhGcS2ip .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-7gTBGdSIJhGcS2ip .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-7gTBGdSIJhGcS2ip .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-7gTBGdSIJhGcS2ip .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .section{stroke:none;opacity:0.2}#mermaid-svg-7gTBGdSIJhGcS2ip .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-7gTBGdSIJhGcS2ip .section2{fill:#fff400}#mermaid-svg-7gTBGdSIJhGcS2ip .section1,#mermaid-svg-7gTBGdSIJhGcS2ip .section3{fill:#fff;opacity:0.2}#mermaid-svg-7gTBGdSIJhGcS2ip .sectionTitle0{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .sectionTitle1{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .sectionTitle2{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .sectionTitle3{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-7gTBGdSIJhGcS2ip .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .grid path{stroke-width:0}#mermaid-svg-7gTBGdSIJhGcS2ip .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-7gTBGdSIJhGcS2ip .task{stroke-width:2}#mermaid-svg-7gTBGdSIJhGcS2ip .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .taskText:not([font-size]){font-size:11px}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-7gTBGdSIJhGcS2ip .task.clickable{cursor:pointer}#mermaid-svg-7gTBGdSIJhGcS2ip .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7gTBGdSIJhGcS2ip .taskText0,#mermaid-svg-7gTBGdSIJhGcS2ip .taskText1,#mermaid-svg-7gTBGdSIJhGcS2ip .taskText2,#mermaid-svg-7gTBGdSIJhGcS2ip .taskText3{fill:#fff}#mermaid-svg-7gTBGdSIJhGcS2ip .task0,#mermaid-svg-7gTBGdSIJhGcS2ip .task1,#mermaid-svg-7gTBGdSIJhGcS2ip .task2,#mermaid-svg-7gTBGdSIJhGcS2ip .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutside0,#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutside2{fill:#000}#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutside1,#mermaid-svg-7gTBGdSIJhGcS2ip .taskTextOutside3{fill:#000}#mermaid-svg-7gTBGdSIJhGcS2ip .active0,#mermaid-svg-7gTBGdSIJhGcS2ip .active1,#mermaid-svg-7gTBGdSIJhGcS2ip .active2,#mermaid-svg-7gTBGdSIJhGcS2ip .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-7gTBGdSIJhGcS2ip .activeText0,#mermaid-svg-7gTBGdSIJhGcS2ip .activeText1,#mermaid-svg-7gTBGdSIJhGcS2ip .activeText2,#mermaid-svg-7gTBGdSIJhGcS2ip .activeText3{fill:#000 !important}#mermaid-svg-7gTBGdSIJhGcS2ip .done0,#mermaid-svg-7gTBGdSIJhGcS2ip .done1,#mermaid-svg-7gTBGdSIJhGcS2ip .done2,#mermaid-svg-7gTBGdSIJhGcS2ip .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-7gTBGdSIJhGcS2ip .doneText0,#mermaid-svg-7gTBGdSIJhGcS2ip .doneText1,#mermaid-svg-7gTBGdSIJhGcS2ip .doneText2,#mermaid-svg-7gTBGdSIJhGcS2ip .doneText3{fill:#000 !important}#mermaid-svg-7gTBGdSIJhGcS2ip .crit0,#mermaid-svg-7gTBGdSIJhGcS2ip .crit1,#mermaid-svg-7gTBGdSIJhGcS2ip .crit2,#mermaid-svg-7gTBGdSIJhGcS2ip .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-7gTBGdSIJhGcS2ip .activeCrit0,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCrit1,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCrit2,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-7gTBGdSIJhGcS2ip .doneCrit0,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCrit1,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCrit2,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-7gTBGdSIJhGcS2ip .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-7gTBGdSIJhGcS2ip .milestoneText{font-style:italic}#mermaid-svg-7gTBGdSIJhGcS2ip .doneCritText0,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCritText1,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCritText2,#mermaid-svg-7gTBGdSIJhGcS2ip .doneCritText3{fill:#000 !important}#mermaid-svg-7gTBGdSIJhGcS2ip .activeCritText0,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCritText1,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCritText2,#mermaid-svg-7gTBGdSIJhGcS2ip .activeCritText3{fill:#000 !important}#mermaid-svg-7gTBGdSIJhGcS2ip .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-7gTBGdSIJhGcS2ip g.classGroup text .title{font-weight:bolder}#mermaid-svg-7gTBGdSIJhGcS2ip g.clickable{cursor:pointer}#mermaid-svg-7gTBGdSIJhGcS2ip g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-7gTBGdSIJhGcS2ip g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-7gTBGdSIJhGcS2ip .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-7gTBGdSIJhGcS2ip .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-7gTBGdSIJhGcS2ip .dashed-line{stroke-dasharray:3}#mermaid-svg-7gTBGdSIJhGcS2ip #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip .commit-id,#mermaid-svg-7gTBGdSIJhGcS2ip .commit-msg,#mermaid-svg-7gTBGdSIJhGcS2ip .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-7gTBGdSIJhGcS2ip g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-7gTBGdSIJhGcS2ip g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-7gTBGdSIJhGcS2ip g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-7gTBGdSIJhGcS2ip .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-7gTBGdSIJhGcS2ip .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-7gTBGdSIJhGcS2ip .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-7gTBGdSIJhGcS2ip .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-7gTBGdSIJhGcS2ip .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-7gTBGdSIJhGcS2ip .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-7gTBGdSIJhGcS2ip .edgeLabel text{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7gTBGdSIJhGcS2ip .node circle.state-start{fill:black;stroke:black}#mermaid-svg-7gTBGdSIJhGcS2ip .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-7gTBGdSIJhGcS2ip #statediagram-barbEnd{fill:#9370db}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-state .divider{stroke:#9370db}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-7gTBGdSIJhGcS2ip .note-edge{stroke-dasharray:5}#mermaid-svg-7gTBGdSIJhGcS2ip .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-7gTBGdSIJhGcS2ip .error-icon{fill:#522}#mermaid-svg-7gTBGdSIJhGcS2ip .error-text{fill:#522;stroke:#522}#mermaid-svg-7gTBGdSIJhGcS2ip .edge-thickness-normal{stroke-width:2px}#mermaid-svg-7gTBGdSIJhGcS2ip .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-7gTBGdSIJhGcS2ip .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-7gTBGdSIJhGcS2ip .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-7gTBGdSIJhGcS2ip .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-7gTBGdSIJhGcS2ip .marker{fill:#333}#mermaid-svg-7gTBGdSIJhGcS2ip .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-7gTBGdSIJhGcS2ip {color: rgba(0, 0, 0, 0.75);font: ;} Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner Request Prepare(1) Prepare(1) Prepare(1) Promise(1,I,Va) Promise(1,I,Vb) Promise(1,I,Vc) V is the last of (Va, Vb, Vc). I is round number. Accept!(1,I,V) Accept!(1,I,V) Accept!(1,I,V) Accepted(1,I,V) Accepted(1,I,V) Accepted(1,I,V) Accepted(1,I,V) Accepted(1,I,V) Accepted(1,I,V) Response Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner

Multi-Paxos when phase 1 can be skipped

上面我们讲到在Multi-Paxos中,如果Leader足够稳定的话,在接下来的执行中,phase 1 的请求其实是可以被省略的,那么接下来我们看一下被省略的整个流程。
这里round number需要+1,表示已经进入下一轮了。

#mermaid-svg-PYkh69zl5mir1xld .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-PYkh69zl5mir1xld .label text{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .node rect,#mermaid-svg-PYkh69zl5mir1xld .node circle,#mermaid-svg-PYkh69zl5mir1xld .node ellipse,#mermaid-svg-PYkh69zl5mir1xld .node polygon,#mermaid-svg-PYkh69zl5mir1xld .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-PYkh69zl5mir1xld .node .label{text-align:center;fill:#333}#mermaid-svg-PYkh69zl5mir1xld .node.clickable{cursor:pointer}#mermaid-svg-PYkh69zl5mir1xld .arrowheadPath{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-PYkh69zl5mir1xld .flowchart-link{stroke:#333;fill:none}#mermaid-svg-PYkh69zl5mir1xld .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-PYkh69zl5mir1xld .edgeLabel rect{opacity:0.9}#mermaid-svg-PYkh69zl5mir1xld .edgeLabel span{color:#333}#mermaid-svg-PYkh69zl5mir1xld .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-PYkh69zl5mir1xld .cluster text{fill:#333}#mermaid-svg-PYkh69zl5mir1xld div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-PYkh69zl5mir1xld .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-PYkh69zl5mir1xld text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-PYkh69zl5mir1xld .actor-line{stroke:grey}#mermaid-svg-PYkh69zl5mir1xld .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-PYkh69zl5mir1xld .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-PYkh69zl5mir1xld #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-PYkh69zl5mir1xld .sequenceNumber{fill:#fff}#mermaid-svg-PYkh69zl5mir1xld #sequencenumber{fill:#333}#mermaid-svg-PYkh69zl5mir1xld #crosshead path{fill:#333;stroke:#333}#mermaid-svg-PYkh69zl5mir1xld .messageText{fill:#333;stroke:#333}#mermaid-svg-PYkh69zl5mir1xld .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-PYkh69zl5mir1xld .labelText,#mermaid-svg-PYkh69zl5mir1xld .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-PYkh69zl5mir1xld .loopText,#mermaid-svg-PYkh69zl5mir1xld .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-PYkh69zl5mir1xld .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-PYkh69zl5mir1xld .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-PYkh69zl5mir1xld .noteText,#mermaid-svg-PYkh69zl5mir1xld .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-PYkh69zl5mir1xld .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-PYkh69zl5mir1xld .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-PYkh69zl5mir1xld .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-PYkh69zl5mir1xld .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .section{stroke:none;opacity:0.2}#mermaid-svg-PYkh69zl5mir1xld .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-PYkh69zl5mir1xld .section2{fill:#fff400}#mermaid-svg-PYkh69zl5mir1xld .section1,#mermaid-svg-PYkh69zl5mir1xld .section3{fill:#fff;opacity:0.2}#mermaid-svg-PYkh69zl5mir1xld .sectionTitle0{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .sectionTitle1{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .sectionTitle2{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .sectionTitle3{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-PYkh69zl5mir1xld .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .grid path{stroke-width:0}#mermaid-svg-PYkh69zl5mir1xld .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-PYkh69zl5mir1xld .task{stroke-width:2}#mermaid-svg-PYkh69zl5mir1xld .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .taskText:not([font-size]){font-size:11px}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-PYkh69zl5mir1xld .task.clickable{cursor:pointer}#mermaid-svg-PYkh69zl5mir1xld .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PYkh69zl5mir1xld .taskText0,#mermaid-svg-PYkh69zl5mir1xld .taskText1,#mermaid-svg-PYkh69zl5mir1xld .taskText2,#mermaid-svg-PYkh69zl5mir1xld .taskText3{fill:#fff}#mermaid-svg-PYkh69zl5mir1xld .task0,#mermaid-svg-PYkh69zl5mir1xld .task1,#mermaid-svg-PYkh69zl5mir1xld .task2,#mermaid-svg-PYkh69zl5mir1xld .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutside0,#mermaid-svg-PYkh69zl5mir1xld .taskTextOutside2{fill:#000}#mermaid-svg-PYkh69zl5mir1xld .taskTextOutside1,#mermaid-svg-PYkh69zl5mir1xld .taskTextOutside3{fill:#000}#mermaid-svg-PYkh69zl5mir1xld .active0,#mermaid-svg-PYkh69zl5mir1xld .active1,#mermaid-svg-PYkh69zl5mir1xld .active2,#mermaid-svg-PYkh69zl5mir1xld .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-PYkh69zl5mir1xld .activeText0,#mermaid-svg-PYkh69zl5mir1xld .activeText1,#mermaid-svg-PYkh69zl5mir1xld .activeText2,#mermaid-svg-PYkh69zl5mir1xld .activeText3{fill:#000 !important}#mermaid-svg-PYkh69zl5mir1xld .done0,#mermaid-svg-PYkh69zl5mir1xld .done1,#mermaid-svg-PYkh69zl5mir1xld .done2,#mermaid-svg-PYkh69zl5mir1xld .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-PYkh69zl5mir1xld .doneText0,#mermaid-svg-PYkh69zl5mir1xld .doneText1,#mermaid-svg-PYkh69zl5mir1xld .doneText2,#mermaid-svg-PYkh69zl5mir1xld .doneText3{fill:#000 !important}#mermaid-svg-PYkh69zl5mir1xld .crit0,#mermaid-svg-PYkh69zl5mir1xld .crit1,#mermaid-svg-PYkh69zl5mir1xld .crit2,#mermaid-svg-PYkh69zl5mir1xld .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-PYkh69zl5mir1xld .activeCrit0,#mermaid-svg-PYkh69zl5mir1xld .activeCrit1,#mermaid-svg-PYkh69zl5mir1xld .activeCrit2,#mermaid-svg-PYkh69zl5mir1xld .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-PYkh69zl5mir1xld .doneCrit0,#mermaid-svg-PYkh69zl5mir1xld .doneCrit1,#mermaid-svg-PYkh69zl5mir1xld .doneCrit2,#mermaid-svg-PYkh69zl5mir1xld .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-PYkh69zl5mir1xld .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-PYkh69zl5mir1xld .milestoneText{font-style:italic}#mermaid-svg-PYkh69zl5mir1xld .doneCritText0,#mermaid-svg-PYkh69zl5mir1xld .doneCritText1,#mermaid-svg-PYkh69zl5mir1xld .doneCritText2,#mermaid-svg-PYkh69zl5mir1xld .doneCritText3{fill:#000 !important}#mermaid-svg-PYkh69zl5mir1xld .activeCritText0,#mermaid-svg-PYkh69zl5mir1xld .activeCritText1,#mermaid-svg-PYkh69zl5mir1xld .activeCritText2,#mermaid-svg-PYkh69zl5mir1xld .activeCritText3{fill:#000 !important}#mermaid-svg-PYkh69zl5mir1xld .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-PYkh69zl5mir1xld g.classGroup text .title{font-weight:bolder}#mermaid-svg-PYkh69zl5mir1xld g.clickable{cursor:pointer}#mermaid-svg-PYkh69zl5mir1xld g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-PYkh69zl5mir1xld g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-PYkh69zl5mir1xld .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-PYkh69zl5mir1xld .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-PYkh69zl5mir1xld .dashed-line{stroke-dasharray:3}#mermaid-svg-PYkh69zl5mir1xld #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld .commit-id,#mermaid-svg-PYkh69zl5mir1xld .commit-msg,#mermaid-svg-PYkh69zl5mir1xld .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-PYkh69zl5mir1xld g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-PYkh69zl5mir1xld g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-PYkh69zl5mir1xld g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-PYkh69zl5mir1xld g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-PYkh69zl5mir1xld .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-PYkh69zl5mir1xld .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-PYkh69zl5mir1xld .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-PYkh69zl5mir1xld .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-PYkh69zl5mir1xld .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-PYkh69zl5mir1xld .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-PYkh69zl5mir1xld .edgeLabel text{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PYkh69zl5mir1xld .node circle.state-start{fill:black;stroke:black}#mermaid-svg-PYkh69zl5mir1xld .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-PYkh69zl5mir1xld #statediagram-barbEnd{fill:#9370db}#mermaid-svg-PYkh69zl5mir1xld .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-PYkh69zl5mir1xld .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-PYkh69zl5mir1xld .statediagram-state .divider{stroke:#9370db}#mermaid-svg-PYkh69zl5mir1xld .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-PYkh69zl5mir1xld .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-PYkh69zl5mir1xld .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-PYkh69zl5mir1xld .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-PYkh69zl5mir1xld .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-PYkh69zl5mir1xld .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-PYkh69zl5mir1xld .note-edge{stroke-dasharray:5}#mermaid-svg-PYkh69zl5mir1xld .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-PYkh69zl5mir1xld .error-icon{fill:#522}#mermaid-svg-PYkh69zl5mir1xld .error-text{fill:#522;stroke:#522}#mermaid-svg-PYkh69zl5mir1xld .edge-thickness-normal{stroke-width:2px}#mermaid-svg-PYkh69zl5mir1xld .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-PYkh69zl5mir1xld .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-PYkh69zl5mir1xld .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-PYkh69zl5mir1xld .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-PYkh69zl5mir1xld .marker{fill:#333}#mermaid-svg-PYkh69zl5mir1xld .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-PYkh69zl5mir1xld {color: rgba(0, 0, 0, 0.75);font: ;} Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner Request Accept!(1,I+1,W) Accept!(1,I+1,W) Accept!(1,I+1,W) Accepted(1,I+1,W) Accepted(1,I+1,W) Accepted(1,I+1,W) Accepted(1,I+1,W) Accepted(1,I+1,W) Accepted(1,I+1,W) Response Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner

Multi-Paxos when roles are collapsed

在Basic-Paxos中我们区分了很多角色,有Clients,Proposers, Acceptors and Learners。实际上Proposers, Acceptors and Learners可以合并成一个,我们把它统称为Server。下面是合并之后的序列图。

#mermaid-svg-O2m91Cpypj1DXDA5 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .label text{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .node rect,#mermaid-svg-O2m91Cpypj1DXDA5 .node circle,#mermaid-svg-O2m91Cpypj1DXDA5 .node ellipse,#mermaid-svg-O2m91Cpypj1DXDA5 .node polygon,#mermaid-svg-O2m91Cpypj1DXDA5 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-O2m91Cpypj1DXDA5 .node .label{text-align:center;fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .node.clickable{cursor:pointer}#mermaid-svg-O2m91Cpypj1DXDA5 .arrowheadPath{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-O2m91Cpypj1DXDA5 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-O2m91Cpypj1DXDA5 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-O2m91Cpypj1DXDA5 .edgeLabel rect{opacity:0.9}#mermaid-svg-O2m91Cpypj1DXDA5 .edgeLabel span{color:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-O2m91Cpypj1DXDA5 .cluster text{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-O2m91Cpypj1DXDA5 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-O2m91Cpypj1DXDA5 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-O2m91Cpypj1DXDA5 .actor-line{stroke:grey}#mermaid-svg-O2m91Cpypj1DXDA5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-O2m91Cpypj1DXDA5 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .sequenceNumber{fill:#fff}#mermaid-svg-O2m91Cpypj1DXDA5 #sequencenumber{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .messageText{fill:#333;stroke:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-O2m91Cpypj1DXDA5 .labelText,#mermaid-svg-O2m91Cpypj1DXDA5 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-O2m91Cpypj1DXDA5 .loopText,#mermaid-svg-O2m91Cpypj1DXDA5 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-O2m91Cpypj1DXDA5 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-O2m91Cpypj1DXDA5 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-O2m91Cpypj1DXDA5 .noteText,#mermaid-svg-O2m91Cpypj1DXDA5 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-O2m91Cpypj1DXDA5 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-O2m91Cpypj1DXDA5 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-O2m91Cpypj1DXDA5 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-O2m91Cpypj1DXDA5 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .section{stroke:none;opacity:0.2}#mermaid-svg-O2m91Cpypj1DXDA5 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-O2m91Cpypj1DXDA5 .section2{fill:#fff400}#mermaid-svg-O2m91Cpypj1DXDA5 .section1,#mermaid-svg-O2m91Cpypj1DXDA5 .section3{fill:#fff;opacity:0.2}#mermaid-svg-O2m91Cpypj1DXDA5 .sectionTitle0{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .sectionTitle1{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .sectionTitle2{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .sectionTitle3{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-O2m91Cpypj1DXDA5 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .grid path{stroke-width:0}#mermaid-svg-O2m91Cpypj1DXDA5 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-O2m91Cpypj1DXDA5 .task{stroke-width:2}#mermaid-svg-O2m91Cpypj1DXDA5 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .taskText:not([font-size]){font-size:11px}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-O2m91Cpypj1DXDA5 .task.clickable{cursor:pointer}#mermaid-svg-O2m91Cpypj1DXDA5 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-O2m91Cpypj1DXDA5 .taskText0,#mermaid-svg-O2m91Cpypj1DXDA5 .taskText1,#mermaid-svg-O2m91Cpypj1DXDA5 .taskText2,#mermaid-svg-O2m91Cpypj1DXDA5 .taskText3{fill:#fff}#mermaid-svg-O2m91Cpypj1DXDA5 .task0,#mermaid-svg-O2m91Cpypj1DXDA5 .task1,#mermaid-svg-O2m91Cpypj1DXDA5 .task2,#mermaid-svg-O2m91Cpypj1DXDA5 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutside0,#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutside2{fill:#000}#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutside1,#mermaid-svg-O2m91Cpypj1DXDA5 .taskTextOutside3{fill:#000}#mermaid-svg-O2m91Cpypj1DXDA5 .active0,#mermaid-svg-O2m91Cpypj1DXDA5 .active1,#mermaid-svg-O2m91Cpypj1DXDA5 .active2,#mermaid-svg-O2m91Cpypj1DXDA5 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-O2m91Cpypj1DXDA5 .activeText0,#mermaid-svg-O2m91Cpypj1DXDA5 .activeText1,#mermaid-svg-O2m91Cpypj1DXDA5 .activeText2,#mermaid-svg-O2m91Cpypj1DXDA5 .activeText3{fill:#000 !important}#mermaid-svg-O2m91Cpypj1DXDA5 .done0,#mermaid-svg-O2m91Cpypj1DXDA5 .done1,#mermaid-svg-O2m91Cpypj1DXDA5 .done2,#mermaid-svg-O2m91Cpypj1DXDA5 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-O2m91Cpypj1DXDA5 .doneText0,#mermaid-svg-O2m91Cpypj1DXDA5 .doneText1,#mermaid-svg-O2m91Cpypj1DXDA5 .doneText2,#mermaid-svg-O2m91Cpypj1DXDA5 .doneText3{fill:#000 !important}#mermaid-svg-O2m91Cpypj1DXDA5 .crit0,#mermaid-svg-O2m91Cpypj1DXDA5 .crit1,#mermaid-svg-O2m91Cpypj1DXDA5 .crit2,#mermaid-svg-O2m91Cpypj1DXDA5 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-O2m91Cpypj1DXDA5 .activeCrit0,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCrit1,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCrit2,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-O2m91Cpypj1DXDA5 .doneCrit0,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCrit1,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCrit2,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-O2m91Cpypj1DXDA5 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-O2m91Cpypj1DXDA5 .milestoneText{font-style:italic}#mermaid-svg-O2m91Cpypj1DXDA5 .doneCritText0,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCritText1,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCritText2,#mermaid-svg-O2m91Cpypj1DXDA5 .doneCritText3{fill:#000 !important}#mermaid-svg-O2m91Cpypj1DXDA5 .activeCritText0,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCritText1,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCritText2,#mermaid-svg-O2m91Cpypj1DXDA5 .activeCritText3{fill:#000 !important}#mermaid-svg-O2m91Cpypj1DXDA5 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-O2m91Cpypj1DXDA5 g.classGroup text .title{font-weight:bolder}#mermaid-svg-O2m91Cpypj1DXDA5 g.clickable{cursor:pointer}#mermaid-svg-O2m91Cpypj1DXDA5 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-O2m91Cpypj1DXDA5 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-O2m91Cpypj1DXDA5 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-O2m91Cpypj1DXDA5 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-O2m91Cpypj1DXDA5 .dashed-line{stroke-dasharray:3}#mermaid-svg-O2m91Cpypj1DXDA5 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 .commit-id,#mermaid-svg-O2m91Cpypj1DXDA5 .commit-msg,#mermaid-svg-O2m91Cpypj1DXDA5 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-O2m91Cpypj1DXDA5 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-O2m91Cpypj1DXDA5 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-O2m91Cpypj1DXDA5 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-O2m91Cpypj1DXDA5 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-O2m91Cpypj1DXDA5 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-O2m91Cpypj1DXDA5 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-O2m91Cpypj1DXDA5 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-O2m91Cpypj1DXDA5 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-O2m91Cpypj1DXDA5 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-O2m91Cpypj1DXDA5 .edgeLabel text{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-O2m91Cpypj1DXDA5 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-O2m91Cpypj1DXDA5 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-O2m91Cpypj1DXDA5 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-O2m91Cpypj1DXDA5 .note-edge{stroke-dasharray:5}#mermaid-svg-O2m91Cpypj1DXDA5 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-O2m91Cpypj1DXDA5 .error-icon{fill:#522}#mermaid-svg-O2m91Cpypj1DXDA5 .error-text{fill:#522;stroke:#522}#mermaid-svg-O2m91Cpypj1DXDA5 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-O2m91Cpypj1DXDA5 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-O2m91Cpypj1DXDA5 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-O2m91Cpypj1DXDA5 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-O2m91Cpypj1DXDA5 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-O2m91Cpypj1DXDA5 .marker{fill:#333}#mermaid-svg-O2m91Cpypj1DXDA5 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-O2m91Cpypj1DXDA5 {color: rgba(0, 0, 0, 0.75);font: ;} Client Server1 Server2 Server3 Request Prepare(N) Prepare(N) Promise(N,I,Va) Promise(N,I,Vb) Accept!(N,I,V) Accept!(N,I,V) Accepted(N,I) Accepted(N,I) Response Client Server1 Server2 Server3

大家看看,是不是实现起来简单很多?

Multi-Paxos when roles are collapsed and the leader is steady

同样的,当Leader很稳定的时候,我们可以在接下来的执行中忽略Phase 1. 如下图所示:

#mermaid-svg-HfDx5EyqPrQYAsQd .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .label text{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .node rect,#mermaid-svg-HfDx5EyqPrQYAsQd .node circle,#mermaid-svg-HfDx5EyqPrQYAsQd .node ellipse,#mermaid-svg-HfDx5EyqPrQYAsQd .node polygon,#mermaid-svg-HfDx5EyqPrQYAsQd .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-HfDx5EyqPrQYAsQd .node .label{text-align:center;fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .node.clickable{cursor:pointer}#mermaid-svg-HfDx5EyqPrQYAsQd .arrowheadPath{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-HfDx5EyqPrQYAsQd .flowchart-link{stroke:#333;fill:none}#mermaid-svg-HfDx5EyqPrQYAsQd .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-HfDx5EyqPrQYAsQd .edgeLabel rect{opacity:0.9}#mermaid-svg-HfDx5EyqPrQYAsQd .edgeLabel span{color:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-HfDx5EyqPrQYAsQd .cluster text{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-HfDx5EyqPrQYAsQd .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-HfDx5EyqPrQYAsQd text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-HfDx5EyqPrQYAsQd .actor-line{stroke:grey}#mermaid-svg-HfDx5EyqPrQYAsQd .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-HfDx5EyqPrQYAsQd #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .sequenceNumber{fill:#fff}#mermaid-svg-HfDx5EyqPrQYAsQd #sequencenumber{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd #crosshead path{fill:#333;stroke:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .messageText{fill:#333;stroke:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-HfDx5EyqPrQYAsQd .labelText,#mermaid-svg-HfDx5EyqPrQYAsQd .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-HfDx5EyqPrQYAsQd .loopText,#mermaid-svg-HfDx5EyqPrQYAsQd .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-HfDx5EyqPrQYAsQd .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-HfDx5EyqPrQYAsQd .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-HfDx5EyqPrQYAsQd .noteText,#mermaid-svg-HfDx5EyqPrQYAsQd .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-HfDx5EyqPrQYAsQd .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-HfDx5EyqPrQYAsQd .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-HfDx5EyqPrQYAsQd .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-HfDx5EyqPrQYAsQd .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .section{stroke:none;opacity:0.2}#mermaid-svg-HfDx5EyqPrQYAsQd .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-HfDx5EyqPrQYAsQd .section2{fill:#fff400}#mermaid-svg-HfDx5EyqPrQYAsQd .section1,#mermaid-svg-HfDx5EyqPrQYAsQd .section3{fill:#fff;opacity:0.2}#mermaid-svg-HfDx5EyqPrQYAsQd .sectionTitle0{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .sectionTitle1{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .sectionTitle2{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .sectionTitle3{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-HfDx5EyqPrQYAsQd .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .grid path{stroke-width:0}#mermaid-svg-HfDx5EyqPrQYAsQd .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-HfDx5EyqPrQYAsQd .task{stroke-width:2}#mermaid-svg-HfDx5EyqPrQYAsQd .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .taskText:not([font-size]){font-size:11px}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-HfDx5EyqPrQYAsQd .task.clickable{cursor:pointer}#mermaid-svg-HfDx5EyqPrQYAsQd .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-HfDx5EyqPrQYAsQd .taskText0,#mermaid-svg-HfDx5EyqPrQYAsQd .taskText1,#mermaid-svg-HfDx5EyqPrQYAsQd .taskText2,#mermaid-svg-HfDx5EyqPrQYAsQd .taskText3{fill:#fff}#mermaid-svg-HfDx5EyqPrQYAsQd .task0,#mermaid-svg-HfDx5EyqPrQYAsQd .task1,#mermaid-svg-HfDx5EyqPrQYAsQd .task2,#mermaid-svg-HfDx5EyqPrQYAsQd .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutside0,#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutside2{fill:#000}#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutside1,#mermaid-svg-HfDx5EyqPrQYAsQd .taskTextOutside3{fill:#000}#mermaid-svg-HfDx5EyqPrQYAsQd .active0,#mermaid-svg-HfDx5EyqPrQYAsQd .active1,#mermaid-svg-HfDx5EyqPrQYAsQd .active2,#mermaid-svg-HfDx5EyqPrQYAsQd .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-HfDx5EyqPrQYAsQd .activeText0,#mermaid-svg-HfDx5EyqPrQYAsQd .activeText1,#mermaid-svg-HfDx5EyqPrQYAsQd .activeText2,#mermaid-svg-HfDx5EyqPrQYAsQd .activeText3{fill:#000 !important}#mermaid-svg-HfDx5EyqPrQYAsQd .done0,#mermaid-svg-HfDx5EyqPrQYAsQd .done1,#mermaid-svg-HfDx5EyqPrQYAsQd .done2,#mermaid-svg-HfDx5EyqPrQYAsQd .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-HfDx5EyqPrQYAsQd .doneText0,#mermaid-svg-HfDx5EyqPrQYAsQd .doneText1,#mermaid-svg-HfDx5EyqPrQYAsQd .doneText2,#mermaid-svg-HfDx5EyqPrQYAsQd .doneText3{fill:#000 !important}#mermaid-svg-HfDx5EyqPrQYAsQd .crit0,#mermaid-svg-HfDx5EyqPrQYAsQd .crit1,#mermaid-svg-HfDx5EyqPrQYAsQd .crit2,#mermaid-svg-HfDx5EyqPrQYAsQd .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-HfDx5EyqPrQYAsQd .activeCrit0,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCrit1,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCrit2,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-HfDx5EyqPrQYAsQd .doneCrit0,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCrit1,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCrit2,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-HfDx5EyqPrQYAsQd .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-HfDx5EyqPrQYAsQd .milestoneText{font-style:italic}#mermaid-svg-HfDx5EyqPrQYAsQd .doneCritText0,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCritText1,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCritText2,#mermaid-svg-HfDx5EyqPrQYAsQd .doneCritText3{fill:#000 !important}#mermaid-svg-HfDx5EyqPrQYAsQd .activeCritText0,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCritText1,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCritText2,#mermaid-svg-HfDx5EyqPrQYAsQd .activeCritText3{fill:#000 !important}#mermaid-svg-HfDx5EyqPrQYAsQd .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-HfDx5EyqPrQYAsQd g.classGroup text .title{font-weight:bolder}#mermaid-svg-HfDx5EyqPrQYAsQd g.clickable{cursor:pointer}#mermaid-svg-HfDx5EyqPrQYAsQd g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-HfDx5EyqPrQYAsQd g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-HfDx5EyqPrQYAsQd .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-HfDx5EyqPrQYAsQd .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-HfDx5EyqPrQYAsQd .dashed-line{stroke-dasharray:3}#mermaid-svg-HfDx5EyqPrQYAsQd #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd .commit-id,#mermaid-svg-HfDx5EyqPrQYAsQd .commit-msg,#mermaid-svg-HfDx5EyqPrQYAsQd .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-HfDx5EyqPrQYAsQd g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-HfDx5EyqPrQYAsQd g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-HfDx5EyqPrQYAsQd g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-HfDx5EyqPrQYAsQd .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-HfDx5EyqPrQYAsQd .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-HfDx5EyqPrQYAsQd .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-HfDx5EyqPrQYAsQd .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-HfDx5EyqPrQYAsQd .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-HfDx5EyqPrQYAsQd .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-HfDx5EyqPrQYAsQd .edgeLabel text{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-HfDx5EyqPrQYAsQd .node circle.state-start{fill:black;stroke:black}#mermaid-svg-HfDx5EyqPrQYAsQd .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-HfDx5EyqPrQYAsQd #statediagram-barbEnd{fill:#9370db}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-state .divider{stroke:#9370db}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-HfDx5EyqPrQYAsQd .note-edge{stroke-dasharray:5}#mermaid-svg-HfDx5EyqPrQYAsQd .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-HfDx5EyqPrQYAsQd .error-icon{fill:#522}#mermaid-svg-HfDx5EyqPrQYAsQd .error-text{fill:#522;stroke:#522}#mermaid-svg-HfDx5EyqPrQYAsQd .edge-thickness-normal{stroke-width:2px}#mermaid-svg-HfDx5EyqPrQYAsQd .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-HfDx5EyqPrQYAsQd .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-HfDx5EyqPrQYAsQd .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-HfDx5EyqPrQYAsQd .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-HfDx5EyqPrQYAsQd .marker{fill:#333}#mermaid-svg-HfDx5EyqPrQYAsQd .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-HfDx5EyqPrQYAsQd {color: rgba(0, 0, 0, 0.75);font: ;} Client Server1 Server2 Server3 Request Accept!(N,I+1,W) Accept!(N,I+1,W) Accepted(N,I+1) Accepted(N,I+1) Response Client Server1 Server2 Server3

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考flydean的博客

理解分布式一致性:Paxos协议之Multi-Paxos相关推荐

  1. 理解分布式一致性:Raft协议

    理解分布式一致性:Raft协议 什么是分布式一致性 Leader选举 日志复制流程 term选举周期 timeout 选举和选举timeout 选举分裂 日志复制和心跳timeout 在分布式系统中, ...

  2. 理解分布式一致性:Paxos协议之Basic Paxos

    理解分布式一致性:Paxos协议之Basic Paxos 角色 Proposal Number & Agreed Value Basic Paxos Basic Paxos without f ...

  3. 理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos

    理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos Generalized Paxos Byzantine Paxos Byzantine ...

  4. 理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos

    理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos Cheap Paxos Message flow: Cheap Multi-Paxos Fast Paxos ...

  5. 理解分布式一致性:拜占庭容错与PBFT

    理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...

  6. 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结

    文章目录 前言 CAP理论 C consistency 一致性 A availability 可用性 P partition tolerance 分区容错性 一致性模型 弱一致性 强一致性 强一致性算 ...

  7. Paxos协议之Basic Paxos/Multi Paxos

    论文Paxos made simple从简单易懂的角度阐述了Paxos算法.之后,2013年斯坦福大学的Diego Ongaro做了一个讲座:Implementing Replicated Logs ...

  8. 一次性吃透分布式一致性Raft协议

    简介 Raft是一种管理复制日志的一致性算法,它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统.为了提升可理 ...

  9. 分布式一致性协议 之 Paxos协议

    1.什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一. Paxos由 莱斯利· ...

最新文章

  1. 用python自动化做ecshop测试_Python-自动化测试面试
  2. nova ERROR (ClientException): 解决方法
  3. mysql缓存淘汰机制_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....
  4. 怎么用python画简单的图-python中简单易学的绘图:用turtle画太极图
  5. 阿里云高可用架构之“CDN+WAF+SLB+ECS
  6. 5下载的demo在哪_归类专业能力水平评价练习盘!快来下载呀
  7. Sourcing Cockpit: 2. Demo of Service Purchase Order
  8. CSS浮动、定位与z-index层叠等级详解——响应式Web系列学习笔记
  9. mysql5.7.17二进制包_mysql5.7二进制包安装方法
  10. 云+X案例展 | 民生类:肯耐珂萨入围腾讯SaaS加速器首期成员名单
  11. Python扩展库scipy.misc中图像转换成pillow图像
  12. Sublime Text 3 - 设置自动换行
  13. python访问注册表_python3操作注册表
  14. 七、Oracle学习笔记:数值函数
  15. photoshop ps2022软件下载
  16. PostScirpt打印机驱动程序
  17. 数据生产力崛起:新动能 新治理 - 摘要
  18. java导出excel插入图片
  19. return this java_简单的this,麻烦的this
  20. C语言课设---银行存取款管理系统

热门文章

  1. 带你轻松认识SSL协议中的加密套件
  2. 思科2018校招硬件测试笔试试题及答案
  3. 阿里最新秋招面经,腾讯/美团/字节1万道Java中高级面试题
  4. 如何控制Echarts时间轴的刻度区间
  5. html中td内容不换行显示,html小技巧之td,div标签里内容不换行
  6. 1 python编程基础学习
  7. 计算机毕设之餐厅选座订餐系统的设计与实践
  8. oracle 中处理标准差的问题
  9. 脑裂的产生与解决方案
  10. C语言简单编程案例——(五)