暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库|逻辑时钟的重要作用

DigOps 2022-04-08
458

微信号:digops

加关注哦


提起Leslie Lamport在分布式系统方面可谓大名鼎鼎,比较出名的《拜占庭将军问题》就是其发表内容之一,最近看其1978年发表的《Time, Clocks and the Ordering of Events in a Distributed System》论文,虽然不能完全理解,但从谷歌spaner,cockroachdb等发表的一些关于分布式数据库的线性一致性、Truetime、混合逻辑时钟(HLC,Hyper Logic Clocks)可以看到都是借鉴了Lamport逻辑时钟和物理时钟的实现原理。



1. 逻辑时钟介绍

        逻辑时钟的叫法是相对我们生活中的物理时钟而言,物理时钟所记录的时间是客观真是存在的,是与我们生活息息相关,是生活的参考系,不带有任何连带关系。


        逻辑时钟的诞生,是为了分布式的世界,去解决happen before的问题,即因果问题。也就是在分布式的世界内部,只存在两种关系,因果关系和非因果关系(非因果关系,也称之为平行关系)。


        因果关系一定是作用在多个事件上,如事件a发生于事件b之前,这不局限于一个系统内的多个进程,也可以是多个系统之间。这种关系成立在Lamport论文中是需要满足两个条件的:

  • 条件一(C1):如果事件a、b在一个进程Pi中,a发生于b之前,那么a事件的逻辑时钟就小于b的逻辑时钟,通过C(a)<C(b)来表达;(发生在一个系统下的单进程)

  • 条件二(C2):如果a是进程Pi发送一条消息的事件,b是进程Pj接受这条消息的事件,那么C(a)<C(b);(发生在多个系统之间或单系统中多个进程间)



这里需要补充两点:

  1. 这种关系具有传递性、自反性、反自反性、对称性、反对称性。

  2. 因此:若a->b且b->c,那么a->c;若a(!->)b且b(!->)a,那么ab是平行发生的。


2. 逻辑时钟的作用


        从上面介绍可知,Lamport逻辑时钟是能保证英国关系的正确性的,能否用物理时钟直接实现呢?答案是不可以,首先我们的一个大前提是分布式系统上,这就涉及跨越多个系统来协调处理,每个系统都有自己独立的本地时钟,时钟的产生是与CPU有关,需要通过CPU的计时器,这又与CPU的主频有关,很难让所有CPU的主频达到一致,因此跨越不同的系统就会产生一定的时间偏移。服务器之间实际上是可以通过NTP进行同步的,但很多场景下仍然无法达到精度要求,从实际Google的truetime方式实现的物理时钟可以看到,其仍然有7ms的误差,且实现难度并不是一般企业能承受的。


        通过Lamport逻辑时钟,可以在分布式系统中解决分布式锁问题,这也是Lamport论文中给出的答案,包括线性一致性理论。


3. 只有逻辑时钟是否可以?


答案是不可以的.


        逻辑时钟只解决了逻辑上的因果关系,也就是对事件进行全序,但除了happen before,我们还有很多事件是基于物理时钟的因果关系,缺少物理时钟也是不科学、不完整的。目前主流的分布式时钟有三种:谷歌基于Truetime实现的物理时钟,很多分布式厂商通过逻辑时钟和物理时钟结合的混合逻辑时钟(HLC,Hybrid Logical Clocks)以及全局发号器( TSO ,Timestamp Oracle)。理论上来说物理时钟也是逻辑时钟的一种特例。



      

文章转载自DigOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论