知识盲区
CAP
AP 和 CP,来自一个极其重要的理论:
CAP 定理
在一个分布式系统中,如果发生网络分区(Partition),
你只能在 一致性(Consistency) 和 可用性(Availability) 之间选一个。
what is CAP
C — Consistency(一致性)
这里的“一致性”是:
所有节点在同一时间看到的数据是一样的。
举例:
你写入 x = 1,
无论你访问哪个节点,都必须立刻看到 1。
这叫强一致。
A — Availability(可用性)
每个请求都必须得到响应。
哪怕返回的是旧数据,也必须回应。
P — Partition Tolerance(分区容忍)
网络分区发生时系统还能继续工作。
现实世界一定会有网络问题,所以:
P 是必须接受的。
AP
代表:Redis、Cassandra
特点:
网络分区时仍然对外提供服务
允许短时间数据不一致
最终一致性
举个现实例子:
主节点挂了,从节点马上顶上。
哪怕数据没同步完,它也先服务。
优点:
高可用
低延迟
性能好
代价:
可能出现脏数据
可能锁丢失
Redis 就是典型 AP 倾向系统。
CP
代表:ZooKeeper、etcd
特点:
网络分区时必须多数派确认
如果达不到多数派 → 停止服务
保证强一致
举例:
5 个节点,
至少 3 个存活才能对外提供写服务。
如果只剩 2 个:
直接拒绝写入。
优点:
强一致
不会脑裂
代价:
分区时部分节点不可用
延迟更高