数据的一致性是什么?数据一致性解决方案概述

4747 3798 2023-06-14

本文讲述了数据的一致性是什么?数据一致性解决方案概述

数据的一致性是什么?数据一致性解决方案概述

数据一致性通常指关联数据之间的逻辑关系是否正确和完整,而数据存储的一致性模型则可以认为是存储系统和数据使用者之间的一种约定,如果使用者遵循这种约定,则可以得到系统所承诺的访问结果。

常用的一致性模型有:

a、严格一致性:

读出的数据始终为最近写入的数据。这种一致性只有全局时钟存在时才有可能,在分布式网络环境不可能实现。

b、顺序一致性:

所有使用者以同样的顺序看到对同一数据的操作,但是该顺序不一定是实时的。

c、因果一致性:

只有存在因果关系的写操作才要求所有使用者以相同的次序看到,对于无因果关系的写入则并行进行,无次序保证。因果一致性可以看做对顺序一致性性能的一种优化,但在实现时必须建立与维护因果依赖图,是相当困难的。

d、管道一致性:

在因果一致性模型上的进一步弱化,要求由某一个使用者完成的写操作可以被其他所有的使用者按照顺序的感知到,而从不同使用者中来的写操作则无需保证顺序,就像一个一个的管道一样。 相对来说比较容易实现。

e、弱一致性:

只要求对共享数据结构的访问保证顺序一致性。对于同步变量的操作具有顺序一致性,是全局可见的,且只有当没有写操作等待处理时才可进行,以保证对于临界区域的访问顺序进行。在同步时点,所有使用者可以看到相同的数据。

f、释放一致性:

弱一致性无法区分使用者是要进入临界区还是要出临界区, 释放一致性使用两个不同的操作语句进行了区分。需要写入时使用者acquire该对象,写完后release,acquire-release之间形成了一个临界区,提供 释放一致性也就意味着当release操作发生后,所有使用者应该可以看到该操作。

g、最终一致性:

当没有新更新的情况下,更新最终会通过网络传播到所有副本点,所有副本点最终会一致,也就是说使用者在最终某个时间点前的中间过程中无法保证看到的是新写入的数据。可以采用最终一致性模型有一个关键要求:读出陈旧数据是可以接受的。

h、增量一致性:

系统会在delta时间内达到一致。这段时间内会存在一个不一致的窗口,该窗口可能是因为log shipping的过程导致。

数据一致性分为多副本数据一致性和分布式事务数据一致性,两者的差别在于,多副本下不同节点之间的数据内容是一样的,而分布式事务下不同节点之间的数据内容是不一样的。数据多副本一般用于容灾及高可用,副本之间通过同步复制或者异步复制的方式达到数据一致。

事务提供了一种机制,将一个活动涉及的所有操作纳入一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下才能提交,其中任一操作执行失败,都将导致整个事务的回滚。按参与方的个数和性质,事务分为本地事务和分布式事务。

本地事务指数据库单机的事务处理,优点是支持严格的ACID特性:高效、可靠、状态可以只在资源管理器中维护、应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。一般的关系型数据库可以较好实现本地事务的ACID特性。

分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点上。简单来说,就是一次大的操作由不同的小操作组成,这些小操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

事务的参与方可能不仅是数据库,还包括消息队列、缓存、对象存储等其他异构的数据源,当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局的事务状态和参与的资源,协同资源的一致提交回滚。

在强一致性的分布式环境下,一次交易请求对多个数据源的数据执行完整性以及一致性的操作,满足事务的特性,要么全部成功,要么全部失败,保证原子性以及可见性。强一致性通过锁定资源的方式确保分布式并发下数据不会产生脏读脏写的情况,但以牺牲性能为代价。一般来说,强一致性的分布式事务会比单机的本地事务性能下降一个数量级左右,因此在实际应用场景中使用时,需要谨慎评估业务上是否一定要求强一致性事务,可否在业务上做一些取舍和折中,或者改为性能更强一点的最终一致性方案。

所谓强一致性,即复制是同步的;弱一致性,即复制是异步的。弱一致性主要针对数据读取而言,为了提升系统的数据吞吐量,允许一定程度上的数据“脏读”。某个进程更新了副本的数据,但是系统不能保证后续进程能够读取到最新的值。典型场景是读写分离,例如对于一主一备异步复制的关系型数据库,如果读的是备库(或者只读库),就可能无法读取主库已经更新过的数据,所以是弱一致性。

最终一致性不追求任意时刻系统都能满足数据完整且一致的要求,系统本身具有一定的“自愈”能力,通过一段业务上可接受的时间之后,系统能够达到数据完整且一致的目标。最终一致性有很多解决方案,如通过消息队列实现分布式订阅处理、数据复制、数据订阅、事务消息、尝试-确认-取消(Try-Confirm- Cancel,TCC)事务补偿等不同的方案。

上文就是小编为大家整理的数据的一致性是什么?数据一致性解决方案概述

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:事务篇:Spring事务的坑,你都踩过吗?
下一篇:一文详解幻读、脏读和不可重复读
相关文章