当前位置: 首页 > news >正文

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

  • 参考文献
  • 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.持有令牌的计算机会将令牌传给它后面的计算机,最终该令牌可以在环上循环流转
  • 不持有令牌对于单个计算机来说是合法的,但是如果所有计算机都不持有令牌,对于整个系统来说就是非法的
  • 类似的,如果有不止一个计算机持有令牌,也是非法的,但是对于每个计算机来说这很难发现,因为他们每个都只能与邻居通信
  • 因此,论文中的算法并没有去检测错误,而是确保系统不断向着合法状态前进
  • 而且那个时候用于错误检测的传统方法很困难而且很耗时
  • 但是随着新的更高效的错误检测算法的提出,基于错误检测还可以将非自稳定算法结合自稳定算法实现更高效的自稳定算法

相关文章:

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

参考文献Self-stabilizing systems in spite of distributed control可以把松散耦合的 循环序列过程 间的同步任务&#xff0c;看成是要保持一个这样的不变性&#xff1a;“系统要处于一种合法状态”因此每个进程在运行每一个可能会改变不变性的步骤之前都要先检查一下是可以执…...

C#压缩图片的方法

/// <summary> /// 图片压缩 /// </summary> /// <param name"imagePath">图片文件路径</param> /// <param name"targetFolder">保存文件夹</param> /// <param name"quality">压缩质量</param&g…...

安装 fcitx + 搜狗/谷歌输入法 之后导致 死机,重启后黑屏只有鼠标可以移动

一般的原因就是 &#xff1a; fcitx 导致的问题 方法就是 先卸载搜狗&#xff0c;再卸载fcitx 解决办法&#xff1a; 首先&#xff1a;ctrlaltF6 进入命令行界面&#xff0c;如果进不去就 ctrlaltF2 接下来执行&#xff1a; sudo apt-get remove sogoupinyin sudo apt-get …...

Maven项目转为SpringBoot项目

