分布式系统CAP理论与BASE理论


文档摘要

分布式系统CAP理论与BASE理论 CAP定理 核心定义 分布式系统无法同时满足以下三个特性: Consistency(一致性) 所有节点在同一时间看到相同的数据 强一致性:线性一致性、顺序一致性 弱一致性:最终一致性、因果一致性 Availability(可用性) 每个请求都能得到响应 不管节点是否故障 响应时间在可接受范围内 Partition Tolerance(分区容错性) 系统在网络分区时仍能继续运行 网络故障是常态,必须容忍 P是分布式系统的基本要求 CAP取舍 组合 | 特点 | 典型系统 CA | 放弃分区容错 | 单机数据库、RDBMS CP | 放弃可用性 | HBase、MongoDB、Redis AP | 放弃强一致性 |

分布式系统CAP理论与BASE理论

CAP定理

核心定义

分布式系统无法同时满足以下三个特性:

Consistency(一致性)

  • 所有节点在同一时间看到相同的数据
  • 强一致性:线性一致性、顺序一致性
  • 弱一致性:最终一致性、因果一致性

Availability(可用性)

  • 每个请求都能得到响应
  • 不管节点是否故障
  • 响应时间在可接受范围内

Partition Tolerance(分区容错性)

  • 系统在网络分区时仍能继续运行
  • 网络故障是常态,必须容忍
  • P是分布式系统的基本要求

CAP取舍

组合 特点 典型系统
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

BASE理论

核心思想

Basically Available(基本可用)

  • 允许部分失败
  • 降级服务
  • 核心功能优先

Soft state(软状态)

  • 数据随时间变化
  • 允许中间状态
  • 不要求实时一致

Eventually consistent(最终一致性)

  • 给定时间后数据一致
  • 无固定时间保证
  • 需要冲突解决机制

CAP vs BASE

维度 CAP BASE
一致性 强一致 最终一致
可用性 部分场景 始终可用
理论基础 定理 思想
适用场景 金融、交易 社交、内容

分布式一致性协议

Paxos

Basic Paxos

  • Phase 1:Prepare/Promise
  • Phase 2:Accept/Accepted

Multi-Paxos

  • 优化性能,减少Prepare阶段
  • Leader选举
  • 日志复制

Raft(推荐)

领导者选举

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 } // 投票逻辑 }

日志复制

  1. Leader接收客户端请求
  2. 追加到本地日志
  3. 并行复制到Follower
  4. 多数确认后提交

安全性保证

  • 日志完整性
  • 领导者完整性
  • 领导者完全性

ZAB(ZooKeeper)

  • 原子广播协议
  • 支持崩溃恢复
  • 顺序一致性保证

分布式事务

2PC(两阶段提交)

// Phase 1: Prepare transactionManager.prepare(); if (allParticipantsReady) { // Phase 2: Commit transactionManager.commit(); } else { transactionManager.rollback(); }

问题:阻塞、单点故障

3PC(三阶段提交)

  • CanCommit
  • PreCommit
  • DoCommit

减少阻塞时间,但性能更差。

Saga模式

// 定义事务步骤 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() } } }

分布式共识应用

etcd(Kubernetes后端)

# 分布式键值存储 etcdctl put /config/database/host "localhost" etcdctl get /config/database/host

Consul

  • 服务发现
  • 健康检查
  • KV存储

Nacos

  • 动态服务发现
  • 配置管理
  • 服务健康监测

最佳实践

  1. 明确需求:根据业务选择一致性级别
  2. 重试机制:指数退避,避免雪崩
  3. 超时控制:设置合理超时时间
  4. 熔断降级:Hystrix、Sentinel
  5. 监控告警:分布式追踪、日志聚合

发布者: 作者: 转发
评论区 (0)
U