论文-分布式-分布式计算|容错-分布式控制下的自稳定系统

  • 参考文献
  • Self-stabilizing systems in spite of distributed control
  • 可以把松散耦合的 循环序列过程 间的同步任务,看成是要保持一个这样的不变性:“系统要处于一种合法状态”
  • 因此每个进程在运行每一个可能会改变不变性的步骤之前都要先检查一下是可以执行,还是要延迟执行
  • 如果允许不同进程互斥地访问记录有“当前系统状态”的公共存储,解决方案就很简洁—并且可以很系统化地实现
  • 如果没有一个所有进程都可以访问的公共存储模块的话,复杂度就会增加,因为当前系统的状态就不得不分布式地存储在各个进程内的变量中;
  • 进一步地,如果再对通信进行限定,比如每个进程只能与它的邻居进行通信,复杂度还会上升
  • 问题的复杂性在于单个进程的状态只能被整个系统状态中对它可用的那一部分影响,而进程本地动作要基于本地信息实现全局性的目标
  • 这样的系统(可以称之为“分布式控制”系统)已经被设计出来,但是当时所知的所有设计都不是“自稳定”的,也就是说它们一旦进入非法状态,就会永远处于这种状态
  • 考虑一个由少数边连接的图,图中每个节点对应一个有限状态机;
  • 图中直接相连的那些状态机,它们相互之间称为邻居
  • 每个状态机定义一个或多个"特权",比如是关于它自己和邻居状态的一组布尔函数;
  • 当布尔函数值为 true 时,我们就认为对应的特权“存在”
  • 我们引入一个中央守护进程,采用中央守护进程只是为了方便说明,实际上可以采用一个分布式的 守护进程 来完成,具体算法本文没有涉及
  • 一个简单的观察是如果享有 特权 的是不相邻的状态机,它们的转换是可以并行进行的,它们不需要同步,因为并行运行的结果与通过一个中央守护进程选择一个进行执行是一致的,因为选择一个执行之后,由于它们两个不相邻,因此另一个的邻居状态不会改变,在新的状态中另一个依然是享有特权者,下一次可以继续选择它,而相邻的实际上因为可以相互通信,它们自己可以协调到底是谁进行状态转换
  • 在下面的状态转换手动演练中,实际上我们就充当了中央守护进程的角色,在有多个 特权 存在的情况下,选择其中一个进行状态转换,通过它从“存在”的 特权 中选择一个进行状态转换,每个合法状态中可能有多个特权“存在”,所以需要从里面选择一个进行状态转换
  • 允许多个享有特权者是一种更通用的需求,只有一个享有特权者的情况是互斥锁,而多个则可以类比信号量
  • 拥有该被选定的 特权 的状态机可以进行状态转换—根据一个以它的老状态和邻居状态为输入的状态函数进入新状态
  • 对于不止有一个 特权“存在”的状态机来说,新状态可能还依赖于被选定的特权
  • 状态转换完成后,守护进程再选择一个新的特权
  • 可以通过如下全局规则判断系统是否处于合法状态
  • 要求:
    • 1. 每个合法状态,必须至少要有一个 特权“存在”
    • 2. 在合法状态的每一个执行步骤都要确保系统还是会处于合法状态
    • 3. 每个 特权 至少出现在一个合法状态中
    • 4. 对于任意两个合法状态来说,总是可以通过一定执行步骤从一个到达另一个
  • 我们称一个系统是“自稳定”的,当且仅当无论系统初始状态如何也无论每次为下一个执行步骤选定的 特权 是谁,可以保证在有限数目的执行步骤之后总是至少存在一个 特权 并且系统可以发现它自己处于合法状态
  • “自稳定”的系统是否能通过各节点的本地执行步骤来满足上述的全局性条件,本来也不是可以很直接地得出结论
  • 而守护进程的不确定性引入了额外的复杂度
  • 实际上该问题可以通过如下三个方案解决:
  • 在如下三个解决方案中,我们假设有 N+1 个进程,它们以 0…N 进行编号
  • 假设当前机器编号为 nr.i
  • L,代表机器的左邻居的状态,对应的机器编号为 nr.(i-1) mod (N+1)
  • S,代表当前机器自己的状态,编号为 nr.i
  • R,代表机器的右邻居的状态,对应的机器编号为 nr.(i+1) mod (N+1)
  • 换句话说,我们假设机器是像环一样连接在一块
  • 机器 nr.0 又称为“底部机器”,机器 nr.N 则又被称为“顶部机器”
  • 同时在这里我们将那些只有一个 特权“存在”的状态作为合法状态
  • 同时所有的方案描述,均采用了如下格式:
  • “if privilege then corresponding move fi” 如果有特权,那么就进行相应的操作
  • Solution with K-state Machines (K>N)
  • 每个机器的状态由一个整数 S 表示,并且0=<S<K
  • 对于每个机器来说,只定义一个 特权,具体如下:
  • 对于底部机器来说,if L = S then S := (S+1)mod K fi
  • 对于其他机器来说,if L != S then S := L fi
  • 说明 1:对于一个中央式的守护进程来说,K>=N 就可以了
  • 说明 2:C.S.Scholten 扩展了该解决方案,使之可以应用到任意网络结构
  • 根据格式“if privilege then corresponding move fi”,我们可以看出,在上面的解决方案中,对于 底部机器 来说 L=S 就是 特权,意味着如果 L=S 它就是享有特权者,对于其他机器来说 L!=S 就是 特权,意味着如果 L!=S 它就是享有特权者
  • 我们可以以 3 个状态机为例,令 K=4,根据上面的算法进行模拟运行可以发现,即使一开始不满足有一个特权者,执行一段时间后会进入只有一个特权者的状态,并且此后一直处于只有一个特权者的状态
  • 比如如下状态转换序列,如下数组中的值分别代表编号为 0,1,2 的状态机的状态值
  • [0, 1, 2] -> [0, 0, 2] -> [0, 0, 0] -> [1, 0, 0] -> [1, 1, 0] -> [1, 1, 1] -> [2, 1, 1] -> [2, 2, 1] -> [2, 2, 2]……
  • 如上,初始状态状态机 0,1,2 对应的 S 值为[0, 1, 2]
  • 根据方案描述:
    • 对于状态 1 来说状态值是 1,左右值分别是 0 和 2,因此满足 L!=S,所以此时状态机 1 享有特权
    • 对于状态机 2 来说状态值是 2,左右值分别是 1 和 0,因此也满足 L!=S,因此它也是享有特权者
    • 对于 0 来说,要看 L 是否等于 S,由于 0 的左右值是 2和 1,因此它不享有特权
  • 可以看到这个初始状态,有两个享有特权者,不满足上面关于合法状态中只有一个特权者的定义
  • 然后我们根据状态转换函数,从初始状态开始不断进行状态转换,可以看到到了[0, 0, 0]后,变成了只有状态机 0为特权者,而此后就一直处于只有一个享有特权者的状态
  • 可以看到整个过程中,就是从初始处于非法状态,然后经过一定步骤进入了合法状态,此后就一直处于合法状态
  • 而这个过程中,进程只看了它左右邻居的状态,通过局部信息就实现了只有一个享有特权者这一全局性需求
  • 这实际上说明了在分布式系统中,我们仅通过部分节点的局部信息不需要得到全局状态,就可以实现全局性的状态要求
  • 其他两个方案代表的含义与上述解决方案类似,有个区别是状态机定义了两个特权
  • 以第三个方案为例,我们再手动模拟一个状态转换过程,假设有 4 个状态机,它们的初始状态值分别为[0,1,2,0]:
  • 按照下面的算法描述,可以得到如下一个状态转换过程
  • [0,1,2,0] 此时 0,1,2 均为享有特权者,选择 0 进行状态转换
  • [2,1,2,0] 此时 1,2 为享有特权者,选择 1 进行状态转换
  • [2,2,2,0] 此时 2,3 为享有特权者,选择 2 进行状态转换
  • [2,2,0,0] 此时 1 为享有特权者,1 进行状态转换
  • [2,0,0,0] 此时 0 为享有特权者,0 进行状态转换……
  • 可以看到,依然是初始不合法,然后一定步骤后变成合法,之后一直合法
  • 方案 3 具体算法如下:

  • 上述三个解决方案说明:对于一个分布式系统来言,即使节点只能跟所有节点中的部分节点进行通信,对于上述特权者(互斥,任意时刻只有一个特权者)问题而言,存在一个“自稳定”的算法
  • 无论系统初始状态如何,经历一定步骤之后它都可以进入合法状态
  • “自稳定”属性使得分布式算法可以从暂态错误中恢复
  • Dijskstra 在论文中提出了“自稳定”概念,并以上述“令牌环”问题为例给出了相应的自稳定算法
  • 在“令牌环”场景下,计算机网络连接成环状,每个计算机可以获取它前面的那个计算机的状态,该状态可以显示该计算机“持有令牌”还是“不持有令牌”
  • 对应的算法要满足如下两个条件:
  • 1.任意时刻只有一个计算机持有令牌
  • 2.持有令牌的计算机会将令牌传给它后面的计算机,最终该令牌可以在环上循环流转
  • 不持有令牌对于单个计算机来说是合法的,但是如果所有计算机都不持有令牌,对于整个系统来说就是非法的
  • 类似的,如果有不止一个计算机持有令牌,也是非法的,但是对于每个计算机来说这很难发现,因为他们每个都只能与邻居通信
  • 因此,论文中的算法并没有去检测错误,而是确保系统不断向着合法状态前进
  • 而且那个时候用于错误检测的传统方法很困难而且很耗时
  • 但是随着新的更高效的错误检测算法的提出,基于错误检测还可以将非自稳定算法结合自稳定算法实现更高效的自稳定算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人机环境系统智能是东方与西方智能思想的融合

