分布式中的算法和协议:CAP、BASE、2PC、3PC、PAXOS
分布式中的算法和协议:CAP、BASE、2PC、3PC、PAXOS
CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者无法同时满足。
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本,与volatile关键字的可见性效果类似。)
- 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容忍性(P):当节点间出现网络分区,照样可以提供服务。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP原则是NOSQL数据库的基石。根据CAP原则,将NoSQL数据库分成了满足CA、CP或AP原则三大类:
- CA:单点集群,满足一致性、可用性的系统,通常扩展性较差,甚至没办法部署子节点,这是违背分布式系统设计的初衷的。传统的关系型数据库RDBMS:Oracle、MySQL就是CA。
- CP:满足一致性、分区容错性的系统,通常性能不是很高。相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验
- AP:满足可用性、分区容错性的系统,通常对一致性的要求低一些。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。
BASE原则
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的。
其核心思想是即使无法做到 强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到 最终一致性。
- 基本可用
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但绝不是指系统不可用。
例如响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分