Maven项目转为SpringBoot项目 前言创建一个maven项目前的软件的一些通用设置Maven仓库的设置其他的设置字符编码编译器注解支持 创建的Maven项目修改为Spring Boot项目修改pom.xml文件修改启动类-Main新建WAR包所需的类 添加核心配置文件 测试的控制器最后整个项目的目录结构![…...

C语言之预处理

目录 前言 宏定义define的用法 文件包含include的用法 条件编译的用法 其他预处理命令 练习题 练习一 练习二 练习三 前言 预处理命令可以改变程序设计环境&#xff0c;提高编程效率&#xff0c;它们并不是C语言本身的组成部分&#xff0c;不能直接对它们进行编译&am…...

css步骤条

html 代码以及样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css步骤条</title><style>.steps {display: flex;justify-content: space-between;padding: 0;margin: 20px 10px;lis…...

[Hive] 常见函数

文章目录 字符串函数数值函数随机函数日期和时间函数字符串转时间 聚合函数数组函数结构体函数数组函数映射函数 map正则处理JSON 字符串函数 CONCAT(string1, string2, …)&#xff1a;将多个字符串连接成一个字符串。 LENGTH(string)&#xff1a;返回字符串的长度。 LOWER…...

Mac用NTFS文件夹读写NTFS硬盘 NTFS能复制多大的文件

Mac作为一款备受欢迎的计算机操作系统&#xff0c;具备了许多令人惊叹的功能和特性。然而&#xff0c;对于一些Mac用户来说&#xff0c;使用NTFS格式的硬盘可能存在一些疑问。他们可能想知道Mac是否能够读写NTFS格式的硬盘&#xff0c;以及NTFS格式的硬盘是否有文件大小的限制。…...

【unity3D】Scroll Rect组件—制作下滑列表

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Scroll Rect组件 Scroll Rect组件 基础知识详细说明案例演示——制作一个简单的下滑框扩展 介绍&#xff1a;Scroll Rect组件是用…...

网络扫描与网络监听

前言&#xff1a;前文给大家介绍了网络安全相关方面的基础知识体系&#xff0c;以及什么是黑客&#xff0c;本篇文章笔者就给大家带来“黑客攻击五部曲”中的网络扫描和网络监听 目录 黑客攻击五部曲 网络扫描 按扫描策略分类 按照扫描方式分类 被动式策略 系统用户扫描 …...

Codeforces Round 904 (Div. 2) C

C. Medium Design 思路&#xff1a;我们设最大值所在的下标为 x x x,最小值所在的下标为 y y y,那么我们考虑一段区间对于答案的贡献&#xff1a; 若一段区间覆盖了 x x x&#xff0c;但没有覆盖 y y y,那么这段区间需要选择 若一段区间覆盖了 y y y&#xff0c;但没有覆盖 x…...

DBeaver连接数据库报错:Public Key Retrieval is not allowed 的解决方案

写在前面&#xff1a; DBeaver是一款免费的数据库管理工具&#xff0c;安装也是傻瓜式一键安装&#xff0c;比较推荐。 DBeaver官网&#xff08;加载有点慢&#xff0c;耐心等待&#xff09;&#xff1a;DBeaver Community | Free Universal Database Tool 报错详情&#xff…...

DeepFace【部署 04】轻量级人脸识别和面部属性分析框架deepface使用Docker部署CPU+GPU两个版本及cuDNN安装

使用Docker部署CPUGPU 1.CPU2.GPU3.cuDNN安装3.1 Prerequisites3.2 下载Linux版本cuDNN3.3 安装 1.CPU 本说明基于DeepFace的Docker镜像文件deepface_image.tar进行说明。 # 1.导入镜像 docker load -i deepface_image.tar# 2.创建模型文件夹【并将下载好的模型文件上传】 mk…...

程序生活 - 减肥小记

文章目录 缘起健康就好了吗&#xff1f;关于外在和物质生活难与易 我的减肥生活一些细节轻断食戒糖、油炸、重口味睡眠改变社交方式用运动化解压力不喝牛奶 缘起 2017年的一次腿受伤&#xff0c;让我从一个怎么都吃不胖的人&#xff0c;变成了一个实实在在的胖子。 如果你从来…...

深度学习_4_实战_直线最优解

梯度 实战 代码&#xff1a; # %matplotlib inline import random import torch import matplotlib.pyplot as plt # from d21 import torch as d21def synthetic_data(w, b, num_examples):"""生成 Y XW b 噪声。"""X torch.normal(0,…...

《视觉SLAM十四讲》公式推导(三)

文章目录 CH3-8 证明旋转后的四元数虚部为零&#xff0c;实部为罗德里格斯公式结果 CH4 李群与李代数CH4-1 SO(3) 上的指数映射CH4-2 SE(3) 上的指数映射CH4-3 李代数求导对极几何&#xff1a;本质矩阵奇异值分解矩阵内积和迹 CH3-8 证明旋转后的四元数虚部为零&#xff0c;实部…...

pnpm、npm、yarn的区别

pnpm、npm、yarn是三种不同的包管理器&#xff0c;它们之间有一些区别。 安装速度&#xff1a;pnpm的安装速度比npm和yarn快&#xff0c;因为它使用了只下载必需的模块&#xff0c;而不是下载整个依赖树。此外&#xff0c;pnpm还可以并行下载模块&#xff0c;从而进一步提高下…...

搞定蓝牙——第四章(GATT协议)

搞定蓝牙——第四章&#xff08;GATT协议&#xff09; 原理介绍层次结构server和client端Attribute ESP32代码 文章下面用的英文表示&#xff1a; server和client&#xff1a;服务端和客户端 char.&#xff1a;characteristic缩写&#xff0c;特征 Attribute:属性 ATT:Attribut…...

Go语言入门心法(十四): Go操作Redis实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…...

Java学习笔记(三)

前言 这个主要就是想记录一个点&#xff0c;就是二维数组保存的元素就是一维数组的地址&#xff0c;这个概念大家都知道了&#xff0c;那么接下来就是我最近写程序发生的一个事情了。 随机打乱一个一维数组 这个程序我相信大家都是会写的&#xff0c;通过randomArr来随机打乱…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...