Chandy-Lamport快照算法仿真实现

2023-10-31

Chandy-Lamport快照算法仿真实现

分布式系统中存在的问题

在简单的非分布式环境中发现的问题,如互斥、饿死和死锁等,它们都有可能出现在分布式环境中。实际上,后一种环境下出现这些问题的可能性更大,因为它涉及到很多的实体,它们会引起混乱。没有全局状态更是增加了其中的麻烦。

操作系统或参与的进程不可能知道所有进程的整个状态。它只能知道自己的状态(也就是本地进程)。为了获取远程进程的相关信息,它要获取来自其他进程的消息,或者和其他进程进行通信。

使用快照记录状态

在一个分布式计算系统中,为了保证数据的一致性需要对数据进行一致性快照。

由于进程是可能崩溃的,我们需要保证在进程崩溃重启后,系统仍然能够正常运行,或者说我们要从某个检查点恢复程序的运行状态,这时就需要将系统在某个时间点的状态保存起来。也就是说我们需要对分布式系统进行一次快照存储,保存每个节点在当时的状态以及每个消息队列在当时的状态。

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

Chandy-Lamport快照算法

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

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

快照的建立过程

主要包括一下三个部分:

  • Initiating a snapshot: 也就是开始创建 snapshot,可以由系统中的任意一个进程发起
  • Propagating a snapshot: 系统中其他进程开始逐个创建 snapshot 的过程
  • Terminating a snapshot: 算法结束条件: 所有的进程都收到 marker 信息并且记录下自己的状态和 channel 的状态(包含的 message)

具体实现过程:

进程 P i

计算局部状态

发送一个标志到 chan ij chan ik

分别对来自 chan ji chan ki 的消息进行计数

进程 P j 若从 chan ij 收到标志

计算局部状态并记录 chan ij 的状态为空

–**发送标志到 ** chan ji chan jk

对来 chan kj 的消息进行计数

进程 P k 若从 chan ik 收到标志

计算局部状态并记录 chan ik 的状态为空

发送标志到 chan ki chan kj

对来 chan jk 的消息进行计数

程序设计框架

描述:

​ 在i,j,k三个节点构成的模拟网络环境中基于全联通逻辑拓扑结构,以资源转移为应用背景,仿真实现Chandy和Lamport快照算法。每条通道均有不同的延迟,且任何通道内均允许存在多条消息。

节点功能:

  • 接收来自控制节点的原始操作消息,完成对应的资源转移、发起快照操作,如果是结束消息,则在完成所有操作后结束程序的运行
  • 接收来自其他P节点的资源转移和快照标记消息,完成相应的操作

要求:

  • 模拟通道延时 sleep()
  • 端口
  • 通信要求:使用write/read语句和使用短连接支持交互
  • 数据类型:字符串
  • 格式
  • 日志调试

