知识盲区

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 个:

直接拒绝写入。

优点:

  • 强一致

  • 不会脑裂

代价:

  • 分区时部分节点不可用

  • 延迟更高