分布式系统的CAP定律
在分布式系统里面有一个CAP定律,这个定理的内容是指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容错性(Partition tolerance):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP定律是NoSQL数据库的基石,而CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点,而NoSQL则选了可用性。
NoSQL数据库主要做的是简单的键值查询,因此NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)
CAP为什么只能同时满足2个
分区容错性P其实就是每个服务都会部署多个节点,这样就可以保证此服务的一个节点挂了之后,此服务的其他节点依然可以响应,这就是分区容错性。 但是一个服务有多个节点之后,一个服务的多个节点之间的数据为了保持一致性就要进行数据复制,在此过程中就会出现数据一致性C(强一致性)的问题。 (数据一致性包含强一致性,弱一致性,最终一致性,这里指的是强一致性) 如果一定要保持一致性C,可以不做分区,即每个服务都是单节点,这样就不用考虑数据一致性问题了,但是每个服务只有一个节点,此节点挂了,此服务就能不可用了,分区就不能容错了,那就不是高可用分布式系统了,所以一般分布式系统都必须满足分区容错性P。 在满足了分区容错性P后,想要满足一致性C,一个服务的多个节点之间就必须进行数据复制达到数据一致之后再返回给调用者响应,然而在多个节点数据复制的过程中,可能节点之间会出现网络等问题使得数据复制阻塞或失败导致响应超时,服务调用失败,这就失去了系统的可用性A。 如果不强制满足强一致性,那在服务被调用的时候不用管数据复制的问题,直接返回响应,这就满足了可用性,但是由于此服务的多个节点数据可能没有完成复制,节点数据可能不一致,这就失去了系统的一致性。 结论:一个高可用的分布式系统分区容错性P是一定要满足的,在此基础上,只能满足可用性A或者一致性C。
一致性理论
通过上面介绍我们知道,对分布式系统来说,CAP 理论告诉我们。为了下一步讨论分布式事务特性,先简单介绍下数据一致性的基础理论。
- 强一致:当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。
- 弱一致性:系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。
- 最终一致性:弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。
分布式事务特性—最终一致性
在互联网大型分布式平台场景中,为了保障系统的可用性,他们一般会把强一致性的需求转换成最终一致性的需求。所以,对于大部分分布式事务场景,我们仅需要保证最终一致性即可。
BASE理论
eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
-
基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。 -
软状态( Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。 -
最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。 -
ACID和BASE的区别与联系
ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。
ACID和BASE代表了两种截然相反的设计哲学,在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。
网友评论