EricBrewer教授提出 CAP理论 ,在设计和部署分布式应用的时候,存在三个核心的系统需求:
C: Consistency 一致性
A: Availability 可用性
P:Partition Tolerance分区容错性
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
那么CAP到底是咋个回事呢?
● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。
● 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(可用性不仅包括读,还有写)
● 分区容忍性(P):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务.
在数据库的世界里面,关系型数据库讲究的是 ACID,什么意思呢?
原子性(Atomicity). 事务中的所有操作,要么全部成功,要么全部不做.
一致性(Consistency) 在事务开始与结束时,数据库处于一致状态.
隔离性(Isolation). 事务如同只有这一个操作在被数据库所执行一样.
持久性(Durability). 在事务结束时,此操作将不可逆转. 在分布式领域,有一个对应的模型叫 BASE.
Basically Available(基本可用)
Soft state(柔性状态) 状态可以有一段时间不同步,异步
Eventually consistent(最终一致) 最终数据是一致的就可以了,而不是时时一致
我们使用的 mysql, 遵循的是 ACID, 现在使用的 Cassandra,遵循的是BASE。
BASE的基础,就是CAP理论。
Cassandra在CAP里面,取的是AP,舍的是C,注意:并不是完全不要C,而是要了一个弱化的C。 也就是最终一致,不是时时一致。