在一个分布式计算系统中,为了保证数据的一致性需要对数据进行一致性快照。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 分布式一致性快照 算法详细介绍的更多相关文章

  1. 分布式一致性hash算法

    写在前面  在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念.而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储. ...

  2. 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点

    红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明   (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...

  3. 分布式 一致性Paxos算法(转载)

    比较通俗易懂,可以入门,转载地址是http://www.cnblogs.com/linbingdong/p/6253479.html Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有 ...

  4. ASE加解密算法详细介绍

    AEC扫盲主要增对CBC模式做详细讲解: https://blog.csdn.net/qq_28205153/article/details/55798628 AEC其他几种模式详细介绍 https: ...

  5. memcache分布式 [一致性hash算法] 的php实现

    最近在看一些分布式方面的文章,所以就用php实现一致性hash来练练手,以前一般用的是最原始的hash取模做分布式,当生产过程中添加或删除一台memcache都会造成数据的全部失效,一致性hash就是 ...

  6. 分布式缓存技术memcached学习(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...

  7. 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前, ...

  8. 一致性Hash算法在数据库分表中的实践

    最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...

  9. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

随机推荐

  1. libcurl 不支持https访问

    项目中使用libcurl 访问https的时候会报错,比如:“Unsupported protocol” 或者:“Protocol https not supported or disabled in ...

  2. How to Pronounce the Word SOMETHING

    How to Pronounce the Word SOMETHING Share Tweet Share Something tells me you’re going to like this v ...

  3. js中的Event对象

    event代表事件的状态,例如触发event对象的元素,鼠标的位置及状态,按下的键等等 event对象只在事件发生的过程中才有效. <!DOCTYPE html><html lang ...

  4. spark UDF函数

    Spark(Hive) SQL中UDF的使用(Python):http://www.tuicool.com/articles/3yMBNb7

  5. Mysql Innodb 性能参数设置 https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html

    参考原文: https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html 查看系统 ...

  6. crsf 跨站请求伪造

    [crsf 跨站请求伪造] CSRF(Cross-site request forgery),中文名称:跨站请求伪造.核心为利用浏览器帮助提交cookie.采用随机数方可防御.估计大部小站均无CSRF ...

  7. ie6浏览器的安装

    试过各种方法都不行,最后用ie8卸载工具,不仅卸载了ie8还自动安装了ie6,非常棒!!!我的空间有那款卸载工具.

  8. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers http://poj.org/problem?id=2739 Time Limit: 1000MS   Memory Limit: 6 ...

  9. RMQ(或运算)

    RMQ https://ac.nowcoder.com/acm/contest/283/J 题目描述 按位或运算:处理两个长度相同的二进制数,两个相应的二进位中只要有一个为1,该位的结果值为1.例如5 ...

  10. 【校招面试 之 剑指offer】第11题 旋转数组中的最小数字

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如: 数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...