一致性

什么是 CAP

  • Consistent
    • 一致性
      • 同样的数据在分布式系统中所有地方都是被复制成相同的。
  • Available
    • 可用性
      • 所有在分布式系统活跃的节点都能处理操作且响应查询。
  • Partition Tolerant
    • 分区容错性
      • 在两个复制系统之间,如果发生了计划之外的网络连接问题,有一套容错性设计来保证。

CAP 是分布式系统中进行平衡的理论。一般情况下,CAP 理论任务你不能同时拥有上述三种,只能同时选择两种。

数据一致性

复制是导致出现数据一致性问题的唯一原因

强一致性(线性一致性)和弱一致性

  • 强一致性
    • 系统中的某个数据被成功更新后,后续任何对于该数据的读操作都将得到更新后的值。简而言之就是,在任意时刻,所有节点的数据是一样的。
      • 写时复制,复制是同步的。主库需要等待从库的确认,确认从库已经收到写入操作。
      • 缺点是,保证了强一致性,必然会损耗可用性。
  • 弱一致性
    • 复制是异步的。不需要等待从库响应。

半同步概念

使一个从库保证和主库是强一致性,其他从库保持弱一致性。如果强一致性从库出现问题,则使另一个从库和主库保持强一致性。这样可以确保永远有两个节点拥有完整数据。

最终一致性

是弱一致性的特殊形式,存储系统在保证没有新的更新的条件下,最终所有的访问都是最后最新更新的值。不保证在任意时刻任意节点上的同一份数据是相同的,但随意时间的推移,不同节点上的同一份数据总是在向趋同的方向变化。

读写一致性

事务一致性(ACID)

  • Atomic
    • 原子性
      • 一个事务的所有操作步骤应被看成一个动作,所有步骤要么全部完成,要么全部失败。
  • Consistent
    • 一致性
      • 数据库的约束、级联和触发机制都必须满足事务一致性。不能发生表与表之间存在外键约束,但有的数据却违背了这种约束性。
  • Isolated
    • 隔离性
      • 主要用于实现并发控制,隔离能够保证并发执行的数据顺序执行,事务之间不相互影响。
  • Durable
    • 持久性
      • 一个事务一旦提交,他就应该被持久保存,不会因为和其他操作冲突而取消这个事务。

分布式一致性算法(Raft)

从 Candidate 选举 Leader
选举任期 Term

如果 Leader 节点故障,重新选举。

Leader 心跳消息 ——> Follower 处理/存储心跳日志 ——> 应答 Leader

参考文章1
参考文章2