分布式系统CAP理论与BASE理论 CAP定理 核心定义 分布式系统无法同时满足以下三个特性: Consistency(一致性) 所有节点在同一时间看到相同的数据 强一致性:线性一致性、顺序一致性 弱一致性:最终一致性、因果一致性 Availability(可用性) 每个请求都能得到响应 不管节点是否故障 响应时间在可接受范围内 Partition Tolerance(分区容错性) 系统在网络分区时仍能继续运行 网络故障是常态,必须容忍 P是分布式系统的基本要求 CAP取舍 组合 | 特点 | 典型系统 CA | 放弃分区容错 | 单机数据库、RDBMS CP | 放弃可用性 | HBase、MongoDB、Redis AP | 放弃强一致性 |
分布式系统无法同时满足以下三个特性:
Consistency(一致性)
Availability(可用性)
Partition Tolerance(分区容错性)
| 组合 | 特点 | 典型系统 |
|---|---|---|
| CA | 放弃分区容错 | 单机数据库、RDBMS |
| CP | 放弃可用性 | HBase、MongoDB、Redis |
| AP | 放弃强一致性 | Cassandra、Dynamo、CouchDB |
CP系统:HBase
// 强一致性读取 Get get = new Get(Bytes.toBytes("row1")); Result result = table.get(get); // 阻塞直到一致性保证
AP系统:Cassandra
// 配置一致性级别 statement.setConsistencyLevel(ConsistencyLevel.QUORUM); // ANY、ONE、QUORUM、ALL、LOCAL_QUORUM
Basically Available(基本可用)
Soft state(软状态)
Eventually consistent(最终一致性)
| 维度 | CAP | BASE |
|---|---|---|
| 一致性 | 强一致 | 最终一致 |
| 可用性 | 部分场景 | 始终可用 |
| 理论基础 | 定理 | 思想 |
| 适用场景 | 金融、交易 | 社交、内容 |
Basic Paxos
Multi-Paxos
领导者选举
type NodeState int const ( Follower NodeState = iota Candidate Leader ) func (n *Node) RequestVote(args *RequestVoteArgs) { if n.term < args.term { n.term = args.term n.state = Follower n.votedFor = args.candidateId } // 投票逻辑 }
日志复制
安全性保证
// Phase 1: Prepare transactionManager.prepare(); if (allParticipantsReady) { // Phase 2: Commit transactionManager.commit(); } else { transactionManager.rollback(); }
问题:阻塞、单点故障
减少阻塞时间,但性能更差。
// 定义事务步骤 const saga = [ { action: () => createOrder(), compensate: () => cancelOrder() }, { action: () => reserveInventory(), compensate: () => releaseInventory() }, { action: () => processPayment(), compensate: () => refundPayment() } ] // 执行Saga async function executeSaga(steps) { const executed = [] try { for (const step of steps) { await step.action() executed.push(step) } } catch (error) { // 补偿已执行的步骤 for (const step of executed.reverse()) { await step.compensate() } } }
# 分布式键值存储 etcdctl put /config/database/host "localhost" etcdctl get /config/database/host