当前位置: 首页 > news >正文

分布式理论:拜占庭将军问题

分布式理论:拜占庭将军问题

  • 介绍
    • 拜占庭将军的故事
    • 将军的难题
  • 解决方案
    • 口信消息型拜占庭问题之解
      • 流程
      • 总结
    • 签名消息型拜占庭问题之解
  • 总结

介绍

拜占庭将军问题是对分布式共识问题的一种情景化描述,由兰伯特于1082首次发表《The Byzantine Generals Problem》中提及,它是分布式领域最复杂的一个容错模型, 它描述了如何在存在恶意行为的情况下使分布式系统达成一致,了解拜占庭问题对于掌握分布式共识问题具有深刻意义。

拜占庭将军的故事

拜占庭帝国的几只军队此时驻扎在敌人的城墙之外,每个军队都有专门的将军来指挥,但因为各只军队分别驻扎在敌城的不同地方,将军之间只能通过信使来相互联系。再某天观察完敌情之后,将军们决定制定一个共同的作战计划,同时进攻或者撤退,因为敌人非常强大,至少有半数的军队同时发动进攻时才能取得胜利。此时,将军们遇到了难题:如何统一大家的作战计划?

将军的难题

首先,如果将军之间都是忠诚于拜占庭帝国的,那么很容易统一作战方案,只需要所有的将军之间彼此通信交换自己的意见(进攻还是撤退),最后所有的将军根据 少数服从多数 的原则来行动。

这里假设只有三支军队A, B, C, 其中 A, B 认为应该进攻,C认为应该撤退,将军之间的通信如下:

进攻
进攻
撤退
进攻
撤退
进攻
A
B
C

通过协商,所有的将军最后的行为都是统一的进攻,于是大破敌城!
但是,如果有将军私通敌国,发送误导性的信息这样的共识协商还能保证作战计划统一吗?答案无疑是否定的,假设现在B将领是叛将,故意给A,C发送不一样的信息,情况会发生改变:

进攻
进攻
撤退
撤退
撤退
进攻
A
B
C

A看到的是,撤退:进攻 = 1 :2
C看到的是,撤退:进攻 = 2 :1
接下来,按照少数服从多数的原则,A会独自发动进攻,当然,最后会因为寡不敌众而被敌军消灭。可以看到,叛将通过发送误导信息,非常轻易的干扰了其他将军的作战计划,导致忠于拜占庭帝国的将军被逐一击败,这就是著名的两忠一叛难题。忠诚的将军该如何统一作战计划呢?

解决方案

兰伯特的论文除了提出拜占庭将军之外,也给出了两种解决拜占庭将军问题的算法

  • 口信消息型解决方案
  • 签名消息型解决方案

接下来,我会分别介绍这两种做法,如果你觉得逻辑有点绕的话,建议找张纸比划比划。

口信消息型拜占庭问题之解

口信型拜占庭之解的核心是选择出一个指挥官和进行多轮信息协商。下面来介绍具体的协商流程:

流程

首先,我们假设现在有A, B, C, D四位将军,并且其中只有D为叛将。在这个解法之中,我们首先要选择出一个将军作为指挥官,其他的将军作为副将,这里我们先让忠诚的将领A作为指挥官,与先前的协商方式不同,在这个算法中,我们需要进行2次作战协商,接下来来看两次协商的流程:
第一轮:由指挥官向所有的副将发送作战信息,每位副官将从指挥官处收到的信息作为自己的作战指令;

进攻
进攻
进攻
A
B
C
D

第二轮:三位副将之间进行作战信息协商,互相告知彼此指挥官发送的信息,其中,因为D是叛将,他会告诉两个将军不同的信息来误导他们

进攻
进攻
进攻
进攻
撤退
进攻
B
C
D
A

可以发现,虽然叛将像先前一样向两个将军发送了不同的信息,但是B,C根据少数服从多数的原则,依旧可以做出和A一样的作战行为,最后大破敌军。

也许你会想,如果指挥官是叛将呢?情况会变回糟糕吗?答案是否定的,即使指挥官是叛将,所有的忠诚的将军依然可以统一作战行为,我们假设叛将D作为指挥官先发送作战信息, 他会发送误导的错误信息,试图让其中一位将领独自发动进攻:

进攻
撤退
撤退
D
B
C
A

在第二轮的作战信息协商中,三位忠诚的副将彼此之间互通指挥官发送的消息:

进攻
进攻
撤退
撤退
撤退
撤退
B
C
A
D

最终,所有的将军收到的作战信息都是"撤退,撤退,进攻",根据少数服从多数的原则,A, B, C将撤退,达成统一的行为,保证了作战计划的一致性。

总结

这个算法虽然可以保证无论叛将如何捣乱,我们都能做出一行的行为,但是这是有前提的。在兰伯特的论文中指出:如果叛将人数为m,将军人数不能少于3m+1,只有这样,口信型拜占庭将军之解才能生效。或者说,这个算法对于能容忍的叛将数m是已知的,而且m决定了要执行多少次作战协商,即 m + 1 轮(现在你知道为什么三忠一叛的场景中为什么我们要进行两次作战协商了)。该结论具体的推导,可以参考论文。

但是我们还是没能解决两忠一叛的问题,因为忠诚的将军数量不够,此时就可以考虑第二种拜占庭问题的解法了。

签名消息型拜占庭问题之解

签名消息型拜占庭问题之解的核心是信息要格外实现以下两个特性

  • 将军的签名信息无法伪造,对其签名信息的内容进行任何的修改都会被发现
  • 任何将军都能能力验证将军签名信息的真伪

