Partition tolerance(分区容错性):数据库
大多数分布式系统都分布在多个子网络。每一个子网络就叫作一个区(partition)。分区容错的意思是,区间通讯可能失败。好比,一台服务器放在中国,另外一台服务器放在美国,这就是两个区,它们之间可能没法通讯。下图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能没法收到。系统设计的时候,必须考虑到这种状况。通常来讲,分区容错没法避免,所以能够认为 CAP 的 P 老是成立。CAP 定理告诉咱们,剩下的 C 和 A 没法同时作到。服务器
Consistency(一致性)网络
任何一个读操做老是能读取到以前完成的写操做结果,也就是在分布式环境中,多点的数据是一致的。问题是,用户有可能向 G2 发起读操做,因为 G2 的值没有发生变化,所以返回的是 v0。G1 和 G2 读操做的结果不一致,这就不知足一致性了。session
为了让 G2 也能变为 v1,就要在 G1 写操做的时候,让 G1 向 G2 发送一条消息,要求 G2 也改为 v1。架构
Availability(可用性)分布式
只要收到用户的请求,服务器就必须给出回应。用户能够向G1或者G2发起读操做,不论是哪台服务器,只要收到请求,就必须告诉用户究竟是V0仍是V1,不然就不知足可用性。 一致性和可用性不可能同时成立,由于通信可能失败(即出现分区容错) 若是须要保证G2的一致性,那么G1必须在写操做时锁定G2的读操做和写操做。只有数据同步后才从新开放读写。锁按期间G2是不能读写的,全部没有可用性。若是须要保证G2的可用性那么势必不能锁定G2,可是G1和G2的一致性就不成立。因此G2没法同时作到一致性和可用性。系统设计时只能选择一个目标, 追求一致性那么就没法保证可用性,如过追求可用性就没法作到一致性。网站
CA:传统Oracle数据库。设计
AP:大多数网站架构的选择。3d
CP:Redis,MongoDB (弱一致性,高可用性和分区容错性)。blog
Base
Bas理论是对CAP中一致性和可用性权衡的结果,其来源与对大型互联网分布式实践的总结,是基于CAP定理逐步演化而来的。 Base全称 Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写,来自 ebay 的架构师提出。其核心思想是便是没法作到强一致性(Strong consistency),但每一个应用均可以根据自身的业务特色,采用适当的方式来使系统达到最终的一致性(Eventual consistency)。
Basically Available(基本可用)
Soft state(软状态)
Eventually consistent(最终一致性)
最终一致性分为五种