在一个分布式计算系统中,为了保证数据的一致性需要对数据进行一致性快照。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. maven GroupId 和ArtifactId通常填什么

    GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构.ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称.

  2. 判断TrueType字体

    function IsTrueTypeFont(FontName : string) : boolean;const  PITCH_MASK: byte = $0F;  var  TxMetric: ...

  3. maven 的聚合

  4. jps command not found已解决

    根据当前版本安装devel 包 eg: yum install java--openjdk-devel -y jdk小工具jps介绍 jps(Java Virtual Machine Process ...

  5. Zookeeper—学习笔记(一)

    1.Zookeeper基本功能 (增 删 改 查:注册,监听) 两点: 1.放数据(少量). 2.监听节点.  注意: Zookeeper中的数据不同于数据库中的数据,没有表,没有记录,没有字段: Z ...

  6. thymeleaf从session中获取数据

    <input th:value="${session.value1}" />

  7. Maven项目标准目录结构

    -----------------------siwuxie095 Maven 项目标准目录结构 1.Maven 项目分为两种 (1)Java 项目 (2)Web 项目 2.对于 Java 项目 其中 ...

  8. Linux CentOS6.6 NFS服务的配置与安装

    一.简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客 ...

  9. sql标量值函数,将汉字转化为拼音,无音标

    USE [db_Test]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO create function [dbo].[fn_GetPinyin]( ...

  10. web服务器部署过程记录

    由于之前没有服务器部署经验,又选择了所有软件都是单独编译安装,遇到很多问题,解决之后还是学习到了很多新东西. 如今回过头来还是选择lnmp集成环境的部署方式比较方便快捷:https://lnmp.or ...