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

news2025/1/20 19:20:22

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

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

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

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

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

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

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

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

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

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

组成员的管理

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

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

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

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

进程复制与故障掩盖

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

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

容错的平等组中, 成员都是相同的复制进程, 通常采用表决机制实现容错。 如果组能够经受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时,叛徒就无法被发现,整个系统的一致性也无法达成。

思考题:

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

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

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

相关文章

点击随机红点的简单游戏(pygame)

import pygame import sys import random# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Click the Red Dot")# 定义颜色 black (0, 0, 0) red (255, 0, 0)…

XCTF:hello_pwn[WriteUP]

使用checksec查看ELF文件信息 checksec 4f2f44c9471d4dc2b59768779e378282 这里只需要注意两个重点: Arch:64bit的文件,后面写exp的重点 Stack:No canary found 没有栈溢出保护 使用IDA对ELF文件进行反汇编 双击左侧的函数栏…

推荐github热榜项目_crewAI

1 项目地址 https://github.com/joaomdmoura/crewAI 2 功能 通过设置多个智能体,协同解决问题,以处理复杂任务;这种方法的实现方式是将一个任务的输出作为另一个任务的输入。它的优势在于小而有效,原理直观易懂,而且…

window中安装Apache http server(httpd-2.4.58-win64-VS17)

windows中安装Apache http server(httpd-2.4.58-win64-VS17) 1、下载windows版本的的httpd, https://httpd.apache.org/docs/current/platform/windows.html#down 这里选择的是Apache Lounge编译的版本 https://www.apachelounge.com/download/ 2、解压到指定目录,这…

AI出题,做不完,根本做不完

前几天学到了一种针对大模型进行提示词编程的方法,效果比较炸裂,特别分享给大家。 因为有个小朋友正在学习加减法,所以本文的大部分例子都是用来生成加减法练习题。 角色扮演 这是GPT刚刚出现时,我学到的一种提示词编写方法&am…

F-score 和 Dice Loss 原理及代码

文章目录 1. F-score1. 1 原理1. 2 代码2. Dice Loss2.1 原理2.2 代码 通过看开源图像语义分割库的源码,发现它对 Dice Loss 的实现方式,是直接调用 F-score 函数,换言之,Dice Loss 是 F-score的特殊情况。于是就研究了一下这背后…

网站漏洞扫描 awvs 23.11下载 Acunetix Premium build 23.11 for Linux 完美版

Acunetix Premium build 23.11 for Linux 完美版 更新日志: 网站漏洞扫描 awvs 23.11下载 新功能 Java IAST 传感器已更新为支持 Java 17 并删除了对 AspectJWeaver 的要求对管理适用于 Docker 和 Linux 的 Acunetix On-Premises 服务的机制进行了更改&#xff0…

前端js写数据结构与算法

1、什么是数据结构与算法 数据结构:是指数据对象中数据元素之间的相互关系。包括集合结构、线性结构、树形结构、图形结构。 算法:解决问题的思路。 2、时间复杂度 1.是什么? 执行当前算法所“花费的时间” 2.干什么? 在写代码的过程中&#xf…

C# .NET SQL sugar中 IsAny进行根据条件判断数据是否存在 IsAny的使用

SQL sugar 中控制器直接判断数据是否存在 首先确保你的Service层继承的表名 控制器中使用IsAny进行根据条件判断数据是否存在

算法通关村第十五关—继续研究超大规模数据场景的问题(黄金)

继续研究超大规模数据场景的问题 一、对20GB文件进行排序 题目要求:假设你有一个20GB的文件,每行一个字符串,请说明如何对这个文件进行排序?  分析:这里给出大小是20GB,其实面试官就在暗示你不要将所有的文件都装入到…

墙地砖外形检测的技术方案-图像获取

硬件系统 墙地砖外形检测硬件系统主要由工业相机、光源、瓷砖位置检测电路和上位机组成,其结构如图所示。为了提高系统检测精度和稳定性,系统采用的是较高精度的高速工业相机用于抓取墙地砖表面轮廓图像,图像数据通过USB接口向上位机传送&am…

Maven《一》-- 一文带你快速了解Maven

目录 🐶1.1 为什么使用Maven 1. Mavan是一个依赖管理工具 ①jar包的规模 ②jar包的来源问题 ③jar包的导入问题 ④jar包之间的依赖 2. Mavan是一个构建工具 ①你没有注意过的构建 ②脱离IDE环境仍需构建 3. 结论 🐶1.2 什么是Maven &#x…

系列四、Spring Security中的认证 授权(前后端不分离)

一、Spring Security中的认证 & 授权(前后端不分离) 1.1、MyWebSecurityConfigurerAdapter /*** Author : 一叶浮萍归大海* Date: 2024/1/11 21:50* Description:*/ Configuration public class MyWebSecurityConfigurerAdapter extends WebSecuri…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点(编号是1 的结点)都有一条唯一的路径,比如从10 到根结点的路径是(10, 5, 2, 1), 从4 到根结点的路径是(4, 2, 1)&#xff0…

x-cmd pkg | qrencode - 二维码生成工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 qrencode 是一个用于生成二维码的命令行工具。它可以将文本、URL、电话号码等信息转换为二维码图像。生成的二维码图像可以保存为图片文件,方便在电子文档、网页、移动应用等各种场景中使用。 它支持的二维…

python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250 需求分析 将爬取的数据导入到表格中,方便人为查看。 实现方法 三大功能 1,下载所有网页内容。 2,处理网页中的内容提取自己想要的数据 3,导入到表格中 分析网站结构需要提取的内容 代码 import requests…

Random的使用

作用:生成伪随机数 1.导包:import java.util.Random 2.得到随机数对象:Random r new Random(); 3.调用随机数的功能获取随机数: 这里随机生成一个0-9的整数: int number r.nextInt(10); 实现指定区间的随机数&a…

C语言中关于指针的理解及用法

关于指针意思的参考:https://baike.baidu.com/item/%e6%8c%87%e9%92%88/2878304 指针 指针变量 地址 野指针 野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的) 以下是导致野指针的原因 1.指针…

利益兑现期越短,积极性越高

在2023年一次部门项目提成时间节点的调整,引发了相关的销售部门 ,项目集成部门,软件开发部门截然不同的工作积极性。 公司案例 公司做项目的时候,采用的是相关部门都可以在项目获取提成 ,之前的提成方式为销售部门为…

maven镜像源设置aliyun提升下载速度

一、打开pom.xml project下在添加 <repositories><repository><id>aliyunmaven</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository><repository><id>central2&l…