CAP && BASE理论
CAP理论
CAP理论是指在一个分布式系统中,不可能同时满足以下3点:
- 一致性(Consistency):在分布式系统中,各个副本之间是否能保持数据的一致。在一致性的需求下,当数据被更新后,所有节点都应持有最新的数据。
- 可用性(Availability):每次请求都能获取到正确的响应,但是不保证数据是最新的。
- 分区容错性(Partition tolerance):分布式系统中,某些节点故障时,仍能对外提供一致性或可用性的服务,不会因为某些节点导致整个服务不可用。
一致性和可用性的抉择!
- 如果分布式系统满足一致性,那么必然导致数据同步期间,节点访问不可达,影响了可用性。
- 如果分布式系统满足可用性,那么就不能通过事务保证节点的强一致性,那么就会影响一致性。
因为分区容错性在分布式系统中是最重要的,而一致性和可用性需要抉择,因此只能在CP和AP中选择,zookeeper中保证的是CP。
BASE理论
BASE理论是对CAP中的一致性和可用性做了权衡的结果,理论的核心思想是:我们无法做到强一致性,但每个应用都可以根据自身的特点,采用适当的方式实现最终一致性。
- 基本可用(Basically Available):分布式系统出现故障时,允许损失部分功能或者性能,做到基本功能的可用。
- 软状态(Soft-state):允许出现中间状态,不同的数据节点之间可能出现数据的不一致。
- 最终一致性(Eventually Consistent):经过一段时间,数据可以达到一致性。
几种一致性简单介绍
强一致性
- 任意时刻,所有节点中的数据是一样的。
- 如果一个集群需要对外提供强一致性,那么只要集群内部某一台节点的数据发生了改变,就需要等待集群的其他节点同步完数据后,才能正常的对外提供服务。
- 保证了强一致性,必然会损失可用性
弱一致性
- 系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能得到更新前的值。
- 即使过了一段时间后,后续的读取也不一定能保证一致性。
最终一致性
- 弱一致性的一种特殊形式,不保证在任意时刻的任意节点的同一份数据都是相同的,但是随着时间的迁移,不同节点上的数据总是在向着趋同的方向变化。
- 存储系统在保证没有新的更新的条件下,最终所有的访问都是最后更新的值。
顺序一致性
- 任何一次都能读取到某个数据最近一次变更的值。
- 对其他节点之前的修改时可见且确定的,并且新的写入在意见达成同步的基础上。