分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题

概述

拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题,探讨和论证了解决的办法。实际上,拜占庭将军问题是分布式领域最复杂的一个容错模型,一旦搞懂了它,久能掌握分布式共识问题的解决思路,还能更深刻地理解常用的共识算法,这样在设计分布式系统的时候,就能根据场景特点,更好地选择或者设计合适的算法

什么是拜占庭将军问题?

以战国时期六国抗秦的故事为主线串联

苏秦的困境

战国时期,齐、楚、燕、赵、魏、秦七雄并立,后来秦国的势力不断强大,成为东方六国的共同威胁。于是这六个国家决定联合起来,全力抗秦,以免被秦国各个击破。一天,苏秦作为合纵长,挂六国相应,带着六国的军队叩关函谷,驻军在秦国边境,为围攻秦国做准备。但是,因为各国军队分别驻扎在秦国边境的不同地方,所以军队之间只能通过信使互相联系,这时,苏秦面临一个很严峻的
问题:如何同意作战计划?

万一一些诸侯国暗通秦国,发送误导性的作战信息,怎么办?如果心事被敌人截杀,甚至被间谍替换了,又该怎么办?这些都会导致自己的作战计划被扰乱,出现有的诸侯国在进攻,有的诸侯国在撤退的情况,这时,秦国一定会趁机出兵,把它们逐一击破。

所以,如果达成公式,指定统一的作战计划呢?
这个问题其实是拜占庭将军问题的一个简化表述,也即一个典型的公式难题:如果在可能有误导信息的情况下,采用合适的通信机制,让多个将军达成公式,制订一致的作战计划呢?

二忠一叛难题

为了便于理解和层层深入,先假设只有3个国家要攻打秦国,这3个国家的三位将军,分别叫齐、楚、燕。同时因为很强大,所以只有3个国家半数以上的将军都参与进攻,才能击败敌人(假设),且在这个期间,将军们彼此之间需要通过信使传递消息,待协商一致之后,才能在同一是按点发动进攻。

例子
  • 举个例子。这3位将军各自一脸严肃地决定明天是进攻还是撤退,并让信使传递消息,按照"少数服从多数"的原则投票决定,两个人意见一致就可以了:
    1.齐根据侦察情况决定撤退
    2.楚和燕根据侦察信息,决定进攻

可是,问题来了:一旦有人暗通秦国,就会出现作战计划不一致的情况。比如齐向楚、燕分别发送"撤退"的消息,燕向齐和楚发送"进攻"的消息。撤退:进攻 = 1:1,无论楚投进攻还是撤退,都会成为2:1,这时候还是会形成一个一致的作战方案。

但是,楚这个叛将在暗中配合秦国,让信使向齐发送了"撤退",向燕发送了"进攻",那么:
1.燕看到的是,撤退:进攻=1:2
2.齐看到的是,撤退:进攻=2:1
如图所示,按照少数服从多数的原则,燕单独进攻秦军,最后的结果当然是燕寡不敌众,被秦军打败了。在这里可以看到,叛将通过发送误导信息,非常轻松地干扰了齐和燕的作战计划,导致两位终程将军被秦军逐一击破。这也是常说的二忠一叛难题
在这里插入图片描述
在这里插入图片描述

口信消息。该如何处理呢?

先来说第一个解决办法。首先,3位将军都分拨一部分军队,由苏秦率领,苏秦参与作战计划讨论并执行作战指令。这样,3位将军的作战讨论就变为了4位将军的作战计划,这能够增加讨论中忠诚将军的数量。然后,4位将军约定了,如果没有受到命令,就执行预设的命令,比如
“撤退”。除此之外,它们还约定一些流程来发送作战信息、执行作战指令,比如,进行两轮作战信息协商。为什么要进行两轮协商呢?后面再解释。

  • 第一轮:
    1.先发送作战信息的将军作为指挥官,其他将军作为副官
    2.指挥官将他的作战信息发送给每位副官
    3.每位副官将从指挥官处收到的作战信息作为他的作战指令;如果没有收到作战信息,则把默认的"撤退"作为
    作战指令
  • 第二轮:
    1.除了第一轮的指挥官外,剩余的3位将军将分别作为指挥官,向另外两位将军发送作战信息。
    2.然后,这3位将军按照少数服从多数的原则,执行收到的作战指令

