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

拜占庭将军问题

叛将先发送消息

  • 如果是叛将楚先发送作战消息,干扰作战计划,结果会有所不同吗?
    在第一轮作战信息协商中,楚向苏秦发送作战指令"进攻",向齐、燕发送作战指令"撤退",如图所示(当然还有其他情况,这里指示选择了其中一种,大家也可以尝试推导其他的情况,看看结果是不是一样).
    在这里插入图片描述
  • 然后在第二轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息附加上自己的签名,并转发给另外两位,如图所示。为了达到干扰作战计划的目的,叛将楚和燕相互勾结了。比如,燕拿到了楚的私钥,也就是燕可以伪造楚的签名,此时,燕为了干扰作战计划,给苏秦发送作战指令"进攻",给齐发送作战指令"撤退"
    在这里插入图片描述
  • 接着,在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息附加上自己的签名,并转发给另外以为,如图所示
    在这里插入图片描述
  • 最终,苏秦和齐接收到的左闸内心戏都是"撤退、进攻",按照"执行盒子最中间的指令"的约定,苏秦、齐和燕一起执行作战指令"撤退",实现了作战计划的一致性。也就是说,无论叛将楚和燕如何捣乱,苏秦和齐都能执行一致的作战计划,保证作战的胜利。
  • 需要注意的是,签名消息的拜占庭问题之解,也是需要进行m+1轮(其中m为叛将数,即如果只有楚、燕是叛变的,那么就进行3轮)协商。我们也可以从另外一个角度理解:n位将军,能容忍(n-2)位叛将(只有一位忠将没有意义,因为此时不需要达成共识)。另外,签名消息型拜占庭问题之解,解决的是忠将们如何就作战计划达成共识的问题,也即只要忠将们执行了
    一致的作战计划就可以了,它不关心这个共识是什么,比如在适合进攻的时候,忠将们可能执行的作战计划是撤退,也就是说这个算法比较理论化。关于这一点,这个算法解决的是共识问题,没有与实际场景结合,是很难在实际场景中落地的。在实际场景中,可以考虑改进后的拜占庭容错算法,比如PBFT算法

拜占庭容错算法和非拜占庭容错算法,应该如何选择呢?

为了帮助大家理解拜占庭将军问题,前面讲了苏秦协商作战的故事,现在让我们跳回到现实世界,回到计算机世界的分布式场景中:

  • 1.故事里的各位将军可以理解为计算机节点
  • 2.忠诚的将军可以理解为正常运行的计算机节点
  • 3.叛变的将军可以理解为出现故障并会发送误导信息的计算机节点
  • 4.信使被杀可以理解为通信故障、信息丢失
  • 5.信使被间谍替换可以理解为通信被中间人攻击,攻击者在恶意伪造信息和劫持通信

需要注意的是,拜占庭将军问题描述的是最困难,也是最复杂的一种分布式故障场景,该场景除了存在故障行为,还存在恶意行为。在存在恶意行为的场景中(比如在数字货币的区块链技术中),我们必须使用拜占庭容错算法还有PBFT算法、POW算法。在计算机分布式系统中,最常用的是非拜占庭容错算法,即故障容错(Crash Fault Tolerance, CFT)算法。
CFT算法解决的是分布式系统中存在故障,但不存在恶意节点的场景下的共识问题。也就是说,这个场景可能会丢失消息或者有消息重复,但不存在错误消息或者伪造消息的情况,常见的CFT算法有Paxos算法、Raft算法、ZAB协议。那么,如何在实际场景中选择合适的算法类型呢?如果能确定该环境中各节点是可信赖的,不存在篡改消息或者伪造消息等恶意行为(例如DevOps环境中的分布式寻址系统),推荐使用非拜占庭容错算法;
反之则推荐使用拜占庭容错算法,例如区块链中使用Pow算法

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python+Selenium+Pytest的Dockerfile如何写

使用 Dockerfile 部署 Python 应用程序与 Selenium 测试 在本文中,我们将介绍如何使用 Dockerfile 部署一个 Python 应用程序,同时利用 Selenium 进行自动化测试。我们将使用官方的 Python 运行时作为父镜像,并在其中安装所需的依赖项和工具…

【白菜学习问问问系列】if __name__ == ‘__main__‘:怎么理解

可以让.py文件既可以当成一个模块调用,也可以单独的作为一个函数执行

用html画一个四叶草

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>四叶草</title> <link href"" rel"stylesheet"> <link rel"stylesheet" href"css/style.css&q…

经典的目标检测算法有哪些?

一、经典的目标检测算法有哪些&#xff1f; 目标检测算法根据其处理流程可以分为两大类&#xff1a;One-Stage&#xff08;单阶段&#xff09;算法和Two-Stage&#xff08;两阶段&#xff09;算法。以下是一些经典的目标检测算法&#xff1a; 单阶段算法: YOLO (You Only Loo…

vue项目使用百度地图

