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 ...
随机推荐
- Mysql 函数, 存储过程, 任务调度
官网链接: https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html
- Redis基本操作-list
Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...
- 6 unit3-文件操作&函数 review
文件处理相关 1.编码问题 (1)请说明python2 与python3中的默认编码是什么? py2默认ASCII码,py3默认的utf8 (2)为什么会出现中文乱码?你能列举出现乱码的情况有哪几种? ...
- AJAX是什么?
AJAX的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). ajax不是新的编程语言,而是一种使用现有标准的新方法.ajax是与服务器 ...
- php, postgresql 安装
sudo yum install postgresql84-server postgresql84-contrib ubuntu下面安装的问题解决: Postgresql installation o ...
- spring coud feign
1. 依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- StringUtil字符串工具类
package com.zjx.test03; /** * 字符串工具类 * @author * */ public class StringUtil { /** * 判断是否是空 * @param ...
- OPTION SQL_SELECT_LIMIT=DEFAULT'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- MySql重复查询
MYSQL查询重复记录的方法很多,下面就为您介绍几种最常用的MYSQL查询重复记录的方法,希望对您学习MYSQL查询重复记录方面能有所帮助. 1.查找表中多余的重复记录,重复记录是根据单个字段(peo ...