文章目录

  • 1.概述
  • 2. Overview
  • 3. Global Snapshot
  • 4.Chandy-Lamport 算法
  • 5.例子
  • 6.总结
  • 7.Refer

1.概述

转载:https://blog.csdn.net/hxcaifly/article/details/87872150

Spark 的 Structured Streaming 的 Continuous Processing Mode 的容错处理使用了分布式快照(Distributed Snapshot)算法 Chandy-Lamport 算法,那么分布式快照算法可以用来解决什么问题呢?

A snapshot algorithm is used to create a consistent snapshot of the global state of adistributed system. Due to the lack of globally shared memory and a global clock, this isn’t trivially possible.

简单来说就是用来在缺乏类似全局时钟或者全局时钟不可靠的分布式系统中来确定一种全局状态。

那么分布式快照算法应用到流式系统中就是确定一个 Global 的 Snapshot,错误处理的时候各个节点根据上一次的 Global Snapshot 来恢复。下面就介绍一下在流式系统中广泛使用分布式快照算法:Chandy-Lamport 算法。Flink 使用的是 Chandy-Lamport 的改进算法。

2. Overview

Chandy-Lamport 算法以两个作者的名字命名,没错,其中 Lamport 就是分布式系统领域无人不晓的 Leslie Lamport,著名的一致性算法 Paxos 的作者。算法的论文于 1985 年发表,Distributed Snapshots: Determining Global States of a Distributed System,提到这篇论文,不得不提一下这篇论文的由来,洗个澡的时间想出来的。

The distributed snapshot algorithm described here came about when I visited Chandy, who was then at the University of Texas in Austin. He posed the problem to me over dinner, but we had both had too much wine to think about it right then. The next morning, in the shower, I came up with the solution. When I arrived at Chandy’s office, he was waiting for me with the same solution. I consider the algorithm to be a straightforward application of the basic ideas from Time, Clocks and the Ordering of Events in a Distributed System.

正如 Lamport 所述,算法的思想非常的 straightforward,在描述算法之前需要先介绍一下 Global Snapshot。

3. Global Snapshot

Global Snapshot 我们也可以理解为 Global State,中文可以叫做全局状态,在系统做 Failure Recovery 的时候非常有用,也是广泛应用在分布式系统,更多是分布式计算系统中的一种容错处理理论基础。

在 Chandy-Lamport 算法中,为了定义分布式系统的全局状态,我们先将分布式系统简化成有限个进程和进程之间的 channel 组成,也就是一个有向图:节点是进程,边是 channel。因为是分布式系统,也就是说,这些进程是运行在不同的物理机器上的。那么一个分布式系统的全局状态就是有进程的状态和 channel 中的 message 组成,这个也是分布式快照算法需要记录的。

因为是有向图,所以每个进程对应着两类 channel: input channel, output channel。同时假设 Channel 是一个容量无限大的 FIFO 队列,收到的 message 都是有序且无重复的。Chandy-Lamport 分布式快照算法通过记录每个进程的 local state 和它的 input channel 中有序的 message,我们可以认为这是一个局部快照。那么全局快照就可以通过将所有的进程的局部快照合并起来得到。

4.Chandy-Lamport 算法

那么我们基于上面假设的分布式系统模型来看一下 Chandy-Lamport 算法具体的工作流程是什么样的。主要包括下面三个部分:

1 . Initiating a snapshot: 也就是开始创建 snapshot,可以由系统中的任意一个进程发起
2. Propagating a snapshot: 系统中其他进程开始逐个创建 snapshot 的过程
3. Terminating a snapshot: 算法结束条件

Initiating a snapshot

  • 进程 Pi 发起: 记录自己的进程状态,同时生产一个标识信息 marker,marker 和进程通信的 message 不同
  • 将 marker 信息通过 ouput channel 发送给系统里面的其他进程
  • 开始记录所有 input channel 接收到的 message

Propagating a snapshot

  • 对于进程 Pj 从 input channel Ckj 接收到 marker 信息:
  • 如果 Pj 还没有记录自己的进程状态,则
    • Pj 记录自己的进程状态,同时将 channel Ckj 置为空
    • 向 output channel 发送 marker 信息
  • 否则
    • 记录其他 channel 在收到 marker 之前的 channel 中收到所有 message

所以这里的 marker 其实是充当一个分隔符,分隔进程做 local snapshot (记录进程状态)的 message。比如 Pj 做完 local snapshot 之后 Ckj 中发送过来的 message 为 [a,b,c,marker,x,y,z] 那么 a, b, c 就是进程 Pk 做 local snapshot 前的数据,Pj 对于这部分数据需要记录下来,比如记录在 log 里面。而 marker 后面 message 正常处理掉就可以了。

Terminating a snapshot

所有的进程都收到 marker 信息并且记录下自己的状态和 channel 的状态(包含的 message)

5.例子

假设系统中包含两个进程 P1 和 P2 ,P1 进程状态包括三个变量 X1,Y1 和 Z1 , P2 进程包括三个变量 X2,Y2 和 Z2。初始状态如下。


由 P1 发起全局 Snapshot 记录,P1 先记录本身的进程状态,然后向 P2 发送 marker 信息。在 marker 信息到达 P2 之前,P2 向 P1 发送 message: M。


P2 收到 P1 发送过来的 marker 信息之后,记录自己的状态。然后 P1 收到 P2 之前发送过来的 message: M。对于 P1 来说,从 P2 channel 发送过来的信息相当于是 [M, marker],由于 P1 已经做了 local snapshot,所以 P1 需要记录 message M。