打开百度地图开放平台 百度地图开放平台 | 百度地图API SDK | 地图开发 在控制台新建应用 复制访问应用的ak 可修改地图样式 使用部分 <!-- 引入地图 --><div class"main-aside"><div id"b-map-container"></div></div> …

Stable Diffusion WebUI 使用 LoRA 调整风格——详细教程

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本教程旨在深入探讨 LoRA 模型的奥秘&#xff0c;涵盖其基本概念、独特作用以及实操指南。我们将从下载和使用LoRA的步…

详解数据结构:队列(含栈与队列扩展)

一、顺序队列 有一种线性序列&#xff0c;特点是先进先出&#xff0c;这种存储结构称为队列。队列也是一种线性表&#xff0c;只不过它是操作受限的线性表&#xff0c;只能再两端操作&#xff1a;一端进、一端出。进的一端称为队尾&#xff0c;出的一端称为队头。队列可以用顺…

贪心算法在单位时间任务调度问题中的应用

贪心算法在单位时间任务调度问题中的应用 一、引言二、问题描述与算法设计三、算法证明四、算法实现与效率分析五、C语言实现示例六、结论 一、引言 单位时间任务调度问题是一类经典的优化问题&#xff0c;旨在分配任务到不同的时间槽中&#xff0c;使得某种性能指标达到最优。…

RTU遥测终端为城市排水安全保驾护航!

近年来&#xff0c;全球气候变迁与城市化进程不断加速&#xff0c;导致强降雨事件频发&#xff0c;道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水&#xff0c;严重阻碍了人民的出行&#xff0c;甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…

elasticsearch-8.1.0安装记录

目录 零、版本说明一、安装二、使用客户端访问 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)elasticsearch elasticsearch-8.1.0-linux-x86_64一、安装 systemctl stop firewalld.servicesystemctl disable firewal…

MATLAB 数据类型

MATLAB 数据类型 MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名&#xff0c;它就创建变量并分配适当的内存空间。 如果变量已经存在&#xff0c;那么MATLAB将用新内容替换原始内容&#xff0c;并在必要时分配新的存储空间。 例如&#xff0c; Tota…

【Linux】深入理解Linux文件系统与日志分析

目录 一、inode与block 1.block与inode概述 2.inode的内容 3.inode号码 4.inode的大小 5.访问文件的简单流程 6.inode的特殊作用 7.通过indoe号删除rm常规方法删除不掉的文件 二、硬链接和软链接 三、恢复误删除的文件 1.恢复EXT类型的文件 示例 2.xfs类型文件备份…

通信场景:动态调整对象池大小

通信场景&#xff1a;动态调整对象池大小 文章目录 通信场景&#xff1a;动态调整对象池大小前言历史通信量队列长度系统资源响应时间结语 前言 在做通信相关的开发时&#xff0c;使用对象池管理用于存放接收数据的内存块&#xff0c;是一种常见的优化技术。特别是在需要频繁分…

jvm中的引用类型

Java中的引用类型 1.强引用 一个对象A被局部变量、静态变量引用了就产生了强引用。因为局部变量、静态变量都是被GC Root对象关联上的&#xff0c;所以被引用的对象A&#xff0c;就在GC Root的引用链上了。只要这一层关系存在&#xff0c;对象A就不会被垃圾回收器回收。所以只要…

洛基计划project loki加速器推荐 免费低延迟联机加速器分享

洛基计划project loki加速器推荐 免费低延迟联机加速器分享 《洛基计划》是一款团队PVP游戏&#xff0c;融合有动作、英雄设计、大逃杀等元素&#xff0c;由前拳头游戏、Bungie和暴雪娱乐员工创立的新工作室Theorycraft Games共同发布。《洛基计划》汇集了一些大型团队PVP游戏…

原生js实现一个简化版的h函数

原生js实现一个简化版的h函数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

轻量和ECS对比:阿里云轻量应用服务器和云服务器有啥区别?

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网aliyunfuwuqi.com整理ECS和轻量应用服务器区别对照表&#xff0c;可以在阿里云CLUB中心领取 aliyun.…

HTML5+CSS3小实例:炫彩荧光线条登录框

实例:炫彩荧光线条登录框 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…

OpenTelemetry-2.Go接入Jaeger(grpc,gin-http)

目录 1.什么是OpenTelemetry 2.搭建jaeger 3.链路追踪 本地调用 远程调用 GRPC proto server端 client端 Gin-HTTP 调用流程 api1 api2 grpc 4.完整代码 1.什么是OpenTelemetry 参考&#xff1a;OpenTelemetry-1.介绍-CSDN博客 2.搭建jaeger 参考&#xff1a;…

第100+6步 ChatGPT文献复现:ARIMAX预测新冠

基于WIN10的64位系统演示 一、写在前面 我们继续来解读ARIMAX模型文章&#xff0c;这一轮带来的是&#xff1a; 《PLoS One》杂志的2022年一篇题目为《A data-driven eXtreme gradient boosting machine learning model to predict COVID-19 transmission with meteorologic…