高级分布式系统-第6讲 分布式系统的容错性--进程的容错

分布式系统的容错原则既适用于硬件, 也适用于软件。 两者的主要区别在于硬件部件的同类复制相对容易, 而软件组件在运行中的同类复制( 进程复制) 涉及到更为复杂的分布式操作系统的容错机制。

以下是建立进程失效容错机制的一些基本原则

容忍进程失效的关键是把多个同样的进程组织到一个组中。

进程组的关键特性是当信息发送到组本身时, 组中所有的成员都接受它。

进程组是动态的。 可以创建组与删除组, 一个进程可以加入或离开一个组, 一个进程可以是多个组的成员。

平等组和等级组是组的两种常见的结构形式

平等组: 组中所有的进程都是平等的, 没有指挥, 所有的决定都是共同协商产生的。

优点:对称结构, 没有单独的失败点; 缺点: 协商过程比较复杂。

等级组: 组中存在等级关系, 存在担任全组协调的角色( 协调者进程) 和承担其他工作的角色( 工作者进程) 。 当外部向组产生一个服务请求时, 由协调者决定分发任务给哪个工作者。

优点: 只要协调者在运行就可以独自做决定; 缺点: 协调者失效会导致组崩溃。

组成员的管理

等级组适合集中式管理, 由一个组服务器保持所有组及其中成员的信息, 并承担组的创建、 删除、 成员加入/离去等管理功能。

这种方法直接、 有效、 容易实现, 但集中式管理存在单一失效导致组崩溃的风险。

平等组适合采用分布式管理方法, 通过可靠的多播及相互交换信息实现成员的管理。

分布式管理的机制比较复杂, 通信开销大。 如离开一个组需要向所有成员发送一个消息, 同时还要要求其他成员关注该离开成员的通信响应, 以及离开与加入的消息同步问题等。

进程复制与故障掩盖

通过复制进程将它们组织在一个组中, 可以构建一个容错的组取代一个脆弱的进程。

容错的等级组中, 主进程的复制通常以主进程后备协议的形式出现。 这种情况下, 如果主进程崩溃, 后备进程执行一些选举算法来选择一个新的主进程。 ( 双模热备)

容错的平等组中, 成员都是相同的复制进程, 通常采用表决机制实现容错。 如果组能够经受k个成员进程的故障还能完成规定功能, 那么就称为k容错。

如果这些成员进程是故障静默的, 那么具有k+1个成员进程就能够提供k容错。 如果成员进程发生的是同步的确定性故障, 那么至少需要具有2k+1个成员进程才能够获得k容错。 (如果k=1, 就成为三模冗余表决系统。 )

进程间的协议

分布式协议算法的一般目的是使所有的非故障进程就一些问题达成一致, 而且在有限的步骤内就达成一致。

两军问题

两军问题: 在假定通信不可靠的情况下, 两个运行良好的进程之间即使只就1位信息达成协议也是非常困难的。

问题描述: 两只分处两地的蓝军必须协商同时向红军发起进攻才能获得胜利, 但它们的通信方式只能派通信兵在两只蓝军之间传送信息。经过证明, 由于通信兵在传送信息的过程中存在被红军俘获而不能实现消息传送任务的风险, 两只蓝军最终不可能达成一致的进攻协议。

拜占庭将军问题

拜占庭将军问题: 在假定通信可靠、 进程运行存在故障的情况下, 在存在m个故障进程的系统中, 只有存在2m+1个正确工作的进程才能达成协议。即如果存在m个故障进程的系统,那么所有的进程总数必须3m+1,或者说要有2m+1个正确工作

如何理解? 

参考文章:拜占庭将军问题_拜占庭问题-CSDN博客

拜占庭将军问题概述

拜占庭帝国在攻击敌方城堡时,在地方城堡外驻扎了多个军队,每个军队都有各自的将军指挥,将军们只能通过信使进行沟通。在观察敌情之后,他们必须制定一个共同的计划,如进攻或者撤退,只有当半数以上的军队都发起进攻才能取得胜利。然而这其中的一些将军可能是叛徒,就会阻止将军们达成一致的行动计划;另外,传递消息的信使也可能是叛徒,他们可以进行篡改和伪造消息或者不进行消息的传递。

三将军问题

首先把问题简化一下,假设只有三个拜占庭将军,分别为A、B、C,他们要讨论的只有一件事情:明天是进攻还是撤退。为此,将军们需要依据“少数服从多数”原则投票表决,只要有两个人意见达成一致就可以了。

举例来说,A和B投进攻,C投撤退:

那么A的信使传递给B和C的消息都是进攻;

B的信使传递给A和C的消息都是进攻;

