基础内容

定义:确保系统中的数据在任何时候都是一致的

关键概念

  • 强一致性(Strong Consistency):所有节点在同一时间看到的数据是相同的
    • 实现方式
      • 同步更新:每次写操作都会同步更新所有副本,确保所有节点数据一致
      • 读操作的一致性:无论在哪个节点进行读操作,都能立即获得最新的数据
      • 严格的顺序:读写操作严格按照顺序执行,确保数据的一致性
    • 实现技术
      • 分布式数据库:通过分布式事务和同步复制实现强一致性。工具:Google Spanner, CockroachDB
      • 共识算法:使用共识算法确保所有节点达成一致。算法:Paxos, Raft
  • 最终一致性(Eventual Consistency):在没有新的更新的情况下,所有节点最终会达到一致的状态
    • 实现方式
      • 异步更新:写操作异步传播到其他节点,各节点的数据可能在短时间内不一致
      • 容忍短暂不一致:系统允许在短时间内存在数据不一致,但最终会达到一致状态
      • 高可用性:相比强一致性,最终一致性系统具有更高的可用性和性能
    • 实现技术
      • 异步复制:数据更新异步复制到其他节点。工具:Amazon DynamoDB, Cassandra
      • 矛盾解决机制:使用冲突检测和解决机制来处理数据不一致。算法:Vector Clocks, Conflict-Free Replicated Data Types (CRDTs)
  • CAP定理(CAP Theorem):一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者不可兼得
    • 定义
      • 一致性(Consistency):所有节点在同一时间看到的数据是相同的
      • 可用性(Availability):每个请求都能收到非错误响应,但不保证返回最新的数据
      • 分区容错性(Partition Tolerance):系统在网络分区发生时仍能继续运行
    • CAP三选二:在分布式系统中,只能同时满足一致性、可用性和分区容错性中的两项,不能同时满足三者
      • CA(一致性+可用性)
        • 放弃分区容错性,适用于单机系统或对网络分区容忍度低的场景
        • 比如:传统关系型数据库(单机部署)
      • CP(一致性+分区容错性)
        • 放弃可用性,确保数据一致性和分区容错性,适用于数据一致性要求高的场景
        • 工具:HBase, MongoDB(在强一致性配置下)
      • AP(可用性+分区容错性)
        • 放弃一致性,确保系统高可用性和分区容错性,适用于高可用性要求高的场景
        • 工具:Cassandra, DynamoDB

保证一致性常用技术方案

  • 分布式事务:确保跨多个节点的数据一致性
    • 二阶段提交(2PC)
    • 三阶段提交(3PC)
  • 数据复制:通过复制确保数据一致性
    • 主从复制
    • 多主复制
  • 一致性哈希(Consistent Hashing):一种分布式哈希技术,减少数据迁移