CAP理论与PACELC模型
CAP理论与PACELC模型
什么是CAP
CAP是说一个分布式系统最多只能同时满足一致性(Consistency),可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
在满足P的情况下,选择是优先保证一致性还是优先保证可用性。如果要保证一致性,就选择CP,如果要保证可用性,就选择AP。
一致性
一致性指所有节点在同一时间的数据完全一致,根据不同的业务场景,还可以灵活选择最终一致性方案和强一致性方案。
一致性方案一般包括:
- 2PC,两阶段提交
- 3PC,三阶段提交
- Paxos,Paxos 是很细致的一致性协议,但是一般实现过于复杂仅仅是理论
- Raft,Raft 是能够实现分布式系统强一致性的算法,TiDB 的一致性协议就是基于 Raft
- ZAB,Zookeeper 的一致性协议,基于 Paxos 简化
- NWR,上面提到的 dynamo 理论基础的协议,将 PACELC 均衡交给用户
最终一致性
最终一致性在理论上保证,假如数据未进行任何新的更新,则对数据执行的所有读取操作将返回最后更新的值。即一段时间后节点间的数据是一致的。
强一致性(实时一致性)
系统中某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值,即任意时刻所有节点中的数据都是一样的。
可用性
可用性指在服务正常响应期间一直可用,可用性一般与分布式数据冗余和负载均衡有着很大的关联。
分区容错性
分区容错性指分布式系统中某个节点故障或出现网络分区时,仍能提供满足一致性或可用性的服务。
"网络分区"[1]
例子
假设有这样一个分布式系统A,和一个副本A1,一般情况下,客户端向系统A中写入数据后,接下来数据会同步到A1,然后返回成功信息给客户端。
这时候如果读取数据,无论从A还是A1中都会读取到最新值,满足一致性,而且A和A1都是可用的,但是如果A和A1之间的连接断开,数据无法同步到A1,
这就出现了网络分区,
PACELC模型
PACELC模型是在出现网络分区错误的情况下,取前半部分PAC,其内容和PAC基本一致,当没有网络分区错误的情况下,则取LC,即延迟(Latency)和一致性(Consistency)
BASE理论
BASE 是 Basically Available
(基本可用)、Soft State
(软状态)和 Eventually Consistent
(最终一致性)三个单词的简写,作用是保证系统的可用性,然后通过最终一致性来代替强一致性,它是目前分布式系统设计中最具指导意义的经验总结。
软状态和最终一致性指的是允许系统中的数据存在中间状态,这同样是为了系统可用性而牺牲一段时间窗内的数据一致性,从而保证最终的数据一致性的做法。
目前这种处理数据的方式几乎成了互联网的标配设计模式,最经典的例子是在用户下单的时候不需要真正地扣减库存,而是仅在前台计个数,然后通过异步任务在后台批量处理。
网络分区
定义
WIKI给的定义是: 网络分区指由于网络设备的failure,造成网络分裂为多个独立的组 。
Gilbert和Lynch在论文中定义分区容忍性的: 网络允许丢失一个节点发给另一个节点的任意多的消息 。
分区原因
- 网络设备failure:比如网线断了,交换机故障了。
- 节点failure:节点的软件或者硬件坏了,节点成为故障节点。当故障的节点非常多,故障节点和正常节点就不在1个分区,如果正常的节点数量达不到quorum,分布式系统无法正常运作。
网络分区的检测
- 同步网络下,橘黄色节点和青色节点间的通信中断,就当网线断裂好了,节点向对方发送的消息如果在超时时间内没有收到响应,就可以认为消息丢失,形成了网络分区。
- 异步网络下,通信差是一种常态,消息的传递是非常不可靠的,消息无限延时,也可能丢失,根本无法确认消息是否到达对方节点,所以也无法确认/检测是否形成分区。