而C的信使传给A和B的消息都是撤退。

如此一来,三个将军就知道进攻方和撤退方的具体比例,因此可以达成行动的一致。

但是如果三个将军出现一个叛徒,就会导致将军间的一致的达成遭到破坏。当其中A和B做出相反的决策时,第三个将军的决策就格外重要了,当他向两个将军发出不同的决策消息,就会导致两个将军做出不同的决策,从而导致了结果的不一致。

如何揪出三将军中的叛徒?

先说结论:我们无法抓到这个叛徒。

为何呢?举例来说明:

还是上面的例子,假设A与B是忠诚的将军,C是叛徒将军。忠诚的将军经历了上次战役的失败,就已经发觉他们中出现了叛徒,但是并不知道具体是谁。依旧是上面投票的例子,A投进攻,B投撤退,C传递给A和B两种不同的消息。

现在,我们从忠诚将军A的视角来看一下,他是如何做决策的。

A现在知道另外两人中可能有一个是叛徒,他收到了B的撤退消息和C的进攻消息,他应该如何分辨呢?于是,A打算问一下B,“我从C那儿收到的是进攻,你从C那儿收到的是什么?”因为B是忠诚的将军,他不会伪造信息,B会告诉A收到的是撤退。C发送了两条不同的消息,A现在也发现了这个问题,但是A现在就可以判断C是叛徒了么?可悲的事情发生了,尽管忠诚的B说了实话,但是A反而对他产生了怀疑。因为从A的视角来看,B和C的说法不一致,他无法判断:

到底是第一次发送了两条不同消息的C是叛徒呢?

还是明明C初次告知了B的是进攻,B却和A说C告知的是撤退,B是叛徒呢?

在三个将军中最多有一个叛徒的前提下,A现在唯一能明确的是,他们中间确实出了一个叛徒,但却无法信赖两个人中的任何一个。同样的情况,也出现在B身上,两个忠诚的将军彼此间产生了隔阂。而可以任意进行信息造假的叛徒C,此时只需要再次进行消息伪造:和A说“B告知我的消息是进攻”,和B说“A告知我的消息是撤退”,如此一来,就可以进一步把信息搞混,从而隐藏了自己是叛徒的真相。

综上:在拜占庭三将军问题中,出现一个叛徒的情况,在叛徒可以任意伪造消息的情况下,他始终无法被发现。更 通用的:如果存在m个叛徒将军,当将军数量少于等于3m时,叛徒就无法被发现,整个系统的一致性也无法达成。

思考题:

两军问题和拜占庭将军问题, 在模型假设上的根本区别是什么?如何从容错模型上去解释两军问题最终不能达成协议的原因。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云添加SSL证书

一、进入腾讯云SSL证书: ssl证书控制台地址 选择“我的证书”,点击"申请免费证书" 2、填写域名和邮箱,点击“提交申请” 在此页面中会出现主机记录和记录值。 2、进入云解析 DNS:云解析DNS地址 进入我的解析-记录…

css3基础语法与盒模型