为了更直观地理解苏秦地整个解决方案,接下来将演示作战信息的协商过程。会分别以忠将和叛将先发送作战信息为例来完整地演示叛将对作战计划干扰破坏的可能性

  • 首先是3位忠将先发送作战信息的情况。
    为了演示方便,假设苏秦先发起作战信息,作战指令是"进攻"。那么在第一轮作战信息协商中,苏秦向齐、楚、燕发送作战指令"进攻",如图所示
    在这里插入图片描述
  • 在第二轮作战信息协商中,齐、楚、燕分别作为指挥官,向另外两位将军发送作战信息"进攻",因为楚已经叛变了,所以,为了干扰作战计划,它会发送"撤退"作战指令,如图所示在这里插入图片描述
  • 最终,齐和燕收到的作战信息都是"进攻、进攻、撤退",按照烧出服从多数的原则,齐、燕和苏秦一起执行作战指令"进攻",实现了作战计划的一致性,保证了作战的胜利。那么如果是叛将楚先发送作战信息,干扰作战计划,结果是否会有所不同?在第一轮作战信息协商中,楚向苏秦发送指令"进攻",向齐、燕发送作战指令"撤退",如图所示
    在这里插入图片描述
  • 然后在第二轮作战信息协商中,苏秦、齐、燕分别作为指挥官,向另外两位将军发送作战信息,如图所示最终,苏秦、齐和燕收到的作战信息都是"撤退、撤退、进攻",按照少数服从多数的原则,苏秦、齐和燕执行作战指令"撤退",实现了作战计划的一致性。也就是说,无论叛将楚如何捣乱,苏秦、齐、和燕都会执行一致的作战计划,从而保证作战的胜利。
    在这里插入图片描述
  • 这个解决办法其实是在兰伯特在论文"The Byzantine Generals Problem"中提到的口信问题型拜占庭问题之解(A Solution with Oral Message):如果叛将认数位m,将军任务不能少于3m+1,那么拜占庭将军问题就能解决了,不过,作者在论文中没有讲清除一些细节:

这个算法有个前提,也就是叛将认数m,或者说能容忍的叛将数m是已知晓的。在这个算法中,叛将数m决定了递归循环的次数(也就是说,叛将数m决定了将军们要在多少轮作战信息协商),既m+1轮(例如这里只有楚是叛将,所以进行了两轮),从另一个角度理解:n位将军,最多能容忍(n-1)/3位叛将

该算法虽然能解决拜占庭将军问题,但它有一个限制,如果叛将认数为m,那么将军总人数必须不小于3m+1.在二忠一叛欸度问题中,在存在1位叛将的情况下,必须增加1位将军,将3位将军的协商共识转换位4位将军的协商共识,这样才能实现忠诚将军的一致性作战计划,那么,有没有什么办法可以在不增加将军认数的情况下之解解决二忠一叛的难题呢?

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

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

相关文章

Oracle21C 引入HR实例(linux)

1、下载资源 https://github.com/oracle-samples/db-sample-schemas点击code(代码)下载 2、上传Sql文件 解压之后将human_resources里的文件复制到demo\schema\目录(具体目录前面的路径是你安装的路径)下,如下图 3、…

【LLM】LLM API 开发

文章目录 LLM API 开发LLM入门基本概念LLM API使用实名认证创建应用使用API Prompt Engineering思考总结 参考文章 什么是提示工程(Prompt Engineering)? ChatGPT Prompt 最佳指南一 LLM API 开发 LLM入门基本概念 Prompt Prompt 最初是 NL…

TFTLCD原理硬件介绍

介绍 TFT LCD(薄膜晶体管液晶显示器)是一种广泛使用的显示技术,它结合了薄膜晶体管(TFT)和液晶显示(LCD)技术。TFT LCD的主要特点是使用TFT矩阵来控制施加到每个像素的电压,从而实现…

Rumble Club加速器哪个好用 稳定好用的联机加速器推荐

Rumble Club加速器哪个好用 稳定好用的联机加速器推荐 说到Rumble Club这款游戏,各位休闲玩家肯定不陌生,这是一款基于物理定律的在线玩家对战游戏,玩法独特且充满乐趣。玩家可以使用各种富有想象力的方式推搡、击打和超越对手,以…

通过Docker新建并使用MySQL数据库

1. 安装Docker 确保您的系统上已经安装了Docker。可以通过以下命令检查Docker是否安装并运行: systemctl status docker如果没有安装或运行,请按照官方文档进行安装和启动。 2. 拉取MySQL镜像 从Docker Hub拉取MySQL官方镜像。这里以MySQL 5.7版本为…

@Autowired和@Resource

