共识算法是用来保证分布式系统一致性的方法。它能保证所有节点的数据相同并且一个节点发起的提案可以被其他节点同意。
根据解决的场景是否允许拜占庭错误情况,共识算法分为Crash Fault Tolerance(CFT)和Byzantine Fault Tolerance(BFT)两类;
CFT: 可以容忍网络丢包、时钟漂移、部分节点宕机这类错误。代表代表算法:算法:Paxos,Raft;
BFT: 可以容忍部分节点任意类型的错误。代表算法:PBFT,PoW。
Consistency 一致性 : 所有节点的数据是一致的。
Availablity 可用性 : 每一个非故障节点,都能对每一个请求做出相应。简而言之,一个节点坏了,不影响其他节点的业务。
Partition Tolerant 分区容错性 : 当系统中的某个节点因网络问题无法通信时,系统仍然可以正常运行,提供服务。
CAP 这三个要素最多只能同时实现两个,不可能三者兼顾。
可用性针对节点出现故障,系统可用;分区容错性针对网络出现问题,系统可用。
BASE理论:BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性),是CAP中可用性和一致性权衡的结果。
核心思想:即使无法做到强一致性(Strong consistency),单每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consistency)。
释义:允许多个节点的状态出现冲突,但是所有能够沟通的节点都能够在有限的时间内解决冲突,从不一致的状态恢复到一致。
本质:需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。