css3基础语法与盒模型 前言CSS3基础入门css3的书写位置内嵌式外链式导入式(工作中几乎不用)行内式 css3基本语法css3选择器标签选择器id选择器class类名原子类复合选择器伪类元素关系选择器序号选择器属性选择器css3新增伪类![在这里插入图片描述](https…

AI教我学编程之C#类型

前言 在上一课 中我们通过C#入门程序了解到关于C#的基础知识,这节课我们来感受作为C家族最大的黑马,在TIOBE榜单 上受欢迎程度未来两个月可能超越java的存在:C#的魅力 重点先知 1、C#程序或DLL的源代码是一组类型声明。 2、对于可执行程序&…

高压消防泵:科技与安全性的完美结合

在现代社会,随着科技的不断发展,各种高科技设备层出不穷,为我们的生活带来了极大的便利。在森林火灾扑救领域,恒峰智慧科技研发的高压消防泵作为一种高效、节能、绿色、环保的优质设备,将科技与安全性完美地结合在一起…

【面试突击】注册中心面试实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…

蚁群算法(ACO)解决旅行商(TSP)问题的python实现

TSP问题 旅行商问题&#xff08;Travelling Salesman Problem, 简记TSP&#xff0c;亦称货郎担问题)&#xff1a;设有n个城市和距离矩阵D [dij]&#xff0c;其中dij表示城市i到城市j的距离&#xff0c;i, j 1, 2 … n&#xff0c;则问题是要找出遍访每个城市恰好一次的一条回…

Salesforce财务状况分析

纵观Salesforce发展史和十几年财报中的信息&#xff0c;Salesforce从中小企业CRM服务的蓝海市场切入&#xff0c;但受限于中小企业的生命周期价值和每用户平均收入小且获客成本和流失率不对等&#xff0c;蓝海同时也是死海。 Salesforce通过收购逐渐补足品牌和产品两块短板&am…

Unity中URP下实现深度贴花

文章目录 前言一、场景设置二、实现思路1、通过深度图求出像素所在视图空间的Z值2、通过模型面片的求出像素在观察空间下的坐标值3、结合两者求出 深度图中像素的 XYZ值4、再将此坐标转换到模型的本地空间&#xff0c;把XY作为UV来进行纹理采样 三、URP下实现1、通过深度图求出…

使用Sqoop将数据从Hadoop导出到关系型数据库

当将数据从Hadoop导出到关系型数据库时&#xff0c;Apache Sqoop是一个非常有用的工具。Sqoop可以轻松地将大数据存储中的数据导出到常见的关系型数据库&#xff0c;如MySQL、Oracle、SQL Server等。本文将深入介绍如何使用Sqoop进行数据导出&#xff0c;并提供详细的示例代码&…

Leetcode10035. 对角线最长的矩形的面积

Every day a Leetcode 题目来源&#xff1a;10035. 对角线最长的矩形的面积 解法1&#xff1a;模拟 给你一个下标从 0 开始的二维整数数组 dimensions。 对于所有下标 i&#xff08;0 < i < dimensions.length&#xff09;&#xff0c;dimensions[i][0] 表示矩形 i …

【复现】Spider-Flow RCE漏洞(CVE-2024-0195)_16

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Spider Flow 是一个高度灵活可配置的爬虫平台&#xff0c;用户无需编写代码&#xff0c;以流程图的方式&#xff0c;即可实现爬虫…

android studio设置gradle和gradle JDK版本

文章目录 1.gradle JDK版本2.gradle版本 1.gradle JDK版本 file -> project structure -> SDK Location -> Gradle Settings -> Gradle JDK -> Download JDK 2.gradle版本 file -> project structure -> Project

在线海报图片设计器、图片编辑器,仿照稿定设计

源码介绍 在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器&#xff0c;仿照稿定设计而成。该系统适用于多种场景&#xff0c;包括海报图片生成、电商分享图、文章长图、视频/公众号封面等。用户无需下载软件&#xff0c;即可轻松实现创意&#xff0c;迅…

redis夯实之路-哨兵(Sentinel)机制详解

Sentinel&#xff08;哨兵&#xff09;保证了redis的高可用性&#xff0c;一个Sentinel或多个Sentinel组成的系统监视多个主从服务器&#xff0c;当主服务器下线时&#xff0c;自动将一个从服务器升级为主服务器。 sentinel的主要功能 集群监控&#xff1a;负责监控redis mas…

UG装配-多运动组合动画与自动创建装配路径

当圆盘在装配过程中既有旋转运动&#xff0c;又有直线运动的时候&#xff0c;我们需要用到序列中的抽取路径 抽取路径命令在如下位置&#xff0c;需要注意的是&#xff0c;使用抽取路径前&#xff0c;如果有其他零件与所取对象配合&#xff0c;需要先物体脱离或使用拆卸对其脱离…

基于Hadoop的网上购物行为大数据分析及预测系统【flask+echarts+机器学习】前后端交互

有需要本项目或者部署的系统可以私信博主&#xff0c;提供远程部署和讲解 本研究基于淘宝用户行为的开源数据展开大数据分析研究&#xff0c;通过Hadoop大数据分析平台对阿里天池公开的开源数据集进行多维度的用户行为分析&#xff0c;为电商销售提供可行性决策。 首先我们将大…

Java LeetCode刷题 单调栈

单调栈 单调栈概念 每日温度 单调栈 概念 单调栈&#xff08;Monotonic Stack&#xff09;是一个特殊的数据结构&#xff0c;它是一种栈&#xff0c;但具有单调性的特性。单调栈有两种类型&#xff1a;单调递增栈和单调递减栈。 在单调递增栈中&#xff0c;栈内的元素保持递…

【JAVA】谈谈 ReadWriteLock 和 StampedLock

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 ReadWriteLock&#xff08;读写锁&#xff09; 基本原理&#xff1a; 接口和实现&#xff1a; 用法示例&#xff1a; StampedL…

UE5 简易MC教程学习心得

https://www.bilibili.com/video/BV12G411J7hV?p13&spm_id_frompageDriver&vd_sourceab35b4ab4f3968642ce6c3f773f85138 ———— 目录 0.摧毁逻辑学习 1.发光材质灯方块 2.封装。想让子类 不更改父类的变量。 3.材质命名习惯。 0.摧毁逻辑学习 达到摧毁的条件…