分布式系统中的经典思想实验——两将军问题和拜占庭将军问题

文章目录

    • 一、两将军问题
      • 1.1 问题描述
      • 1.2 深入理解两将军问题
      • 1.3 实验结论
    • 二、拜占庭将军问题
      • 2.1 问题描述
      • 2.2 深入理解拜占庭将军问题
      • 2.3 解决方案
    • 三、两将军和拜占庭问题的关系
      • 3.1 区别和联系
      • 3.2 应用与现实意义
    • 参考资料

一、两将军问题

1.1 问题描述

两将军问题描述的是两个将军(或两支军队)通过不可靠的通信渠道(如信使)来协调攻击的情景。

背景:两支由不同的将军领导的军队,正准备进攻一座坚固的城市。军队在城市附近的两个山丘扎营,中间有一个山谷将两个山丘隔开,两个将军交流的唯一方法是派遣信使穿越山谷。然而,山谷被城市的守卫者占领,并且途经该山谷传递信息的信使有可能会被俘虏。他们必须同时攻击才能取胜。

问题:信使有可能被敌人拦截,导致消息无法到达。即便B收到消息,B回复的确认信息也可能被拦截。这导致将军A无法确定B是否收到了消息并同意攻击,反之亦然。

请添加图片描述

1.2 深入理解两将军问题

这个问题实质上描述的是:

  • 通信不可靠:在不可靠的通信环境下,双方无法确保消息被准确接收。
  • 共识难题:无法保证双方在同一时间达成一致的决策。

两将军问题强调了在不可靠通信环境下达成一致的困难,这在分布式系统的消息传递、确认和重试机制中有所体现。

1.3 实验结论

两将军问题被证明无解,计算机科学家们仍找到了工程上的解决方案,例如传输控制协议(TCP)的“三次握手”机制。

这个思想实验表明,在分布式系统中,一个节点无法直接确认另一个节点的状态,必须通过发送信息来交流。类似于人类交流,我们只能通过语言、文字或肢体语言来传达想法。

二、拜占庭将军问题

2.1 问题描述

拜占庭将军问题是两将军问题的扩展,涉及多个将军(或节点),其中一些可能是恶意的(即“拜占庭将军”)。

背景:多个拜占庭将军各率领一支军队,想要占领一座防守坚固的城市,将军们还是只能通过信使进行交流。为了简化问题,将各支军队的行动策略限定为进攻或者撤离两种。因为部分军队进攻、部分军队撤离可能会导致灾难性后果,所以各位将军必须通过投票来达成一致的策略,即所有军队一起进攻或者所有军队一起撤离。但其中一些将军可能是叛徒,会传递虚假信息以扰乱决策。

问题:如何确保所有忠诚的将军在存在恶意将军的情况下,能够达成一致的决策。

请添加图片描述

2.2 深入理解拜占庭将军问题

这个问题实质上描述的是:

  • 恶意节点:系统中存在恶意节点,会故意传递错误信息。
  • 共识协议:需要设计能够容错的共识协议,确保即使有恶意节点,也能保证忠诚节点达成一致。

拜占庭将军问题则进一步探讨了在存在恶意节点时的容错机制,这对于设计健壮的分布式系统(如区块链和分布式数据库)至关重要。

2.3 解决方案

拜占庭将军问题的解决方案主要集中在设计能够容忍拜占庭错误(恶意或故障节点)的共识协议。以下是几种主要的拜占庭容错(Byzantine Fault Tolerance, BFT)协议:

  • Practical Byzantine Fault Tolerance (PBFT)
  • Paxos
  • Raft
  • Tendermint

三、两将军和拜占庭问题的关系

3.1 区别和联系

特性两将军问题拜占庭将军问题
节点数量两个节点多个节点
节点类型都是忠诚节点可能有恶意节点
通信问题通信渠道不可靠,消息可能丢失存在恶意节点传递错误信息,消息可能被篡改
共识难度确保两个节点在不可靠通信下达成一致在存在恶意节点的情况下达成一致
解决方案没有通用解法(理论上无解)拜占庭容错协议(如Paxos、Raft)

3.2 应用与现实意义

两将军问题强调了在不可靠通信环境下达成一致的困难,这在分布式系统的消息传递、确认和重试机制中有所体现。

拜占庭将军问题则进一步探讨了在存在恶意节点时的容错机制,这对于设计健壮的分布式系统(如区块链和分布式数据库)至关重要。

参考资料

《深入理解分布式系统 唐伟志》

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

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

相关文章

BetterZip 5软件详细安装步骤(最新版软件下载)

​BetterZip是一款功能强大的Mac解/压缩软件,可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍,以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-…

半导体芯片结构以及译码驱动

