CAP理论
CAP 定理是分布式系统设计中最基础,也是最为关键的理论。它指出,分布式数据存储不可能同时满足以下三个条件。
-
一致性(Consistency):每次读取要么获得最近写入的数据,要么获得一个错误。
-
可用性(Availability):每次请求都能获得一个(非错误)响应,但不保证返回的是最新写入的数据。
-
分区容忍(Partition tolerance):尽管任意数量的消息被节点间的网络丢失(或延迟),系统仍继续运行。
这里的可用性指的是所有节点可用
当系统进入分区模式之后,有两种选择:
-
选择一致性:例如 Paxos 算法,只有大多数的主分区能够进行操作,其他分区不可用,当网络恢复之后少数节点跟多数节点同步数据。
-
选择可用性:例如谷歌文档,出现分区时进入离线模式,等网络恢复了客户端跟服务端数据进行合并恢复。
一致性协议
一致性协议根据是否允许数据分歧可以分为两种:
-
单主协议(不允许数据分歧):整个分布式系统就像一个单体系统,所有写操作都由主节点处理并且同步给其他副本。例如主备同步、2PC、Paxos 都属于这类协议。
-
多主协议(允许数据分歧):所有写操作可以由不同节点发起,并且同步给其他副本。例如 Gossip、POW。
单主协议
- 主备复制,达到最终一致性
- 2阶段3阶段提交,实现顺序一致性
- paxos等分区容忍的一致性协议,实现顺序一致性
多主协议(最终一致性)
多主协议允许运行多个节点并发写,就一定会出现对一个数据并发写导致数据冲突的情况,因此这类协议都需要解决并发写的问题
Gossip协议:每个节点都可以对其他节点发送消息,接收到消息的节点随机选择其他节点发送消息,接收到消息的节点也做同样的事情。
参考:
分布式系统:CAP 理论的前世今生
分布式系统:一致性协议
Paxos 一致性协议
如何浅显易懂地解说 Paxos 的算法?
如何给女朋友解释什么是3PC?
如何给女朋友解释什么是2PC(二阶段提交)