python
from enum import Enum
class Role(Enum):
FOLLOWER = 1
CANDIDATE = 2
LEADER = 3
class Node:
def __init__(self):
self.term = 0
self.role = Role.FOLLOWER
self.voted_for = None
def on_election_timeout(self):
self.term += 1
self.role = Role.CANDIDATE
self.voted_for = "self"
def become_leader(self):
self.role = Role.LEADER
1978年 · Lamport 的逻辑时钟研究没有统一全局时钟时,怎样描述分布式事件之间的先后关系。
1982年 · 拜占庭将军问题Lamport、Shostak 和 Pease 系统研究存在任意错误节点时的交互一致性与容错边界。
1985年 · FLP 不可能性定理Fischer、Lynch 和 Paterson 证明:在完全异步且允许崩溃故障的模型中,确定性共识不能保证所有允许执行都终止。
1989年构思、1998年发表 · PaxosLamport 通过编号提议与相交多数集合,使分布式参与者能够安全选择共同值。
2014年 · RaftOngaro 和 Ousterhout 通过领导者选举、日志复制和清晰的安全规则,提出更容易教学和实现的共识算法。