设计:

  • 输入:
  • 输出:
  • 静态参数
  • 程序结构:线程设定
  • 数据结构:快照301#302#的数据结构
  • 流程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chandy-Lamport快照算法仿真实现 的相关文章

  • 瞧瞧苹果OS X如何干掉Linux

    原文地址 http www csdn net article 2012 08 28 2809270 osx killed linux 摘要 如果你去过Facebook或者其它一些创业类科技公司 你会发现随处可见的Mac 无论是CEO还是开发
  • 操作系统--进程同步

    进程同步 进程同步概念 进程互斥的软件实现方法 单标志法 双标志先检查 双标志后检查 Peterson 算法 进程互斥的硬件实现方法 中断屏蔽方法 TestAndSet指令 Swap指令 信号量机制 整形信号量 记录型信号量 用信号量实现进
  • 《30天自制操作系统》入门方法总结

    30天自制操作系统 是一位日本大佬 川合秀实 老师所写的一本书 逻辑清晰 语言朴实 我跟着中文版的电子书学习了两天 感觉很好 在这里我就实操环节简单做一下总结 以帮助初学者更好的入门 1 操作系统和编辑器 我使用的是win10 64位 专业
  • 【ISO】Windows10系统ISO镜像怎么从微软官网下载?

    要自己安装正版系统 第一步就是要下载到正确的系统镜像 下载的方法很多 可以通过搜索 网盘 网站或者论坛等下载 但那都不是最正宗 最纯粹的的 通过这些渠道下载 偶尔 难免也会遇到些心术不正的人给你夹带点私货 从微软官网下载Windows10系
  • OS - 操作系统实战 - 学习/实践

    1 应用场景 主要用于学习 设计和编写操作系统 同时帮助更加好低理解操作系统 研究Linux系统 提供编程能力 2 学习 操作 1 文档阅读 操作系统实战45讲 操作系统 Linux 计算机基础 底层 内核 后端开发 iOS 彭东 C语言
  • python中os模块中文帮助文档

    python中os模块中文帮助文档 翻译者 butalnd 翻译于2010 1 7 2010 1 8 个人博客 url http butlandblog appspot com url 注此模块中关于unix中的函数大部分都被略过 翻译主要
  • ThreadLocal的使用

    当使用ThreadLocal维护变量时 ThreadLocal为每个使用该变量的线程提供独立的变量副本 所以每一个线程都可以独立地改变自己的副本 而不会影响其它线程所对应的副本 演示代码 package com oa public clas
  • Python根据Excel名单实现文件夹下文件批量改名

    班级收集截图 通过缓存快速获取图片 可是文件夹内的文件是乱码 所以采用Python进行批量改名操作 import os import xlrd count 1 path C Users White Desktop 18 文件所在文件夹 ex
  • 【OS命令注入01】常见OS命令执行函数及其利用(system、exec、passthru、popen、shell_exec及反引号结构)

    目录 1 OS命令注入概述 2 常见可注入函数及利用方法 2 1 system 函数 2 2 exec 函数 2 3 passthru 函数 2 4 popen 函数 2 5 shell exec及反引号结构 3 防御 4 总结 1 OS命
  • 操作系统期末复习总结

    操作系统期末复习总结 第一章 操作系统引论 1 1操作系统的目标和作用 1 1 1操作系统的目标 在计算机系统上配置操作系统 其主要目标是 方便性 有效性 可扩充性和开放性 方便性 配置OS后方便使用 有效性 提高系统资源的利用率 可扩充性
  • 来,看看这20个常用的宏定义!

    关注 星标公众号 直达精彩内容 ID 技术让梦想更伟大 作者 李肖遥 写好C语言 漂亮的宏定义很重要 使用宏定义可以防止出错 提高可移植性 可读性 方便性等等 下面列举一些成熟软件中常用的宏定义 1 防止一个头文件被重复包含 1 ifnde
  • win7打不开chm

    1 打开chm2 win7提示安全问题3 chm无法显示内容4 关闭chm5 右键点击chm 点击 解除锁定 ok 没有 解除锁定 晕 请往下6 右键点击chm 点击 压缩到 rar 压缩chm7 双击生成的压缩文件 rar8 在rar中双
  • 操作系统 -- CPU的调度策略 CPU Scheduling

    操作系统 CPU的调度策略 CPU Scheduling 进程状态 preemptive and non preemptive Scheduler解决的三个问题 什么时候切换进程 When 怎么将进程和CPU绑定 How 怎么选择需要执行的
  • Chromium OS初体验 就是一款Linux

    好奇 弄了一个Chromium OS for VMWare 玩玩 发现Chromium OS并非像我之前想象的一样 并非完全是一个自主研发的独立操作系统 启动 Chromium OS 时 vmware 被设置成图形模式 但一片漆黑什么都看不
  • java中yield(),sleep()以及wait()的区别

    往往混淆了这三个函数的使用 从操作系统的角度讲 os会维护一个ready queue 就绪的线程队列 队列 是先进先出的 FIFO 并且在某一时刻cpu只为ready queue中位于队列头部的线程服务 但是当前正在被服务的线程可能觉得cp
  • rust开发工具

    文章目录 介绍 安装Rust 检测 安装vscode 安装Visual C 远程开发 在WSL上远程开发 SSL 远程开发 插件 技巧 idea或clion rust插件 介绍 支持Rust开发最好的开发工具有VS CODE SUBLIME
  • AIX/Unix/Linux/HP-UX 系统中文字符集

    在运行环境Unix与Linux系统中遇到中文乱码 在查看后台运行日志时很不方便 于是在网上查看解决方法 经过以下内容可以解决这个问题 希望看到此篇的人能解决此题 针对不同系统可以选用字符集如下 AIX zh CN IBM eucCN Lin
  • epoll在多线程中的应用-EPOLLEXCLUSIVE和REUSEPORT(一)

    以下均为对epoll在多线程中的使用的一些笔记 如果有不对的地方 烦请指出 主要对于我所遇到的问题进行讨论 不会讨论代码如何改写 探讨如何解决这个问题 一 引言 这些问题均是我在编写我的Web服务器遇到的 我在编写多线程Web服务器的时候
  • 简易DOCKER/K8S使用心得

    1 DOCKER安装 1 1 前置环境 首先 如果使用CentOS 你至少需要7 4以上 从内核角度来说 建议使用8 2及以上 如果是7 4以下的版本 可以通过设置仓库到7 4以上版本 再 yum install centos releas
  • 通过哲学家进餐问题学习线程间协作(代码实现以leetcode1226为例)

    哲学家进餐问题 代码实现以leetcode1226为例 问题场景 解决思路 解决死锁问题 代码实现 c go 代码实现以leetcode1226为例 提到多线程和锁解决问题 就想到了os中哲学家进餐问题 问题场景 回想该问题产生场景 五个哲

