CAP Theorem
对于一个分布式系统,不能同时满足以下三点:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition Tolerance)
一致性模型
- 弱一致性
- 最终一致性
- DNS
- Gossip
- 最终一致性
- 强一致性
- 同步(主从同步)
- Paxos
- Raft
- Zab
强一致性算法
Paxos
1. Basic Paxos
角色:
流程:
CLIENT
向PROPOSER
发起请求;- Prepare:
PROPOSER
向ACCEPTOR
提出提案,请求ACCEPTOR
中的多数派同意; - Promise: 如果提案的编号 N 小于目前
ACCEPTOR
接受的提案的编号,则ACCEPTOR
拒绝接受,否则接受; - Accept: 如果
ACCEPTOR
中的多数派接受请求,PROPOSER
发出 accept 请求,其中包含提案的编号 N 和提案内容; - Accepted: 如果
ACCEPTOR
在此期间没有收到任何编号大于 N 的提案,则接受此提案内容,否则忽略。
潜在问题:
- 活锁:多个
PROPOSER
向ACCEPTOR
递增提交提案,无法完成提案 - 难以实现
- 效率低(2 轮 RPC)
2. Multi Paxos
Multi Paxos
引入 PROPOSER
的 LEADER
,解决 Basic Paxos
的活锁问题,之后的请求只进行一次 RPC
,提高了效率。
并且减少角色,进一步简化流程。
Raft
Raft
- 将算法划分为三个子问题:
- Leader Election
- Log Replication
- Safety
- 重定义角色
- Leader
- Follower
- Candidate
实现案例 —— Etcd
Zab
基本与 Raft
相同,实现有些许不同:如 Raft
的心跳方向为 Leader
至 Follower
,Zab
则相反。
实现案例 —— ZooKeeper