分布式理论

CAP

关键结论:若系统需容忍网络分区(Partition-tolerance),则必须在一致性(Consistency)和可用性(Availability)之间做出取舍。

网络分区(Partition-tolerance)特指分布式系统中节点间因网络故障导致通信完全中断,形成两个或多个彼此隔离的集群。和数据是分片存储还是主从同步、有没有数据冗余和故障转移等没有关系。

例:聊天应用有两个节点(NodeA 和 NodeB),用户在不同地区访问不同节点。

场景 1:网络正常(无分区):用户 A 向 Node A 发送消息:“今晚 8 点开会”。Node A 同步消息到 Node B,数据一致。用户 B 从 Node B 读取消息,看到“今晚8点开会”。此时满足 C 和 A。

场景 2:网络分区(A 和 B 断开连接):用户 A 继续向 Node A 发送消息:“会议改到 9 点”,但 Node A 无法同步到 Node B。此时系统必须做出选择:

  • CP(一致性优先):Node A 拒绝写入新消息,或 Node B 拒绝响应读取请求。结果:用户 B 无法看到最新消息(保证一致性),但系统部分不可用。
  • AP(可用性优先):Node A 接受写入“会议改到9点”,Node B 继续返回旧数据“今晚8点开会”。结果:用户 B 看到旧消息(数据不一致),但系统持续可用。

典型 CP 系统:传统关系型数据库(MySQL、MongoDB等)、RabbitMQ、ZooKeeper。

典型 AP 系统:Redis(可配置 WAIT 强制 CP 模式)、Kafka、Nacos(默认 Distro 协议(Gossip 的变种),可配置用 Raft 协议为 CP 模式)、MinIO、Elasticsearch、Eureka。

 

BASE

关键结论:选择 AP 时,系统通过保证基本可用性(Basically Available)优先响应请求,同时允许数据存在中间过渡状态(软状态,Soft State),最终通过状态同步机制实现全局最终一致性(Eventual Consistency)。

 

PACELC

关键结论:存在网络分区(P)时,在可用性(Availability)和一致性(Consistency)间抉择,否则(E),在延迟(Latency)和一致性(Consistency)间权衡。

请注意,延迟和一致性间(ELC)权衡只适用于复制(主从同步)数据的系统。否则,任何类型的故障或节点过载都会导致系统出现可用性问题。由于此类问题只是极端延迟的例子,因此 ELC 权衡的 L 部分可以包含是否复制(主从同步)数据的选择。

 

同步机制

共识算法(强一致性)

https://www.bilibili.com/video/BV1TW411M7Fx & https://www.youtube.com/watch?v=BhosKsE8up8

Paxos(The Part-Time Parliament)

https://snaildove.github.io/2019/12/11/a-brief-introduction-of-Paxos-Raft-ZAB

Raft(In Search of an Understandable Consensus Algorithm)

https://github.com/benbjohnson/thesecretlivesofdata & https://raft.github.io

ZooKeeper Atomic Broadcast(Zab: High-performance broadcast for primary-backup systems,ZooKeeper’s atomic broadcast protocol: Theory and practice)

数据传播协议(最终一致性)

Gossip(Epidemic Algorithms for Replicated Database Maintenance)

实时协作

OT、CRDTs、HLC(混合逻辑时钟)

其它机制

版本控制、时间戳排序、基于事件的同步(发布/订阅)

原子提交协议

2PC(Notes on Database Operating Systems)

3PC

事务处理模式

XA

TCC(Pat Helland 的论文 Life Beyond Distributed Transactions)

Sega(Hector Garcia-Molina 的论文 Sagas)

 


Brewer's Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services

BASE: An Acid Alternative

Consistency Tradeoffs in Modern Distributed Database System Design

https://blog.csdn.net/XGLLHZ/article/details/145697410

posted @ 2019-04-21 11:17  江湖小小白  阅读(546)  评论(0)    收藏  举报