一.半导体芯片结构 可能并不是只有一个芯片,有多个芯片就需要片选线了。 二.半导体存储芯片的译码驱动 主要有两种方式:线选法和重合法 线选法:每一个存储单元都用一根字选择线选中,直接选中存储单元的各位。(一维…

从 Acme.Sh V3.0 说说 ZeroSSL

熟悉明月的都知道,明月一直都在使用 acme.sh 作为服务器端申请、部署、续期免费 SSL 证书的主要工具,今天在帮一个站长申请 SSL 证书的时候发现 acme.sh v3.0 开始默认的免费 SSL 证书变更为:ZeroSSL 了,这个 ZeroSSL 其实跟明月一…

Java NIO ByteBuffer 使用方法

前言 最近在使用spring boot websocket xterm.js 给 k8s pod做了个在线的 web 终端,发现websocket的类核心方法,用的都是ByteBuffer传递数据,如下: OnMessagepublic void onMessage(Session session, ByteBuffer byteBuffer) {…

【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想

关注我的朋友们可能知道,我经常在信号处理的领域出没,时不时会发一些信号处理、深度学习科普向的文章。 不过算法研究久了,总想做一些更有趣的事情。 比如用深度学习算法赚大钱。。毕竟有什么事情能比暴富更有意思呢。 一、神经网络与彩票…

Vue - 实现登录页面

1、技术框架 1、技术框架Vue-Cli Vue3.0 2、界面推荐大小: 1920 * 1080 3、UI组件:elementui 4、icon: element-plus/icons-vue 5、node版本:v20.14.0 2、效果图 3、源代码部分截图 4、其他 有需要的请联系作者。需要购买,不白…

Science:如何快速完成一篇研究性论文?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 完成一篇研究性论文,是将长时间积累的研究成果凝聚在几页纸中,对资深科学家而言也是一大挑战。作者们需要在充分论述科学问题和详细展示结果之间找到平…

【漏洞复现】东胜物流软件 GetProParentModuTreeList SQL注入漏洞

0x01 产品简介 东胜物流软件是青岛东胜伟业软件有限公司-款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。该公司初创于2004年11月(前身为青岛景宏物流信息技术有限公司),专注于航运物流相关环节的产品和服务。东胜物流信息管理系统货代版采用MS…

Linux:线程池

Linux:线程池 线程池概念封装线程基本结构构造函数相关接口线程类总代码 封装线程池基本结构构造与析构初始化启动与回收主线程放任务其他线程读取任务终止线程池测试线程池总代码 线程池概念 线程池是一种线程使用模式。线程过多会带来调度开销,进而影…

C++类和对象(1):构造函数和析构函数

一.类与对象的基本概念 1.结构体与类 C提供了一种比结构体类型更安全有效的数据类型——类。并且用class取代struct。 在C中将类的成员分为两类:私有成员(用private说明)和公有成员(用public说明)。私有成员(包括数据成员和成员函数)只能被类内的成员函数访问&am…

CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

目录 任务描述 相关知识 动画执行次数 动画反向播放 编程要求 任务描述 本关任务:用 CSS3 实现loading效果。效果图如下: 相关知识 为了完成本关任务,你需要掌握:1.动画执行次数,2.动画反向播放。 需要实现的效…

每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割

本文重点 在深度学习中,我们常常需要完成多个向量拼接,同时也要完成向量的分割,在pytorch中已经有封装好的库,我们可以直接调用完成这部分任务。 Cat拼接 c=torch.cat([a,b],dim=0)表示将a和b按0维度进行拼接,需要注意再非dim维度,两个矩阵的维度必须是一致的,不然会拼…

docker拉取镜像一直在加载中,且会提示error pulling image configuration

1、增加国内镜像配置 #查看文件内容 sudo vim /etc/docker/daemon.json如果没有该文件,则需要在/etc/docker中创建一个daemon.json 文件 创建文件 vim daemon.json#文件中添加以下json {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/…

小工具开发

因不太喜欢重复性工作,为了提高日常工作效率,在业余时间开发一些小工具用于帮助自己“偷懒”。 小工具功能: 1、Hightec编译的hex文件,与多模式标定hex文件合成 2、Bootloader文件,Hightec编译的hex文件,与…

SpringMVC框架学习笔记(八):自定义拦截器和异常处理

1 自定义拦截器 1.1 什么是拦截器 1.1.1 说明 (1)Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能. (2)自定义的拦截器必须实现 HandlerInterceptor 接口 1.1.2 自定义拦截…

ssh的远程连接(Linux篇)

这里用到的虚拟机时centos7 记得提前先把网络连接好,这里选择的是桥接模式 1.启动ssh服务 # 在centos中启动sshd服务 sudo systemctl start sshd 2.在windows的cmd命令界面内输入以下内容 # ssh centos中的登录用户名centos中的IP地址 ssh yl192.168.1.108 然后…

Python 基础:类

目录 一、类的概念二、定义类三、创建对象并进行访问四、修改属性的值方法一:句点表示法直接访问并修改方法二:通过方法进行修改 五、继承继承父类属性和方法重写父类方法 六、将实例用作属性七、导入类导入单个类从一个模块中导入多个类导入整个模块导入…

效果超越ControlNet+IP-Adapter和FreeControl!Ctrl-X:可控文生图新框架(加州大学英伟达)

文章链接:https://arxiv.org/pdf/2406.07540 项目链接:https://genforce.github.io/ctrl-x/ 最近的可控生成方法,如FreeControl和Diffusion Self-guidance,为文本到图像(T2I)扩散模型带来了细粒度的空间…

机器学习(V)--无监督学习(一)聚类

根据训练样本中是否包含标签信息,机器学习可以分为监督学习和无监督学习。聚类算法是典型的无监督学习,目的是想将那些相似的样本尽可能聚在一起,不相似的样本尽可能分开。 相似度或距离 聚类的核心概念是相似度(similarity)或距离(distance…

模板方法模式和命令模式

文章目录 模板方法模式1.引出模板模式1.豆浆制作问题2.基本介绍3.原理类图 2.豆浆制作代码实现1.类图2.SoyaMilk.java 豆浆的抽象类3.PeanutSoyaMilk.java 花生豆浆4.RedBeanSoyaMilk.java 红豆豆浆5.Client.java6.结果 3.钩子方法1.基本介绍2.代码实现1.SoyaMilk.java 添加钩子…