chandy-lamport 分布式一致性快照 算法详细介绍
在一个分布式计算系统中,为了保证数据的一致性需要对数据进行一致性快照。Flink和spark在做流失计算的时候都借鉴了chandy-lamport算法的原理,这篇文章就是对chandy-lamport算法原理的详细介绍。
考虑一个分布式计算系统。

其中有两个节点,也就是两个进程,p和q,s0,s1对应的是两个状态。token是一个令牌,全局只有一个,进程之间互相发送令牌。s0对应的状态就是进程不持有令牌,s1对应的状态就是进程持有令牌。两个进程间的连线代表消息队列,token有可能处于消息队列之中,这时候两个进程都不拥有令牌,也就是都是s0状态。这个分布式系统就这件循环地传送令牌。
由于进程是可能崩溃的,我们需要保证在进程崩溃重启后,系统仍然能够正常运行,或者说我们要从某个检查点恢复程序的运行状态,这时就需要将系统在某个时间点的状态保存起来。也就是说我们需要对分布式系统进行一次快照存储,保存每个节点在当时的状态以及每个消息队列在当时的状态。举个例子,假如在上图右上角的时刻对系统进行一个快照存储,那么对应的状态就是:
| p | s0 |
| q | s0 |
| p->q | token |
| q->o | empty |
假如程序在此时崩溃了,那么在重启之后,就可以恢复到保存的快照状态继续执行。
可是由于p和q是两个进程,时间不同步,假如p进程在发送token之后进行了快照存储,q进程在p发送token之前进行快照存储,那么就会出现这种情况:
1:p进程保存快照的时候由于p进程已经发送了token,token在q进程的队列中,所以p进程保存快照时认定token不在p进程也不在p进程的接收队列中。
2:q进程保存快照时由于比p进程早一些,此时p进程还没有发送token,因此q进程认定token不在q进程也不在q进程的接收队列中。
这样保存的全局快照里发现token消失不见了。
为了解决这问题,chamdy-lamport算法提出了marker消息的概念:

在上图右上角中p发送完token后发起一次快照,发送marker给q,q接收到marker消息,保存本地状态,由于队列FIFO,所以q接收marker消息时肯定已经接收到了token,所以q保存自己状态为s1,保存p->q状态为empty,然后q发送marker给p,p接收到marker,检查在p保存状态后有没有收到q的消息,由于没有收到,所以保存q->p队列的状态为空。到此一轮快照保存结束,全局的状态为:
| p | s0 |
| q | s1 |
| p->q | empty |
| q->p | empty |
这个全局状态就对应的是上图右下角的状态,此时全局的一致性状态保存成功。
以上只是一个简单的例子,实际上chandy-lamport对算法的正确性有严格的公式推导,感兴趣可以参考https://lamport.azurewebsites.net/pubs/chandy.pdf
chandy-lamport 分布式一致性快照 算法详细介绍的更多相关文章
- 分布式一致性hash算法
写在前面 在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念.而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储. ...
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明 (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...
- 分布式 一致性Paxos算法(转载)
比较通俗易懂,可以入门,转载地址是http://www.cnblogs.com/linbingdong/p/6253479.html Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有 ...
- ASE加解密算法详细介绍
AEC扫盲主要增对CBC模式做详细讲解: https://blog.csdn.net/qq_28205153/article/details/55798628 AEC其他几种模式详细介绍 https: ...
- memcache分布式 [一致性hash算法] 的php实现
最近在看一些分布式方面的文章,所以就用php实现一致性hash来练练手,以前一般用的是最原始的hash取模做分布式,当生产过程中添加或删除一台memcache都会造成数据的全部失效,一致性hash就是 ...
- 分布式缓存技术memcached学习(四)—— 一致性hash算法原理
分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...
- 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理
分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前, ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...
随机推荐
- Procedure-Function oracle
说明:SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 0.调试 点击procedure名,右键选择调试.即可进入调试模式.找到procedu ...
- Maven 异常
Archive for required library: '*****org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA.jar' in pr ...
- HIBERNATE知识复习记录3-关联关系
先上一张图,关于几种关系映射: 抄一段解释: 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.关联关系分为上述七 ...
- ID3、C4.5和cart算法比较(转)
转自:https://www.zhihu.com/question/27205203
- 132. Palindrome Partitioning II (String; DP)
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- android mapView
1.Because the Maps library is not a part of the standard Android library, you must declare it in the ...
- ArrayList LinkList比较
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayLi ...
- 13-前端不通路径同一个请求访问同一个页面时,有时样式没有加载出来(jss,image,css)
通过如下方式访问同一个网站时,下面一个可以加载样式,而下面一个加载的页面却没有样式,思考良久没有想通,当时也忘记了用浏览器看下 css,js,image的请求路径,其实在前端页面里面我直接: 这样引 ...
- 使用jsonp跨域发送请求
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型. 使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面. ...
- iOS.ObjC.Basic-Knowledge
1. ObjC的基础 2. ObjC2.0中的编译指令 3. ObjC Runtime 4. ObjC Object Model 5. ObjC的新语法 6. FQA 1. ObjC的基础 2. Ob ...