分布式一致性

网友投稿 776 2022-05-30

在计算机科学中,一致性模型(Consistency model)被用于分布式共享内存系统(DSM, distributed shared memory systems)或分布式数据存储(比如:文件系统,数据库,乐观复制系统或者网页缓存)这两大类分布式系统当中。如果对内存的操作满足特定的一致性规则,这个系统就被认为是支持这种一致性模型。数据一致性模型指的是程序员遵循某些规则,让内存数据保持一致,让读,写或更新内存这样的操作变得可预测。这不同于另一个一致性(coherence)概念,Coherence只出现在Cache Coherence 一词中,称为“缓存一致性”,研究的是多核场景,保证多核上的CPU缓存数据一致,一般是单机维度。

数据库事务的一致性

数据库管理系统在写入或更新资料的过程中,为了保证事务是正确可靠的,必须具备四个特性(ACID):原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)。这里的一致性指的是在事务开始之前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。ACID是传统数据库常用的设计理念,追求强一致模型。这个概念和数据库的数据是否多副本没有关系。

分布式理论中的一致性

在一个分布式系统中,一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)三者不可兼得,这个结论叫做CAP理论。这里的一致性指的是所有数据备份,在同一时刻是否具有同样的值。系统一般对外提供的有不同的一致性级别,不同的一致性级别限定了系统允许的操作执行顺序,越严格的一致性模型,意味着性能、可用性或者扩展性等有所损失。架构师Dan Pritchett提出了BASE理论,BASE理论是对CAP理论的延伸,其核心思想是即使无法做到CAP理论中的强一致性,但应用可以采用合适的方式达到最终一致性。  BASE是指基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency)。最终一致性是指系统中所有数据副本经过一定时间后,最终能够达到一致的状态。

强一致性(Strict consistency)

这是最严格的一种模型,采用全局时钟的约束,任何写操作都能立刻同步到其他所有进程,任何读操作都能读取到最新的修改。这是一种理想的模型,因为瞬时消息交换是不可能的。它解决不了并发写同一数据的冲突问题,因为这个模型的前提是假定并发写入是不可能的。

在强一致模型中,P1对x执行了写操作,P2就可以立即读到x的值为1;在非强一致模型中,P1对x执行了写操作,P2对x进行读的时候可能先读到的是初始值0,然后读到的是修改后的值1。

顺序一致性(Sequential consistency)

顺序一致性模型由Lamport 于1979年提出,这种一致性模型比强一致性模型要弱,采用分布式逻辑时钟实现,所有的进程以相同的顺序看到所有的写操作修改,但是读操作未必能及时读到其他进程对同一数据的写更新。顺序一致性可能会产生不确定的结果,因为在程序的不同运行期间,处理器之间的顺序操作顺序可能会有不同,所有内存操作都需要按照程序顺序执行。

分布式一致性

上图表示:P1对x执行了写操作,将x的值写为3,P2对x执行了写操作,将x的值写为了5,P2对x执行读操作的时候,读出的结果是3。由此可见,顺序一致性并不能保证读到的是最新的结果5。

因果一致性(Causal consistency)

因果一致性是一种弱化的顺序一致性,所有进程必须以相同的顺序看到具有潜在因果关系的写操作。不同进程可以以不同的顺序看到并发的写操作。

在第一个时刻,P1对x进行了写操作,将x的值写为1,P2,P3,P4对x进行读操作,读到的是1;在第二个时刻,P2对x进行了写操作,将x的值写为了2;在第三个时刻,P1将X的值写为了3,P3读的是P1写回后的结果3,P4读的是之前的结果2; 在第四个时刻,P3读取的结果是2,P4读取的结果是3。这里W(x)1和W(x)2就是因果相关,因为P2对X的读操作在P2对X的写操作之前发生。

最终一致性(Eventual Consistency)

各个节点的数据不一致,可以通过一系列的措施来进行更新补偿,最终达到一致性的要求。这个过程就是最终一致性。强调的是要求最终一致,不需要实时保证系统数据的强一致。

参考:

[1]https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

[2] https://en.wikipedia.org/wiki/Consistency_model?spm=a2c6h.12873639.0.0.71e375b9HP0WoA

[3] https://jepsen.io/consistency

云数据库 GaussDB(for MySQL)

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

上一篇:上亿条数据,如何查询分析简单又高效?
下一篇:整理一份可以让 Python 变得更快的工具清单
相关文章