高级分布式系统-第6讲 分布式系统的容错性--可靠的组通信

news2024/10/3 4:35:16

可靠的组通信

组内通信最好是每个进程之间都建立点到点的通信, 但实际中这样的组织结构不是有效的, 因为会浪费很大的通信带宽。

在平等组中, 多播是主要的组织结构。 但多播是具有同步性质的容错结构, 并不适用拜占庭模型

多播服务需要保证消息被传送给进程组中的所有成员, 但由于进程成员管理的动态性( 创建、 删除、 加入、 离去等) , 可靠多播的实现是十分困难的。

可靠的组通信, 就是指发送到一个组的消息被传递给该组的每个成员。 可分为哪两类: 存在故障进程时的可靠通信与假定所有进程都正确的操作时的可靠通信。

假定所有进程都不会失败时的可靠通信

在这种情况下, 如果通信期间不会有进程加入或离开组, 那么可靠多播就简单意味着每个消息都应该被传递到组的每个当前成员处。 实现这种简单的可靠多播的一种方法就是为每个多播消息分配一个序列号。

假定所有进程都不会失败时的可靠通信

简单的可靠多播存在一个问题: 如果接受者众多, 在每个接收者都要回复确认信息时, 那么发送者可能被大量的反馈消息淹没而产生反馈拥塞。

解决方法: 采用否定确认的消息机制, 接收者不对消息接收进行反馈, 而是只在通知发送者消息丢失时才返回一个反馈消息。

缺点: 发送者不得不永远在历史缓存器中保留消息。 因为发送者永远不会知道消息是否已被传送到所有的接收者, 所以总是需要准备处理来自接收者的要求重发旧消息的请求。

两种具体方案: 无等级的反馈控制和分等级的反馈控制

无等级的反馈控制

一个没有接收到消息m的接收者R延迟一个随机的时间然后发送反馈消息。

如果同时有其他对m的重发请求到达R, 那么R就抑制自己的反馈, 因为它知道m会短时间内重发。

分等级的反馈控制

如果一个发送者需要向一个非常大的接收组进行多播, 可将接收组分为多个子组, 组织成树的形式。

每个子组制定一个本地协调者, 它负责处理子组中包含的接收者的重发请求。 本地协调者具有自己的历史缓存器。

存在进程失败情况下的可靠通信

如果多播通信满足下列两个条件, 则称为原子多播( atomicmulticast) :

( 1) 分布式系统中保证消息要么被发送给所有的进程, 要么就不向任何一个进程发送。

( 2) 所有的消息都按照相同的顺序发送给所有的进程。

在上述两个机制中, 第( 1) 个机制通常由虚拟同步完成, 第( 2) 个机制由消息排序实现。

虚拟同步

多播消息m唯一地跟它应该传送的一个进程表相关联。 这个表对应一个包含组中进程的组视图。 列表中的每个进程都具有相同的视图, 即它们都同意m应该被传送给它们中的每一个而且不被传送到别的进程。

进程的加入或离开会影响到组视图的构成。

如果消息的发送者在多播期间崩溃, 那么消息或者被投递给所有剩余的进程, 或者被每个进程忽略。 具有这种属性的可靠多播被称为虚拟同步

虚拟同步的原理是所有多播都在视图改变之间进行。 换句话说, 视图改变作为一个屏障, 不能跨越它进行多播。

例子: 下图所示4个进程。 在某个时刻, 进程P1加入了一个进程组, 然后这个进程组就由P1、 P2、 P3和P4组成。 在多播了一些消息之后, 进程P3崩溃了, 但是在崩溃之前它成功地将消息多播到了进程P2和P4, 但是没有多播到P1。 此时, 虚拟同步的机制保证这个消息不会传送至进程, 这就有效地建立起一种情况, 使得在P3崩溃之前的消息像是从来没有被发送( 被丢弃) 。

消息排序

        多播的消息排序种类:

        不排序的多播

        FIFO顺序的多播

        按因果关系排序多播

        全序多播

不排序的多播

FIFO顺序的多播

FIFO顺序的多播: 同一进程传送的消息有顺序约束, 不同进程传送的消息顺序没有约束。

按因果关系排序多播

按因果关系排序多播: 如果消息m1和m2之间存在因果关系, 即m1导致了m2的产生, 那么无论它们是否由同一个发送者多播的, 每个接收者的通信层都应该在接收m1之后传送m2。

全序多播

不论消息传送是无序、 FIFO顺序还是因果关系排序,都需要在传送消息时, 对所有的成员按照相同的次序来传送。

六种不同的虚拟同步可靠多播

提供了全序的消息传送的虚拟同步可靠多播称为原子多播

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

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

相关文章

OpenGl L6坐标系统

一.标准化设备坐标 我们在L5谈到了对顶点着色器中的点进行变换,而变换的范围必须在 -1.0到1.0 之间,否者将不可见。只有将所有的点转换为标准化设备坐标后,才能全部传入光栅器,再转换为屏幕上的像素。 将坐标变换为标准化设备坐标…

【MySQL】C语言连接MySQL

文章目录 一、引入库下载库文件验证是否引入成功 二、MySQL C API相关接口三、总结 一、引入库 mysql的基础,我们之前已经学过,后面我们只关心使用要 使用C语言连接mysql ,需要使用mysql官网提供的库,大家可以去MySQL官网下载。 …

随机漫步【scatter的使用】

去掉scatter的坐标轴(未成功版) import matplotlib.pyplot as plt from random import choice class RandomWalk():def __init__(self,num_points 5000):self.num_points num_pointsself.x_values [0]self.y_values [0]def fill_walk(self):while l…

