分布式理论

CAP

Posted by ZYT on February 15, 2019

CAP Theorem

对于一个分布式系统,不能同时满足以下三点:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition Tolerance)

一致性模型

  • 弱一致性
    • 最终一致性
      • DNS
      • Gossip
  • 强一致性
    • 同步(主从同步)
    • Paxos
    • Raft
    • Zab

强一致性算法

Paxos

1. Basic Paxos

角色:

Basic Paxos

流程:

  1. CLIENTPROPOSER 发起请求;
  2. Prepare: PROPOSERACCEPTOR 提出提案,请求 ACCEPTOR 中的多数派同意;
  3. Promise: 如果提案的编号 N 小于目前 ACCEPTOR 接受的提案的编号,则 ACCEPTOR 拒绝接受,否则接受;
  4. Accept: 如果 ACCEPTOR 中的多数派接受请求,PROPOSER 发出 accept 请求,其中包含提案的编号 N 和提案内容;
  5. Accepted: 如果 ACCEPTOR 在此期间没有收到任何编号大于 N 的提案,则接受此提案内容,否则忽略。

潜在问题:

  1. 活锁:多个 PROPOSERACCEPTOR 递增提交提案,无法完成提案
  2. 难以实现
  3. 效率低(2 轮 RPC)

2. Multi Paxos

Multi Paxos 引入 PROPOSERLEADER,解决 Basic Paxos 的活锁问题,之后的请求只进行一次 RPC,提高了效率。

Multi Paxos

并且减少角色,进一步简化流程。

Multi Paxos 2

Raft

Raft

  • 将算法划分为三个子问题:
    • Leader Election
    • Log Replication
    • Safety
  • 重定义角色
    • Leader
    • Follower
    • Candidate

Raft 动画演示

Raft 场景测试

实现案例 —— Etcd

高可用分布式存储 etcd 的实现原理

Zab

基本与 Raft 相同,实现有些许不同:如 Raft 的心跳方向为 LeaderFollowerZab 则相反。

实现案例 —— ZooKeeper

详解分布式协调服务 ZooKeeper