0%

数据一致性

数据一致性

数据一致性的问题其实是对分布式事务的另一种解释,分布式事务就是希望在多级环境下可以像单机一样实现强一致性,但是这种强一致性付出的代价很大,而在很多场景下,其实是不需要做到强一致性的,只要最终一致就行。

这里来了解一下数据一致性的基础理论CAP和BASE

CAP

CAP表示三个单词,Consistency、Availability、Partition-Tolerance,这里就三个单词分别进行说明

  • Consistency 所有的节点在同一时间读到同样的数据,也就是数据的一致性,当数据写入成功后,所有的节点会同时看到这个新的数据
  • Availability 保证无论成功还是失败,每个请求都能够在有限的时间内收到一个反馈,也就是数据的可用性
  • Partition-Tolerance 分布式系统在遇到任何网络分区故障时,仍需要保证对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障

分布式系统中的各个节点在不同的网络中,这意味着必然会有网络断开的风险,所以网络分区肯定无法避免。

在网络分区发生时,两个分布式节点之间无法进行通信,我们对一个节点进行的修改操作将无法同步到另外一个节点,就导致了一致性无法满足,除非我们牺牲可用性,暂停分布式节点服务,在网络分区发生时,不再提供修改数据的功能,直到网络状况完全恢复正常再继续对外提供服务。

在系统中,我们不能够同时满足上述三项,只能满足两项

  • CA 放弃分区容忍性,加强一致性和可用性,也就是传统的单机架构,放弃P也就放弃了可扩展性
  • AP 放弃一致性,追求分区容忍性以及可用性。这里是指放弃强一致性,使用最终一致性,不等待复制完成,只在主分片写完后直接返回
  • CP 放弃可用性,追求一致性和分区容忍性。如果遇到网络分区问题或其他故障时,复制操作可能会被延后,受到影响的服务需要等待一段时间,导致无法在有限的时间内返回数据,失去了可用性

BASE

通过牺牲强一致性来获得可用性

  • Baseically Available 基本可用,允许分区失败
  • Soft state 软状态,接受一段时间的状态不同步,即允许系统在不同节点的数据副本之间进行数据同步时的过程存在延时
  • Eventually consistent 最终一致,保证在经过一段时间的同步后,最终能够达到一个一致的状态

欢迎关注我的其它发布渠道