Spring支持使用@Autowired、 @Resource、@Inject三个注解进行依赖注入。 @Component(“id”) id可选,告诉spring这是一个组件,交由spring管理, 相当于xml当中的<bean>配置。 @Autowired 默认按类型进行装配(该注解由spring提供,org.springframework.beans.factory.…

笨蛋学C++【C++基础第四弹】

C基础第四弹 11.C日期&时间12.C基本的输入输出12.1I/O库头文件12.2标准输出流&#xff08;cout&#xff09;12.3标准输入流&#xff08;cin&#xff09;12.4标准错误流&#xff08;cerr&#xff09;12.5标准日志流&#xff08;clog&#xff09; 13.C结构体13.1访问结构体成…

防水游泳耳机有哪些?热推榜4大精品游泳耳机,绝不失望!

随着科技的发展和人们对生活品质追求的提高&#xff0c;防水游泳耳机已经成为许多游泳爱好者的必备装备。它们不仅能够在水下提供清晰的音质&#xff0c;还能保证使用者的安全&#xff0c;避免因长时间水下活动而对耳朵造成损伤。然而&#xff0c;面对市场上琳琅满目的产品&…

HarmonyOS ArkUI实战开发-NAPI数据类型

在前两篇文章里笔者简单介绍了 NAPI 工程结构以及生成的 cpp 源码部分&#xff0c;其中 JS 应用层传递过来的数据被封装在了 napi_value 中&#xff0c;使用前先要转换成对应的 C/C 数据类型&#xff0c;C/C 端的数据也要转换成 napi_value 数据类型传递给 JS 应用层&#xff0…

小公司如何实现全员经营?

小公司如何实现全员经营&#xff1f;这是一个值得深入探讨的问题。全员经营不仅意味着每个员工都要参与到公司的经营活动中&#xff0c;还需要他们拥有对公司的责任感和使命感&#xff0c;以实现公司的整体目标。对于小公司而言&#xff0c;实现全员经营更是一个挑战&#xff0…

数字化革新:可视化墨水屏引领基板工艺MSAP贴膜阶段迈向无纸化高端制造应用背景

随着科技的飞速发展和环境保护意识的日益增强&#xff0c;制造印刷电路板&#xff08;PCB&#xff09;行业正面临着提升生产效率、降低资源消耗和推动绿色制造的迫切需求。 问题&#xff1a; PCB生产过程对洁净度要求高&#xff0c;传统打印的纸张会有粉尘&#xff0c;纸屑&am…

使用【node】创建本地接口

在前端开发的过程中&#xff0c;接口相关的信息一般是由后端处理好返回给前端&#xff0c;但是有时候后端不在的时候想自己写个接口进行测试是非常麻烦的。 node是前端一个不错的写接口工具 一 初始化文件 1 在新建一个空的文件夹node 进入空文件夹在&#xff0c;文件夹的地…

社会工程渗透测试教程(二)

原文&#xff1a;annas-archive.org/md5/db987a87e1478b8a8617c263c631b477 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;通过有效的威胁建模确保价值 Richard Ackroyd&#xff0c;随机风暴有限公司高级安全工程师 大多数客户意识到他们需要社会…

第25天:安全开发-PHP应用文件管理包含写入删除下载上传遍历安全

第二十五天 一、PHP文件管理-下载&删除功能实现 1.文件上传&#xff1a; 无过滤机制黑名单过滤机制白名单过滤机制文件类型过滤机制 2.文件删除&#xff1a; unlink() 文件删除函数调用命令删除&#xff1a;system shell_exec exec等 3. 文件下载&#xff1a; 修改HT…

咱们来唠唠2024年参加三下乡社会实践活动怎样联系媒体投稿?

作为一名在校大学生,我深深珍视每一次增长见识、锻炼能力的机会,每年寒暑假期间,我都积极参与学院的“三下乡”社会实践活动。这不仅是我贴近生活、体验基层的大好时机,更是我积累人生经验、拓宽视野的重要途径。每次活动结束后,按照学院的要求,我们需要将实践纪实整理成文,向各…

WebRTC直播间搭建记录

考虑到后续增加平台直播的可能性&#xff0c;笔记记录一下WebRTC相关. 让我们分别分析两种情况下的WebRTC连接建立过程&#xff1a; 情况一&#xff1a;AB之间可以直接通信 1.信令交换&#xff1a; 设备A和设备B首先通过信令服务器交换SDP&#xff08;Session Description Pr…

python国内的镜像源记录

清华大学&#xff08;推荐&#xff09;&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣&#xff08;推荐&#xff09;&#xff1a;http://pypi.douban.com/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.m…

【S32K3 MCAL配置】-7.1-GPT Driver:定时器中断-创建一个周期执行的任务

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:常用于周期点亮/关闭一个LED灯;或者精度一般的占空比为50% PWM方波;或者周期调用一个函数,在该函数中我们可以执行一些软件策略(简易的OS)。 目录(共15页精讲,基于评估板: NXP S32K312EVB-Q172,…

就业班 第三阶段(nginx) 2401--4.22 day1 nginx1 http+nginx初识+配置+虚拟主机

一、HTTP 介绍 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;HTML 文件…

2024.4.22力扣每日一题——组合总和 Ⅳ

2024.4.22 题目来源我的题解方法一 回溯记忆化方法二 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;377 我的题解 方法一 回溯记忆化 和组合总和二、三类似&#xff0c;只是需要使用记忆化记录重复的地方&#xff08;剪枝&#xff09;&#xff0c;不然时间上…