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

可靠的组通信

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

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

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

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

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

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

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

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

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

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

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

无等级的反馈控制

一个没有接收到消息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.mzph.cn/news/617144.shtml

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

相关文章

每日算法打卡:饮料换购 day 12

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码 原题链接 1216. 饮料换购 题目难度:简单 题目来源:第六届蓝桥杯省赛C A/C组,第六届蓝桥杯省赛Java B组 题目描述 乐羊羊饮料厂正在举…

LeetCode刷题笔记

面试经典150题 1. 数组/字符串 1.1 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺…

kotlin-运算符

区间运算符 闭区间运算符 a不能大于b var rang 1..9for(num in rang){print("${num}") //输出123456789}半开区间运算符 半开区间运算符a until b 用于定义一个从a~b(包括a边界值,但不包含b边界值)的所有值的区间,a不能大于b var rang 1 …

spring Data Elasticsearch入门

1.Elasticsearch Elasticsearch提供了两种连接方式: transport:通过TCP方式访问ES。(已废弃) rest:通过HTTP API 方式访问ES。 描述: Spring Data Elasticsearch 项目提供了与Elasticsearch 搜索引擎的集成…

17. 电话号码的字母组合(回溯)

从第一个数字开始遍历其对应的字母&#xff0c;将其加入StringBuffer中&#xff0c;继续深度优先搜索&#xff0c;当访问到最后一个数字的时候&#xff0c;将StringBuffer存储到ans中&#xff0c;然后回溯到下一个对应字母。 class Solution {public List<String> lette…

instanceof、对象类型转化、static关键字

instanceof 与 对象类型转换 instanceof是判断一个对象是否与一个类有关系的关键字 先看引用类型&#xff0c;再看实际类型 *例子&#xff1a;obj instanceof A 先看obj的类型是否与A有关联&#xff0c;无关联则报错&#xff0c;有关联则判断obj的实际类型 因为obj的实际类…

系分笔记数据库反规范化、SQL语句和大数据

文章目录 1、概要2、反规范化3、大数据4、SQL语句5、总结 1、概要 数据库设计是考试重点&#xff0c;常考和必考内容&#xff0c;本篇主要记录了知识点&#xff1a;反规范化、SQL语句及大数据。 2、反规范化 数据库遵循范式的设计&#xff0c;使得多表查询和连接表查询较多的时…

【面试突击】网关系统面试实战

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

基于JAVA+ssm开发的中草药智能采购管理系统设计与实现【附源码】

基于JAVAssm开发的中草药智能采购管理系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.…

C++中的常见数据结构 --- 队列、栈、列表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 队列、栈、列表 前言一、队列&#xff08;Queue&#xff09;二、栈&#xff08;Stack&#xff09;三、列表&#xff08;List&#xff09;总结 前言 队列、栈、列表是其中三个…

stable diffusion代码学习笔记

前言&#xff1a;本文没有太多公式推理&#xff0c;只有一些简单的公式&#xff0c;以及公式和代码的对应关系。本文仅做个人学习笔记&#xff0c;如有理解错误的地方&#xff0c;请指出。 本文包含stable diffusion入门文献和不同版本的代码。 文献资源 本文学习的代码&…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)

Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&#xff08;2&#xff09; 在 https://zhangphil.blog.csdn.net/article/details/135374279 基础上&#xff0c;增加一个功能&#xff0c;当手指在上面的图片…

【DevOps-08-3】Jenkins容器内部使用Docker

一、简要描述 构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可。 设置Jenkins容器使用宿主机Docker。 二、配置和操作步骤 1、修改宿主机docker.sock权限 # 修改docker.sock 用户和用户组都为root $ …

并发,并行,线程与UI操作

并行和并发是计算机领域中两个相关但不同的概念。 并行&#xff08;Parallel&#xff09;指的是同时执行多个任务或操作&#xff0c;它依赖于具有多个处理单元的系统。在并行计算中&#xff0c;任务被分成多个子任务&#xff0c;并且这些子任务可以同时在不同的处理单元上执行…

工智能基础知识总结--聚类算法

什么是聚类算法 聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方…

DEJA_VU3D - Cesium功能集 之 112-获取圆节点(1)

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题二 模块二

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

探索“城堡世界”APP:你的城堡,你的故事

在快节奏的现代生活中&#xff0c;我们常常渴望有一个属于自己的世界&#xff0c;可以随心所欲地创造和讲述故事。今天&#xff0c;我们要为大家介绍的是一款名为“城堡世界”的APP&#xff0c;它将带给你实现这个梦想的机会。 “城堡世界”是一款独特的APP&#xff0c;它允许用…

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

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

redis获取过期时间

03&#xff0c;redisTemplate_redistemplate 获取剩余时间-CSDN博客 11.返回当前key所对应的剩余过期时间 redisTemplate.getExpire(key);1 12.返回剩余过期时间并且指定时间单位 redisTemplate.getExpire(key, unit);