人机环境系统的思想是一种综合性的思想&#xff0c;它融合了东方思想和西方思想的元素。在东方文化中&#xff0c;人类与自然环境有着密切的联系&#xff0c;强调人类与自然环境的和谐共生关系。而在西方文化中&#xff0c;科技和机器的应用越来越广泛&#xff0c;对人类社会和…

21.2 Python 使用Scapy实现端口探测

Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具&#xff0c;它能够处理和嗅探各种网络数据包。能够很容易的创建&#xff0c;发送&#xff0c;捕获&#xff0c;分析和操作网络数据包&#xff0c;包括TCP&#xff0c;UDP&#xff0c;ICMP等协议&#xff0c;此外它还提…

十四天学会C++之第八天:文件操作

1. 文件的打开和关闭 文件操作的基本概念。打开文件&#xff1a;使用fstream库打开文件以供读写。关闭文件&#xff1a;确保文件在使用完毕后正确关闭。 文件的打开和关闭&#xff1a;C 文件操作入门 在C编程中&#xff0c;文件操作是一项重要的任务&#xff0c;可以读取和写…

《Cesium 进阶知识点》- el-select 列表打开后,点击Cesium.Viewer场景无法自动关闭

前提 el-select属性 popper-append-to-body 必须 为 false。这样初始化的列表 el-select-dropdown 才在 el-select下&#xff1b;目前测试&#xff0c;仅对 Cesium.Viewer 生成的 canvas 点击时列表无法自动关闭&#xff1b;使用原生 canvas 和 echarts&#xff0c;点击其场景…

