分布式数据库中时钟偏差问题:spanner VS cockroachDB

2022-06-02 00:00:00 事务 时间 提交 线性化 读到

在分布式环境中,各个节点所观察到的时间不一致被认为是正常的,它会破坏分布式数据库的一致性,本篇文章将先对Linearizability概念进行讲解,它是评判数据库一致性模型的重要标准,并说明为什么时钟偏差会打破线性化。之后我将对非常容易和Linearizability搞混的Serializatbility进行说明。后,将解析spanner和cockroachDB是如何解决时钟偏差问题的。

Linearizability

Linearizability并不是一个数据库专属的概念,Linearizability原本指的是在并发系统中,进程可以同时访问一个共享对象。由于多个进程正在访问单个对象,因此可能会出现这样一种情况,即当一个进程正在访问该对象时,另一个进程会更改其内容。使系统可线性化是解决这个问题的一种方法。在可线性化的系统中,尽管操作在共享对象上重叠,但每个操作似乎都是瞬间发生的。线性化是一个很强的正确性条件,它限制了当多个进程同时访问一个对象时可能的输出。它是一种安全属性,可确保操作不会以意外或不可预测的方式完成。如果系统是可线性化的,它允许程序员对系统进行推理。也就是说我们可以将并发的程序历史重新排序成一个或多个没有并发的顺序发生的历史,原始历史只能等效于其中的一个重排的历史则称其为可线性化的。

例1

thread1 :         IA1----------RA1                  
thread2 :          |      IB1---|-----RB1     IC2--------RC2   
                   |       |    |       |       |          |        
                   |       |    |       |       |          |        
real-time order:  IA1     IB1  RA1     RB1     IC2        RC2   
                --------------------------------------------------->time

相关文章