那么全局 Snapshot 就相当于下图中的蓝色部分。

6.总结

Chandy-Lamport 算法通过抽象分布式系统模型描述了一种简单直接但是非常有效的分布式快照算法。讨论 Chandy-Lamport 算法一定要注意算法的几个前提:网络可靠、消息有序。

Spark 的 Structured Streaming 虽然在官方博客中披露使用的 Chandy-Lamport 算法来做 Failover 处理,但是并没有更细节的披露。相比之下 Flink 在 2015 发布了一篇论文 Lightweight asynchronous snapshots for distributed dataflows 更适合在工程上实现,而且已经应用在了 Flink 项目中。核心思想是在 input source 端插入 barrier 来替代 Chandy-Lamport 算法中的 Marker,通过控制 barrier 的同步来实现 snapshot 的备份和 exactly-once 语义。如果看过 Spark Streaming 那篇论文,对于这个地方很明显的一个疑问就是如何处理 straggler(分布式系统中运行明显慢于其他节点的节点),答案是无法处理。

有时候不得不承认,在大多数情况下,所谓系统架构都是在做 trade-off。

7.Refer

Chandy K M, Lamport L. Distributed snapshots: Determining global states of distributed systems[J]. ACM Transactions on Computer Systems (TOCS), 1985, 3(1): 63-75.
Carbone P, Fóra G, Ewen S, et al. Lightweight asynchronous snapshots for distributed dataflows[J]. arXiv preprint arXiv:1506.08603, 2015.
Time, Clocks and the Ordering of Events in a Distributed System
Leslie Lamport Homepage
tele.informatik.uni-freiburg.de
people.cs.umass.edu/~ar
cs.princeton.edu/course
简单解释: 分布式快照(Chandy-Lamport算法)

【Flink】分布式快照算法—— Chandy-Lamport 算法相关推荐

  1. 95-242-040-源码-快照-Flink 分布式快照的设计-存储

    2.概述 ​ 分布式快照是整个 Flink 计算框架中非常核心的模块,Flink 的 checkpoint.状态存储都依赖于其分布式快照:不仅框架自身借助于 chandy-lamda 算法,实现了算子 ...

  2. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  3. 分布式一致性算法:Raft 算法

    由于微信字数的限制,此处给出的并非全文,请拉到页面最下方点击阅读原文查看完整版. Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容 ...

  4. 分布式一致性算法:Raft 算法(论文翻译)

    Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...

  5. Flink之轻量级分布式快照Checkpoint

    一.flink中checkpoint执行流程 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故 ...

  6. 分布式环境Raft一致性共识算法解读

    Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性.它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在.Raft非常 ...

  7. 大话分布式理论之二——共识算法与一致性的区别

    [系列目录] 大话分布式理论之二--共识算法与一致性的区别 大话分布式理论之一--从单体到SOA再到微服务 文章目录 共识算法 拜占庭将军问题 分布式理论中的将军们 共识算法-Paxos/Raft等 ...

  8. 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结

    文章目录 前言 CAP理论 C consistency 一致性 A availability 可用性 P partition tolerance 分区容错性 一致性模型 弱一致性 强一致性 强一致性算 ...

  9. 分布式唯一id:snowflake算法思考

    匠心零度 转载请注明原创出处,谢谢! 缘起 为什么会突然谈到分布式唯一id呢?原因是最近在准备使用RocketMQ,看看官网介绍: 一句话,消息可能会重复,所以消费端需要做幂等.为什么消息会重复后续R ...

最新文章

  1. python读取c盘中的csv文件-python读取当前目录下的CSV文件数据
  2. gateway sentinel 熔断 不起作用_《一起学sentinel》一
  3. PHP Collection 类
  4. java 获取光标_如何在java中使用Windows API获取当前鼠标光标类型?
  5. 基于Vue-cli和Vux的webpack配置
  6. linux devops_DevOps原则与学生Linux程序产生共鸣
  7. html模拟word目录,word临时文件目录
  8. 面试准备每日系列:Java底层源码——Arrays.toString(数组) object.toString() new String()
  9. android uri转file_Android世界:ContentProvider使用
  10. 物联卡与SIM卡相比优势在哪
  11. python使用视频_Python中操作各种多媒体,视频、音频到图片的代码详解
  12. 【Codecs系列】颜色空间转换CSConvert:YUV422P转YUV422SP(NV16)
  13. 【mosek.fusion】Portfolio Optimization
  14. Fastjson源码阅读:缺陷静态检查(上)
  15. 【3D目标检测】PV-RCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection
  16. HDU 4238 区间dp
  17. SQL Server使用SUM(求和)函数
  18. 计算机毕业设计SSM 家乡旅游文化推广网站【附源码数据库】
  19. Hive基础知识概念
  20. 【爬虫实战】手把手教你用Python爬取某图网4000张图片

热门文章

  1. 疑似小米10系列真机谍照首曝光:挖孔双曲面屏设计无疑
  2. 二代征信系统上线 这些内容与你有关
  3. 拖得太久了 美运营商ATT取消三星折叠手机Galaxy Fold预购订单
  4. 新iPhone全贴合保护壳曝光:“浴霸”造型恐已成定局
  5. 巴菲特午宴中标者孙宇晨与王小川隔空互怼 还要对赌100个比特币?
  6. 儿童应用程序中的第三方跟踪功能将被苹果限制
  7. 在Vmware下linux与ARM开发板的NFS系统搭建【ZT】
  8. linphone相关(转)
  9. Flutter-ThemeData详解
  10. 用python效率办公_如何用Python提高办公(Excel)效率?