vivado简单仿真入门

打开软件 创建工程 create project ![在这里插入图片描述](https://img-blog.csdnimg.cn/892eda626d394733920854b71ca8f726.png)先next,保留工程路径&#xff0c;配置环境 配置芯片环境 本次芯片类型 xc7k325tffg900-2 创建之后完整的demo 编写仿真内容 timescale 1ns/1…

RabbitMQ 笔记

一、win10安装erlang 1.1 安装erLang语言&#xff0c;配置环境变量 erLang官网地址 1.2 配置环境变量 &#xff08;1&#xff09;添加系统变量ERLANG_HOME &#xff08;2&#xff09;path路径&#xff0c;指向bin目录 1.3 配置完成后再cmd命令窗口erl -version可以查看…

管理类联考——数学——汇总篇——知识点突破——数据分析——记忆

文章目录 考点记忆/考点汇总——按大纲 整体目录大纲法记忆宫殿法绘图记忆法 局部数字编码法对号不对号 归类记忆法重点记忆法歌决记忆法口诀&#xff1a;加法分类&#xff0c;类类相加&#xff1b;乘法分步&#xff0c;步步相乘。 谐音记忆法涂色 理解记忆法比较记忆法转图像记…

1997-2017年各省能源投入数据(万吨标准煤)

1997-2017年各省能源投入数据&#xff08;万吨标准煤&#xff09; 1、时间&#xff1a;1997-2017年 2、来源&#xff1a;中国统计年鉴 3、范围&#xff1a;30个省 4、指标&#xff1a;能源投入&#xff08;各省8种能源消费总量计算得出&#xff09;&#xff08;万吨标准煤&…

DeepSpeed: 大模型训练框架 | 京东云技术团队

背景&#xff1a; 目前&#xff0c;大模型的发展已经非常火热&#xff0c;关于大模型的训练、微调也是各个公司重点关注方向。但是大模型训练的痛点是模型参数过大&#xff0c;动辄上百亿&#xff0c;如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这…

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下&#xff1a; 二、要求&#xff1a;PC1 能访问到Server1 三、思路&#xff1a; R2配置DHCP&#xff0c;R2和R1配OSPF&#xff0c;R1出NAT 四、主要配置&#xff1a; R2的DHCP和OSPF&#xff1a; ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…

Leetcode—7.整数反转【中等】

2023每日刷题&#xff08;十&#xff09; Leetcode—7.整数反转 关于为什么要设long变量 参考自这篇博客 long可以表示-2147483648而且只占4个字节&#xff0c;所以能满足题目要求 复杂逻辑版实现代码 int reverse(int x){int arr[32] {0};long y;int flag 1;if(x <…

JS操作DOM及CSS

JS创造于1994年&#xff0c;其目的是为浏览器显示的文档赋予动态行为。 1 Web编程基础 本节讲解如何编写Web应用中的js程序&#xff0c;如果将这些程序加载到浏览器&#xff0c;以及如何获取输入、产出输出&#xff0c;如何运行响应事件的异步代码。 1.1 js 脚本 虽然现在不…

什么是 Node.js

目标 什么是 Node.js&#xff0c;有什么用&#xff0c;为何能独立执行 JS 代码&#xff0c;演示安装和执行 JS 文件内代码 讲解 Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;因为这个特点&#xff0c;它可以用来编写服务器后端的应用…

mybatisPlus逻辑删除注解@TableLogic

当我做了一个实体类&#xff0c;字段为del_flag的逻辑删除字段&#xff0c;要通过这个字段控制数据库中的数据逻辑删除。 重写mapper中的deleteById&#xff0c; 先按id查出数据&#xff0c;在更新此数据中的del_flag字段为1&#xff0c;调用update方法更新数据。 这种方式我…

多继承的实例介绍

一、多继承同名覆盖 子类中的成员与父类中的成员同名问题&#xff0c;通过作用域分辨符&#xff08;&#xff1a;&#xff1a;&#xff09;进行限定类的访问&#xff0c;从而实现对不同类中的同名成员各自赋值。 #include<iostream> using namespace std; class A{//父…

54. 螺旋矩阵

54. 螺旋矩阵 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;__54螺旋矩阵 原题链接&#xff1a; 54. 螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/description/ 完成情况&#xff1a; 解题思路&#xff1a; 跟59题。很类似…

python实验16_网络爬虫

实验16&#xff1a;网络爬虫 1.实验目标及要求 &#xff08;1&#xff09;掌握简单爬虫方法。 2. 实验主要内容 爬取中国票房网 ① 爬取中国票房网&#xff08;www.cbooo.cn)2019年票房排行榜前20名的电影相关数据 代码部分: import time from selenium.webdriver impor…

成为CSS选择器大师,让你的网页瞬间提升品味!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、选…

【tg】9 : InstanceImpl 、 虚拟的音频渲染设备FakeAudioDeviceModuleImpl

代码分布 WebRTC-Manager 线程:manager线程 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\InstanceImpl.h Manager 使用的是 WebRTC-Manager 线程 InstanceImpl 对Manager 的封装和调用 #

pycharm转移缓存目录

原来的缓存目录为C:\Users\86176\AppData\Local\JetBrains&#xff0c;各种配置文件、缓存文件随着pycharm的使用堆积在这里&#xff0c;导致C盘逐渐爆满。 因此需要将缓存目录转移至D盘。首先需要了解缓存目录的知识。 PyCharm 和其他 JetBrains 的 IDE 通常会有两个关键的目…