lamport vs vector clock

基本概念可以查看下面的参考链接

Lamport Lock

一张图表示自己的理解:

lamport clock.jpeg

Vector clock

上图可以看出,ta<tb并不能推出a happens before b
vector clock的引进就是来解决这个问题的

vector clock.jpeg

简单比较

1.如何比较大小?

vector clock:
vp<vq 如果 vp[i] < vq[i] 对所有i均成立
存在i 使得vp[i] < vq[i] and 存在j 使得 vp[j]>vq[j]那么就是并发的
lamport clock:
(p,i)<(q,j)如果i<j;(p,i)<(q,i)如果p<q
2、全序?偏序?
vector clock 是偏序关系;lamport clock是全序关系

应用

那么这么一个算法本质上是为了给分布式系统提供全局的逻辑时钟,保证各个副本执行的操作是一样的。
再举例之前,先做几点说明:
1、参考原始论文的5条规则(参考链接1)

1.首先,每个进程会维护各自在本地维护一个请求队列。算法是由如下5个规则定义的。方便起见,每条规则定义的行为会被做为一个独立事件。
为请求该项资源(在这个问题中,资源就是日志服务器),进程Pi发送一个(Tm,Pi)
2.资源请求消息给其他所有进程,并将该消息放入自己的请求队列,在这里Tm代表了消息的时间戳
3.当进程Pj收到(Tm,Pi)资源请求消息后,将它放到自己的请求队列中,并发送一个带时间戳的确认消息给Pi。(注:如果Pj已经发送了一个时间戳大于Tm的消息,那就可以不发送)
4.释放该项资源时,进程Pi从自己的消息队列中删除(Tm,Pi)资源请求,同时给其他所有进程发送一个带有时间戳的Pi资源释放消息
5.当进程Pj收到Pi资源释放消息后,它就从自己的消息队列中删除(Tm,Pi)资源请求
当同时满足如下两个条件时,就将资源分配给进程Pi:
(i)按照“=>”关系排序后,(Tm,Pi)资源请求排在它的请求队列的最前面
(ii)Pi已经从所有其他进程都收到了时间戳>Tm的消息

2、在利用Lamport Timestamp实现全序组播时,要遵循如下假设:

(1)进程Pj在接收进程Pi的消息时,Pj对消息的接收顺序与Pi发送消息的顺序一致
(2)任何传输的消息不会丢失

例子:

一个等价的问题就是如何在分布式系统下实现全序组播(totally-ordered mulitcast)。这个可以利用Lamport提出的逻辑时钟实现。

  保证全序组播的具体算法为:

  每一个进程都维护一个本地请求队列(Request Queue),此队列里的消息按时间戳排序。

进程Pi给消息m加上时间戳Ti(m),并广播给所有进程(包括Pi);
进程Pj接收到消息m后,首先更新本地逻辑时钟,并把消息m加入请求队列,然后向
所有进程(包括Pj)广播接收到消息m的确认信息ACK。

当进程的请求队列中的某个消息位于队列顶部,且已经收到所有进程关于此消息的
确认信息ACK时,可以把此消息从队列顶部取走,并传给应用程序。

  上述算法结合假设,可以证明所有进程都按相同的顺序执行一组操作。

  证明中的关键点:

  当进程Pi收到所有关于消息m的确认信息ACK时,

       首先,可以确认其他进程已经收到了消息m;

       其次,可以确认其他进程中“在关于消息m确认信息ACK之前发的消息”进程Pi都
已接收(这个可以从假设得到)。这表明如果存在需要在消息m之前执行的消息,
进程Pi已经接收了,否则与假设矛盾。结合消息的执行条件,就能保证消息m不会
被提前执行。

       最后,由于每个进程是等价的,所以每个进程的请求队列都是一致的。

例子2:

其实logic clock要解决的问题就是多点共同更新的问题,每个节点都保存有完整数据,所以操作要全局同步。
比如,lamport clock就是保证每个节点的任务队列的一致性,当然原始paper有一些假设和规则来达到这个目的,不过思想是没问题的。
比如上面的例子同样适用于多点更新(如银行数据),只需要利用上面算法保证每个节点事务执行的顺序就行了

小结

  1. 可以看出,上述算法都是固定的线程数
  2. 如果有一个hang住了,系统会阻塞
  3. 解决的是最终一致性问题
  4. 关于vector的应用优势:

vector clock是logic clock的一种,并且是目前被证明的能精确进行冲突检测的最有效的数据结构(有没有更有效的?答案是有,后面会介绍,但是精确度会下降).它的原理就是所有允许写入的节点维护一个counter,每次本地提交的动作会导致value+1并把这个值由本次操作携带,同步到其他节点去.远端节点在收到请求后也会为该操作分配一个本节点最新的counter.所以某个操作会在N-master集群中得到一个N个值的数组,只有当所有节点上的操作A的counter都小于对应节点上操作B的counter的时候才认为他们具有明确的happen-before,否则视为冲突.
而我们所说的Lamport clock是一种scalar clock,可以决定时序,但是任何的scalar clock并不能检测冲突.因为counter(A)<counter(B)并不能要求A操作先于B.所以在Lamport clock中即使产生并发,也有可能是有序的,无法检测到.这是dynamo系统不允许发生的,所以这类系统会考虑使用vector clock.
vector clock有一个很大的缺点是不够高效,因为N-master集群需要N个元素来做判断,这对于集群的拓展会有损害.对于消息传递需要携带过多的payload也是不小的开销.这时候又出现了一种plausible clocks,可以在常量个vector元素的情况下,很高概率检测出来冲突,但并不是100%.但是这种模型只适合用于对于并发进行排序会提升效率的系统中,而不是影响正确性的系统中.

参考

Lamport大师的论文
Seif Haridi
logical clock lmaport vector-一个简单的pdf教程
国人解释-可以参考
分布式系统一致性系列

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 前言在一个分布式系统中存在着各种各样的并发事件,对于某些存在内在因果关系的事件需要知道事件的先后顺序,并且能够按照...
    UCloud云计算阅读 606评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,363评论 25 707
  • 磨人的秋季招聘终于结束了,首先说下自己拿到的几个offer,百度java研发(北京),华为云计算(杭州),招银网络...
    happyte阅读 1,088评论 4 4
  • 全书以西藏佛苯宗教之争的历史背景为暗线,以卓木强巴追寻紫麒麟为明线,讲述了其及一帮生死之交历尽千辛万苦去寻找西藏失...
    依米Nina阅读 807评论 0 1
  • 本人参与#漫步青春#征文活动,作者:戴紫珊,本人承诺,文章内容为原创,且未在其他平台发布。+那一双人+
    萤火而今飞破秋夕阅读 251评论 0 0