随机推荐

  • ARM指令集

    往期推荐 ARM汇编语言程序结构 Android与ARM处理器 反射调用Java层方法 反射获取Java层字段的值 ARM指令集是指计算机ARM操作指令系统 在ARM中有两种方式可以实现程序的跳转 一种是跳转指令 另一种是直接向PC寄存器中
  • 构建LAMP网站服务 第一步 编译安装httpd服务器

    构建LAMP网站服务 第一步 编译安装httpd服务器 1 安装前准备 2 编译安装apr 3 编译安装expat 4 编译安装apr util 5 编译安装pcre 6 编译安装httpd 7 selinux配置 8 防火墙配置 9 修改
  • 【编程规范】一文讲解开发中的异常日志

    异常日志规范 在处理异常 日志的时候 遵守一些规范可以避免很多问题 异常处理 强制 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避 而不应该通过 catch 来处理 比如 IndexOutOfBoun
  • 设置物体的位置 localPosition的用法

    设置物体的位置 m obstacle 0 transform localPosition new Vector3 8 4f 9 18f 9 26f
  • linux、windows命令行设置环境变量(增删改查)

    linux windows命令行设置环境变量 增删改查 1 windows下设置环境变量 1 1 环境变量优先级 1 2 查看环境变量 1 3 设置或修改环境变量 1 4 删除环境变量 1 5 给系统变量追加内容 2 linux下设置环境变
  • 深入剖析HTTP和HTTPS代理在爬虫中的应用价值

    目录 什么是HTTP和HTTPS代理 HTTP和HTTPS代理如何运作 HTTP代理的工作流程如下 HTTPS代理工作流程 网络爬虫使用HTTP代理的好处 网络爬虫使用HTTPS代理的好处 代码示例 总结 在当今互联网时代 网络爬虫作为一种
  • 使用深度学习打造智能聊天机器人

    版权声明 可以任意转载 转载时请标明文章原始出处和作者信息 author 张俊林 聊天机器人 也可以称为语音助手 聊天助手 对话机器人等 是目前非常热的一个人工智能研发与产品方向 很多大的互联网公司重金投入研发相关技术 并陆续推出了相关产品
  • 别逗了!知识付费能支撑起喜马拉雅的200亿估值?

    近日 据消息称喜马拉雅FM已经完成VIE架构搭建 并已完成新一轮4 6亿美元融资 投资方包括春华资本 腾讯 泛大西洋投资 华泰证券 高盛和新天域 投后估值34亿美元 将于明年上半年赴美IPO 对于半年多次传出要上市的喜马拉雅 此时官方并没有
  • YOLOV8改进:更换PoolFormer主干网络

    1 该文章属于YOLOV5 YOLOV7 YOLOV8改进专栏 包含大量的改进方式 主要以2023年的最新文章和2022年的文章提出改进方式 2 提供更加详细的改进方法 如将注意力机制添加到网络的不同位置 便于做实验 也可以当做论文的创新点
  • Linux操作系统简介

    文章目录 Linux发行版简介 学习Linux的必备硬件知识 关键硬件器件 CPU 关键硬件器件 存储 关键硬件器件 内存 其他一些查看硬件信息的命令 Linux开机过程 以Ubuntu16 04为例 阶段1 BIOS 阶段2 boot L
  • 技术人修炼之道阅读笔记(一)让自己更值钱的5个能力

    如何让自己更值钱 回答这个问题 需要使用黄金圈理论 黄金圈理论是一种由内而外的思维模式 提倡 why 为什么这么做 how 如何做 what 做什么 三个圈来思考或决策 首先是 why 你因为什么而值钱 要值钱 就要时刻保持稀缺性 别人不会
  • Python网络爬虫学习笔记(四)解析库的使用

    解析库的使用 使用正则表达式 比较烦琐 而且万一有地方写错了 可能导致匹配失败 对于网页的节点来说 有 id class 或其他属性 而且节点之间还有层次关系 在网页中可以通过 XPath 或 css 选择器来定位一个或多个节点 利用 XP
  • Halcon Qt 环境一次性配置

    新建 halcon pri文件 halcon pri 内容 INCLUDEPATH C Program Files MVTec HALCON 20 11 Steady include INCLUDEPATH C Program Files
  • 六、操作系统之文件管理

    六 文件管理 文件系统的概念 文件系统时OS与用户关系最紧密的一部分 对用户来说 它是OS中最直观的部分 能否方便使用OS 以及OS的可信赖程度往往取决于文件系统的功能和性能 1 文件和文件系统 2 文件系统的功能 3
  • 18 回文字符串 (后续用动态规划再做一下)

    题目 思路 题解 方法1 思路都在代码里了 class Solution public int countSubstrings string s 每个值都作为中心值 左右两个指针 但是要考虑奇偶的情况bb 和 aba gt i前面的字符串是
  • sql_mode设置(临时or永久)

    临时和永久设置MySQL sql mode非容器方式和容器方式 MySQL 文章目录 临时和永久设置MySQL sql mode 前言 查看sql mode 临时修改sql mode 永久修改sql mode 永久修改sql mode 容器
  • 工业操作系统不是ARM吗?鸿蒙是

    未来工厂如何建 工厂要怎样的数字化平台 褚健认为 面向未来的数字化工厂建议 需要走一条大规模 低成本 生态化之路 正如移动互联时代需要安卓 iOS APP 智能工厂时代需要工厂操作系统 工业APP 工厂操作系统的基础理念包括统一的数据底座
  • ykhmi是什么触摸屏软件_一体机使用中常见问题-中达优控

    1 一体机的屏在组态软件中选择的型号 4 3寸一体机选S430A 5寸一体机选S500A 7寸一体机选S700A 10寸一体机选S1001A 2 一体机发脉冲的Y点用法 A 步进电机驱动器 伺服电机驱动器可以直接接 B 可以用来驱动指示灯
  • Java程序员不得不会的124道面试题(含答案)

    专注于编程 互联网动态 最终将总结的技术 心得 经验 数据结构与算法 源码分析等 享给大家 这里不只限于技术 还有职场心得 生活感悟 以及面经 点击上方 关注按钮 第一时间送达 多线程 并发及线程的基础问题 1 Java 中能创建 vola
  • Chandy-Lamport快照算法仿真实现

    Chandy Lamport快照算法仿真实现 分布式系统中存在的问题 在简单的非分布式环境中发现的问题 如互斥 饿死和死锁等 它们都有可能出现在分布式环境中 实际上 后一种环境下出现这些问题的可能性更大 因为它涉及到很多的实体 它们会引起混