这样,两忠一叛难题就能够被解决了,在这种算法下,需要指挥官首先发动作战协商,然后其余的将军彼此交换指挥官带来的消息。我们以A, B 为忠诚将军,C为叛将来推导解释:
首先假设A为首先发送信息的指挥官:

进攻
进攻
A:进攻
A:撤退
A
B
C

因为将军的签名信息的伪造会被发现,所以B收到C的作战请求的时候,会发现A的作战请求已经被C修改,B会执行A直接发送给他的进攻命令,大破敌军。

如果是叛将C先发送作战信息,结果也不会改变:

进攻
撤退
C:进攻
C:撤退
C
B
A

A, B在进行协商后会发现C给两人发送的作战信息不一致,此时可以先处理叛将,再重新制定作战计划。

总结

现在让我们回到计算机世界的分布式场景中:

  • 拜占庭的将军,代表着计算机节点,
  • 忠诚的将军指的是正常运行的计算机节点
  • 叛变的将军可以认为是出现故障,并且会发送误导信息的计算机节点

这样你是否理解了拜占庭将军问题代表的计算机分布式场景问题呢?实际上以上提到的两种算法还能解决如下的问题:信使被杀或者信使被间谍替换等。

这里强调一下,拜占庭将军问题强调的几乎是最困难也最复杂的一种分布式故障场景,计算机节点不仅存在故障,甚至还存在恶意行为,对于存在恶意节点的场景中,我们必须使用拜占庭容错算法。

相关文章:

分布式理论:拜占庭将军问题

分布式理论:拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述,由兰伯特于1082首次发表《The Byzantine Generals Prob…...

从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx

安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者:胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件,这个事件是 K8s 原生的事件,其实绝大多数的用户并不会关心,同时也可能看不懂。而事件中心,是希望能够…...

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...

使用VBA快速将文本转换为Word表格

Word提供了一个强大的文本转表格的功能,结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格,表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...

力扣题解1870

这道题是一个典型的算法题,涉及计算在限制的时间内列车速度的最小值。这是一个优化问题,通常需要使用二分查找来求解。 题目描述(中等) 准时到达的列车最小时速 给你一个浮点数 hour ,表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中,Run Keyword If 是一个条件执行的关键字,它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法: Run Keyword…...

虚拟机ip突然看不了了

打印大致如下: 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段,可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式,这样它就会获得与主机相同的IP地址,从而处于同一网段。或者,您可以使用…...

LeetCode[中等] 763. 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 思路 贪心…...

Java LeetCode每日一题

997. 找到小镇的法官 package JavaExercise20241002;public class JavaExercise {public static void main(String[] args) {int[][] array {{1,3},{2,3},{3,1}};Solution solution new Solution();System.out.println(solution.findJudge(3, array));} }class Solution {pu…...

数据结构--集合框架

目录 1. 什么是集合框架 2. 背后所涉及的数据结构以及算法 2.1 什么是数据结构 2.2 容器背后对应的数据结构 1. 什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 int…...

Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影

针对Win10鼠标频繁自动失去焦点的问题,可以尝试以下解决方案: 一、修改注册表(最有效的方法-重启之后立竿见影) 打开注册表编辑器: 按下WindowsR组合键,打开运行窗口。在运行窗口中输入“regedit”&#x…...

智能涌现|迎接智能时代,算力产业重构未来

前言 OpenAI首席执行官山姆奥特曼在《智能时代》中描绘了一个令人振奋的未来图景,其中算力产业将扮演至关重要的角色。奥特曼预测,我们可能在“几千天内”迎来超级智能,这一进程将极大加速社会结构的智能化转型。 这一预测与算力产业的未来…...

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…...

【前端开发入门】css快速入门

目录 引言一、css盒模型1. 盒模型概念2. 盒模型案例 二、css编写1. html文件内部编写1.1 标签style属性编写1.2 css选择器关联1.2.1 id选择器1.2.2 class选择器1.2.3 标签选择器1.2.4 css选择器作用域1.2.5 其他选择器1.2.6 各css选择器优先级 2. 单独维护css文件2.1 创建css文…...

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式&#xff08;List&#xff0c;Set&#xff0c;Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…...

D25【 python 接口自动化学习】- python 基础之判断与循环

day25 for 循环 学习日期&#xff1a;20241002 学习目标&#xff1a;判断与循环&#xfe63;-35 for 循环&#xff1a;如何遍历一个对象里的所有元素&#xff1f; 学习笔记&#xff1a; for 循环与while循环的区别 for循环的定义 使用for循环遍历序列 使用for循环遍历字典…...

HTTP1.0和HTTP1.1有什么区别

HTTP/1.0 和 HTTP/1.1 是两个不同版本的 HTTP 协议。虽然它们的核心功能都是提供网页数据传输&#xff0c;但 HTTP/1.1 对 HTTP/1.0 做了很多改进&#xff0c;提升了性能和灵活性。以下是它们的主要区别&#xff1a; 1. 持久连接&#xff08;Persistent Connection&#xff09…...

卡夫卡的理解

一、架构理解 在这个单聊新架构中&#xff0c;涉及多个服务器组件共同协作来实现单聊功能。 ChatAccessServer&#xff1a;可能负责处理单聊相关的访问请求&#xff0c;比如用户登录单聊以及发送单消息的请求接入。ChatHttpPushServer&#xff1a;推测其用于通过 HTTP 协议推…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...