Skip to content

分布式理论

CAP 定理

           ┌─────────────────────────────────────┐
           │           CAP Theorem              │
           └─────────────────────────────────────┘

        ┌───────────────────┼───────────────────┐
        ▼                   ▼                   ▼
  ┌──────────┐        ┌──────────┐        ┌──────────┐
  │Consistency│        │Availability│      │Partition │
  │  一致性   │        │  可用性   │      │ tolerance│
  └──────────┘        └──────────┘      │ 分区容错  │
                                        └──────────┘
     不能同时满足三个,最多满足两个
组合说明代表
CA一致性 + 可用性单机数据库
CP一致性 + 分区容错MongoDB、HBase、Redis 集群
AP可用性 + 分区容错Cassandra、Eureka

BASE 理论

  • Basically Available:基本可用
  • Soft state:软状态
  • Eventually consistent:最终一致性

分布式一致性协议

2PC (两阶段提交)

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  协调者      │────▶│  参与者1     │     │  参与者2     │
└─────────────┘     └─────────────┘     └─────────────┘
       │                                      │
       │            阶段一:投票              │
       ├──────────────────────────────────────┤
       │           request_prepare           │
       │──────────────────────────────────────│
       │                                      │
       │◀─────────────────────────────────────│
       │          response_vote               │
       │                                      │
       │            阶段二:提交              │
       ├──────────────────────────────────────┤
       │           request_commit            │
       │──────────────────────────────────────│
       │                                      │
       │◀─────────────────────────────────────│
       │         response_commit              │

问题:同步阻塞、单点故障、数据不一致

3PC (三阶段提交)

阶段一:CanCommit      → 询问是否能提交
阶段二:PreCommit      → 预提交
阶段三:DoCommit       → 真正提交

Paxos 算法

用于实现分布式系统中的一致性共识。

角色

  • Proposer(提议者)
  • Acceptor(接受者)
  • Learner(学习者)

流程

  1. Prepare 阶段:提议者提出提案
  2. Promise 阶段:接受者承诺不再接受旧提案
  3. Accept 阶段:提议者发送 Accept 请求
  4. Accepted 阶段:接受者接受提案

Raft 算法

Raft 是 Paxos 的简化实现,角色包括:

  • Leader(领导者)
  • Follower(跟随者)
  • Candidate(候选人)

领导选举

                    ┌─────────┐
                    │ 选举    │
                    │超时后   │
                    └────┬────┘


┌─────────┐   成为候选人   ┌───────────┐
│ Follower│──────────────▶│ Candidate │
└─────────┘               └─────┬─────┘
     │◀─────── heartbeat ───────┤
     │                          │
     │         ┌───────────────┼───────────────┐
     │         │               │               │
     │    获得多数票         收到新Leader    选举超时
     │         │               │               │
     │         ▼               ▼               ▼
     │   ┌─────────┐     ┌───────────┐     ┌───────────┐
     │   │  Leader │     │  Follower │     │ Candidate │
     │   └─────────┘     └───────────┘     └───────────┘

一致性哈希

java
// 一致性哈希环
public class ConsistentHash {
    private final SortedMap<Long, String> circle = new TreeMap<>();

    // 添加节点
    public void addNode(String node) {
        for (int i = 0; i < VIRTUAL_NODES; i++) {
            long hash = hash(node + "#" + i);
            circle.put(hash, node);
        }
    }

    // 获取节点
    public String getNode(String key) {
        if (circle.isEmpty()) return null;
        long hash = hash(key);
        SortedMap<Long, String> tail = circle.tailMap(hash);
        return tail.isEmpty() ? circle.firstEntry().getValue()
                               : tail.firstEntry().getValue();
    }
}

总结

  1. CAP 定理:一致性、可用性、分区容错不可兼得
  2. BASE 理论:最终一致性方案
  3. 一致性协议:2PC、3PC、Paxos、Raft
  4. 一致性哈希:解决节点增减问题

基于 VitePress 构建