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

文章目录

    • 一、两将军问题
      • 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.mzph.cn/web/28317.shtml

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

相关文章

el-pagination 切换分页条数,会出现两次请求

文章目录 前言一、问题展示二、源码展示 前言 继上一次发现el-pagination在删除的时候pageNum不更新的问题。这次又发现了,切换分页条数,会出现两次请求。网上有很多解决方案,我就不多说了,我就简单记一下为啥会出现两次请求的问…

21. 第21章 算法分析

21. 算法分析 这个附录选自OReilly Media出版的Alen B.Downey的Think Complexity(2012)一书. 当你读完本书之后, 可能会像继续读读那本书.算法分析是计算机科学的一个分支, 研究算法的性能, 尤其是他们的运行时间和空间需求. 参见http://en.wikipedia.org/wiki/Analysis_of_al…

Vue51-插件

一、插件的定义 vue里面的插件,类似于游戏的外挂。 vue中插件的本质:一个对象,里面必须包含install方法。 二、插件的使用 2-1、创建一个插件js文件(写在src中plugins.js) 2-2、应用插件:Vue.use(插件) …

机器真的能思考、学习和智能地行动吗?

In this post, were going to define what machine learning is and how computers think and learn. Were also going to look at some history relevant to the development of the intelligent machine. 在这篇文章中,我们将定义机器学习是什么,以及…

【Java03】Java中数组在内存中的机制

1. 内存中的数组 Java中的数组是一种引用类型,数组变量(引用)和数组元素在内存中是分开的。 Java中的数组变量其实就是指针。 如果想要访问数组元素,只能通过这个数组的引用变量(指针)来访问。 实际数组对…

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包(F1,F4,F7,H7)■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框,等待下载…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样,某社交平台上有个兄弟发帖,说自己刚入职国企,写了个借口,用了PUT和DELETE方法,前段说不能用这两个,这位仁兄感觉很委屈,特地发帖吐槽。 其实站在安全的角度来说,真没冤枉…

MySQL 示例数据库大全

前言: 我们练习 SQL 时,总会自己创造一些测试数据或者网上找些案例来学习,其实 MySQL 官方提供了好几个示例数据库,在 MySQL 的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用 MySQL 的各种功…

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录(树根) 所有分区,目录,文件等的位置起点整个树形目录结构中,使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式(1)对称加密(2)非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…

阿里云服务器-Linux搭建fastDFS文件服务器

阿里云官网购买服务器,一般会有降价活动,这两天就发现有活动,99计划活动(在活动期内,续费都是99元) 阿里云官网-云服务器ECS 在这里,我购买了这台服务器,活动期内续费每年99元&…

[FFmpeg学习]windows环境sdl播放音频试验

参考资料: FFmpeg和SDL2播放mp4_sdl 播放mp4 声音-CSDN博客 SimplePlayer/SimplePlayer.c at master David1840/SimplePlayer GitHub 在前面的学习中,通过获得的AVFrame进行了播放画面, [FFmpeg学习]初级的SDL播放mp4测试-CSDN博客 播放…

仲恺ZK——信计专业《软件体系结构》24年试卷回忆

以下是我在总结的复习内容,有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》,两者结合起来复习,帮助你轻松过考试😊。总的来说,考试不会太难,只要你了解了各类设…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

MFC工控项目实例之三theApp变量传递对话框参数

承接专栏《MFC工控项目实例之二主菜单制作》 用theApp变量传递对话框参数实时改变iPlotX坐标轴最小值、最大值。 1、新建IDD_SYS_DATA对话框,类名SYS_DATA。 三个编辑框IDC_EDIT1、IDC_EDIT2、IDC_EDIT3变量如图 2、SEAL_PRESSURE.h中添加代码 #include "re…

【前端项目笔记】1 登录与登出功能实现

项目笔记 ☆☆代表面试常见题 前后端分离:后端负责写接口,前端负责调接口。 登录/退出功能 登录业务流程 登录页面:用户名密码 调用后台接口进行验证 通过验证,根据后台响应状态跳到项目主页 登录业务相关技术点&#xff1…

Python(三)---字符串

文章目录 前言1.创建字符串2.字符串的编码3.空字符串和len()函数4.转义字符5.从控制台读取字符串6.字符串的相关操作6.1.通过[]访问元素6.2.字符串切片slice操作6.3.字符串拼接和字符串复制6.4.split()分割和join()合并6.5.常用查找方法6.6.replace() 实现字符串替换6.7.去除首…

vulnhub靶机hacksudoLPE中Challenge-1

下载地址:https://download.vulnhub.com/hacksudo/hacksudoLPE.zip 主机发现 目标146 端口扫描 服务扫描 漏洞扫描 上面那整出来几个洞,可以试试 easy? 估计就是看源码 看来是的 登入咯 这里进不去就是ssh咯 这个看着有点像提权的操作 一…

远程桌面端口,远程桌面改端口有哪些方法

方法一:通过修改注册表 步骤一:打开注册表编辑器 按下 Windows键R 打开“运行”对话框。输入 regedit 并按 Enter 打开注册表编辑器。 步骤二:定位到远程桌面服务的端口设置 导航至第一个注册表路径:HKEY_LOCAL_MACHINE\SYSTE…

分类模型部署-ONNX

分类模型部署-ONNX 0 引入:1 模型部署实战测试:1 安装配置环境:2 Pytorch图像分类模型转ONNX-ImageNet1000类3 推理引擎ONNX Runtime部署-预测单张图像: 2 扩展阅读参考 0 引入: 在软件工程中,部署指把开发…