很简单的一个原则,但是也梳理一下。
定义
C:指 Consistency,数据一致性。
A:指 Availability,可用性。
P:指 Partition Tolerance,分区容错性。
其中 C 和 A 很好理解,C 代表集群中的各个节点数据都相同,A 代表其中某些节点挂掉的时候整个集群还可以正常用。
我容易搞混的是 P 这个特性,分区容错性。
分区容错性:The system will continue to function when network partitions occur. 简单来说,集群内部出现通信故障,服务 A 的数据没法同步到其他节点时,客户端访问服务 A,服务 A 仍然能返回未同步到其他节点的数据。
举例分析
Cassandra
Cassandra 我记得也是超过半数节点已写入则视作已同步,确认一下。[TODO]
Kafka
首先定义一个 ISR(in-sync replica,同步的副本),对 Kafka 来说,要求 ISR 中所有副本都同步到、接收到,才视为已同步。
故 Kafka 是一个高数据一致性、高可用的分布式集群,符合 CA 两原则
(怎么感觉不怎么对啊 不要误人子弟。。。过几天再重新理解一下!![TODO])
ZooKeeper
对 ZooKeeper 来说,只要超过半数节点已同步/已写入,则可视为已同步。