FLP不可能原理
FLP定理
FLP Impossibility(FLP 不可能性)是分布式领域中一个非常著名的定理,定理的论文是由 Fischer, Lynch and Patterson 三位作者于1985年发表
It is impossible to have a deterministic protocol that solves consensus in a message-passing asynchronous system in which at most one process may fail by crashing
FLP的三大限定条件
确定性协议
Deterministic protocol,给定一个输入,一定会产生相同的输出
异步网络通信
同步通信:同时在线,允许超时
异步通信:没有统一时钟、不能时间同步、不能使用超时、不能探测失败、消息可任意延迟、消息可乱序
所有存活节点
所有存活的节点必须最终达到一致性
FLP的不可能三角
Safety:系统中非故障节点达成了一致和合法的共识,又称Agreement
Liveness:系统中非故障节点在有限的时间内能够达成共识,又称Termination
Fault Tolerance:协议必须在节点故障的时候同样有效
SL系统:为了达成一致性,不允许节点失败
SF系统:为了保证Safety,需要无限等待,因此无法保证Liveness
LF系统:为了保证Liveness,不能无限等待,因此无法保证Safety
Paxos违背了FLP吗?
CAP定理
CAP定理
CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer‘s theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的 ACM PODC 上提出的一个猜想
2002年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论
It is impossible for a distributed data store to simultaneously provide more than two out of the following three guarantees: Consistency, Availability, Partition tolerance
分布式数据存储系统不可能同时满足一致性、可用性和分区容忍性
CAP的不可能三角
一致性:每次读取操作都会读取到最新写入的数据,或者返回错误
可用性:每次请求都会得到非错请求,但不保证返回最新的数据
分区容错性:系统在发生分区的时候继续提供服务
CA:为了达成数据一致性和系统可用性,不允许分区
CP:系统分区的时候保证一致性,到无法保证可用性
AP:系统分区的时候保证可用性,但无法保证数据一致性
CAP的三大限定条件
分布式
分布式,可能发生网络分区
数据存储
通过复制来实现数据共享的存储系统
同时满足
同时满足CAP
CAP细节
复制延迟
理论上:CAP是忽略网络延迟的
工程落地:PACELC猜想(Partition -> Availability, Consistency, Else -> Latency, Consistency.)
描述粒度
CAP关注的是单个数据,不是整个系统,系统数据可以有的符合CP,有的符合AP
更多
正常情况下,可以满足CA,但是实际上有很小的时延
放弃!=无为,需要为分区恢复后的数据恢复和业务恢复做好准备
CAP的CA和ACID的CA定义完全不同,两者适应的领域也不同
BASE理论
BASE 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性
Basically Available:读写操作尽可能的可用,但写操作在冲突的时候可能丢失结果,读操作可能读取到旧的值
Soft State:没有一致性的保证,允许系统存在中间状态,而该中间状态不会影响系统整体可用性,这里的中间状态就是CAP 理论中的数据不一致
Eventually Consistency:如果系统运行正常且等待足够长的时间,系统最终将达成一致性的状态