父组件中 arr.push改变数组,但是子组件监听不到 arr 的变化

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.真是奇怪呀,一般来说通过 push方法改变 数组,是一定会有响应式的,那就可以监听到变化。但是我今天却遇到了一件奇怪的事情。在…

多模态推荐系统综述:四、模型优化

四、模型优化 由于多模态信息的存在,当多模态编码器和推荐模型一起训练时,模型训练的计算要求大大增加。因此,多模态推荐模型在训练过程中可以分为两类:端到端训练和两步训练。 端到端训练可以利用反向传播获得的每个梯度来更新模…

2024.1.11 关于 Jedis 库操作 Redis 基本演示

目录 引言 通用命令 SET & GET EXISTS & DEL KEYS EXPIRE & TTL TYPE String 类型命令 MGET & MSET GETRANGE & SETRANGE APPEND INCR & DECR List 类型命令 LPUSH & LRANG LPOP & LPOP BLPOP & BRPOP LLEN Set 类型命…

Shutter Encoder多媒体转换v17.8

软件介绍 多媒体包含种类繁多的各种文件格式,每种格式都有其不同的特征和所谓的“怪癖”。 因此,如果使用多种图像、视频或音频格式,找到一个集中的软件来从一个地方处理所有这些格式可能会非常棘手。 这就是 Shutter Encoder 基本上允许做的…

科研绘图(二)气泡图

气泡矩阵图(Bubble Matrix Plot),通常用于显示三个变量之间的关系。这种图表类型将数据点表示为气泡的形式,其中气泡的大小通常表示第三个数值变量的大小。图表的X轴和Y轴代表两个分类或定量变量。颜色可能代表另一个分类变量或是…

计算机缺失msvcp120.dll的最新解决方法,实测可以完美修复

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。msvcp120.dll是Microsoft Visual C Redistributable Package的一部分,它是运行许多基于Windows操作系统的应用程序所必需的动态链接库文件之一。如果计算机…

矿山无人驾驶方案

矿山无人驾驶运输系统,可实现露天矿采煤装载运输的无人化,满足智能矿山安全、高效、绿色、环保等目标。 无人驾驶应用的总体技术架构包括“车端、场端、云端”三个层面以及相应的安全保障体系,其中车端的智能矿卡具备车辆感知、通信、决策和执…

数字信号处理教程学习笔记1-第2章时域中的离散信号和系统

信号处理的任务示意方框图 模拟信号和数字信号分别是啥样的,有啥区别

【AI视野·今日CV 计算机视觉论文速览 第286期】Tue, 9 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 9 Jan 2024 Totally 121 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Dr$^2$Net: Dynamic Reversible Dual-Residual Networks for Memory-Efficient Finetuning Authors Chen Zhao, Shuming Li…

富唯智能新研发的复合机器人,轻松破解汽车底盘零配件生产中的难题

随着汽车工业的快速发展,对于底盘零配件的需求也日益增长。为了满足市场需求,智能物流解决方案在汽车底盘零配件生产中扮演着越来越重要的角色。如何实现高效、准确的生产和物流管理,以满足市场快速变化的需求,成为了汽车生产商亟…

日期类的实现|运算符重载的复用

前言 通过前面C入门与类与对象的学习,今天我们将运用所学的知识点完成一个Date类。 本节目标 运用所学知识完成Date类。详细讲解运算符各种重载。理解运算符重载的复用。 一、Date类的六个默认成员函数 六个成员函数,Date类只需要自己实现构造函数即可…

比尔盖茨:如果只能解决一个问题,我的答案总是营养不良

谷禾健康 当地时间12月19日,微软联合创始人、亿万富翁比尔盖茨发布了对来年的年度预测,称 2024 年将是一个“转折点”。 在这封长达 10 页的信中他展示了对人工智能领域的更多创新、婴儿营养不良问题的突破、气候变化谈判的进展等多方面的期待。 人工智能…

vue-virtual-scroll-list(可单选、多选、搜索查询、创建条目)

element-ui-解决下拉框数据量过多问题(vue-virtual-scroll-list)_element-ui下拉框数据太多如何优化-CSDN博客 的升级版 参考链接:封装el-select,实现虚拟滚动,可单选、多选、搜索查询、创建条目-CSDN博客 1.封装组件 select.v…

计算机组成原理-计算机的发展(计算机系统 硬件发展 软件发展 微处理器和微计算机的发展 摩尔定律 发展趋势)

文章目录 总览什么是计算机系统软件硬件的发展第一代第二代第三代第四代微处理器的发展相关人物摩尔定律 软件的发展目前的发展趋势小结 总览 什么是计算机系统 软件 语言处理程序就是编译程序之类的 调试代码就是服务程序 硬件的发展 第一代 逻辑元件:处理电信…

通达信波动指数指标公式,识别盘整还是趋势

波动指数(Choppiness Index)是由澳大利亚商品交易员E.W. Dreiss开发的技术指标,用来判断市场是盘整还是趋势。该指标属于非方向性指标,不用于判断市场方向,而仅用于识别市场趋势。 指标的取值范围为0到100,数值越高,表…

Linux进程管理、ps命令、kill命令

每一个程序在运行的时候都会被操作系统注册为系统中的一个进程 补充一下操作系统的内容: 进程实体(又称进程映像):程序段、相关数据段、PCB三部分构成 进程是进程实体的运行过程,是系统进行资源分配的一个独立单位 …

xtdrone用键盘控制无人机飞行 无法起飞

运行案例 解锁无人机螺旋桨转动但无法起飞 也未报错 解决方法: 在QGC中修改:PX4飞控EKF配置 将PX4使用的EKF配置为融合GPS的水平位置与气压计高度。 如果我们想使用视觉定位,就需要把修改配置文件。 此修改意味着EKF融合来自mavros/vision_…