分布式系统中的一致性,与数据库的隔离级别

Posted zcan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式系统中的一致性,与数据库的隔离级别相关的知识,希望对你有一定的参考价值。

一致性,是描述多副本的同步特征(本文我们不讨论分布式数据库中,保持多个分片里的数据在业务逻辑上一致性的情况,仅讨论数据多副本的case)。一般从两个角度来研究:

从全局数据角度来看:

    1. 强一致性: 无论谁、无论何时读,得到的都是最新写入后的结果
    2. 线性一致性: 如果把读写操作按照严格时间戳排序,每个进程的读写都遵循该排序的结果
    3. 顺序一致性: 每个进程的读写操作顺序都一致,但不保证按照时间戳顺序
    4. 因果一致性: 两个有因果关系(读写了同一数据)的进程之间,读写顺序都一致,不保证按照时间戳顺序,而且无关的进程读写顺序可以不一样
    5. 一般一致性: 就是传统意义上的最终一致性,各副本上的数据最终是同一个值

从某个客户端角度来看:

    1. 写后读:同一个客户端,不论在哪里读写,写入后,读出来的总是不旧于刚刚的写入
    2. 读后写:同一个客户端,不论在哪里读写,读出后,写进去的总是在刚才读出的数的基础上(可能比读出的更加新的基础上)
    3. 单调读:同一个客户端,不论在哪里读,每次读出的都不旧于上次读出的
    4. 单调写:同一个客户端,不论在哪里写,每次写入的都是在上次写入基础上(可能比上次写入的更加新的基础上)
    5. 最终一致:同一个客户端,不论在哪里读写,做了若干次读写、经过一段时间后,看到一个稳定不变的值

这两个角度并不是一一对应的关系。比如,全局数据角度的“强一致性”,要比“客户端角度”的写后读更强,因为可能有多个客户端在并发运行。我们给一个商业应用设计架构的时候,更多是从客户端视角来看问题的。

 

隔离级别,是研究事务之间数据的可见关系,讨论的是“并行的写入过程中、或者有的已写入(提交)而有的尚未真正写入(未提交)这个过程中”发生的事情;而一致性研究的是大家在都写入后发生的事情,而忽略写入过程、将其看做原子操作。隔离级别跟一致性是正交的关系。

以上是关于分布式系统中的一致性,与数据库的隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

分布式事务实现-Percolator

事务隔离级别,分布式数据库,ACID,CAP

MySQL/MariaDB中的事务和事务隔离级别

Spring事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

Spring事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

分布式与微服务面试题