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

拜占庭将军问题

叛将先发送消息

  • 如果是叛将楚先发送作战消息,干扰作战计划,结果会有所不同吗?
    在第一轮作战信息协商中,楚向苏秦发送作战指令"进攻",向齐、燕发送作战指令"撤退",如图所示(当然还有其他情况,这里指示选择了其中一种,大家也可以尝试推导其他的情况,看看结果是不是一样).
    在这里插入图片描述
  • 然后在第二轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息附加上自己的签名,并转发给另外两位,如图所示。为了达到干扰作战计划的目的,叛将楚和燕相互勾结了。比如,燕拿到了楚的私钥,也就是燕可以伪造楚的签名,此时,燕为了干扰作战计划,给苏秦发送作战指令"进攻",给齐发送作战指令"撤退"
    在这里插入图片描述
  • 接着,在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息附加上自己的签名,并转发给另外以为,如图所示
    在这里插入图片描述
  • 最终,苏秦和齐接收到的左闸内心戏都是"撤退、进攻",按照"执行盒子最中间的指令"的约定,苏秦、齐和燕一起执行作战指令"撤退",实现了作战计划的一致性。也就是说,无论叛将楚和燕如何捣乱,苏秦和齐都能执行一致的作战计划,保证作战的胜利。
  • 需要注意的是,签名消息的拜占庭问题之解,也是需要进行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算法

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

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

相关文章

【勒索病毒恢复】.svh勒索病毒介绍及恢复方案

一、.[[backupwaifu.club]].svh勒索病毒介绍 svh勒索病毒是一种恶意软件,它通过加密受害者的文件并要求支付赎金来解锁,从而达到勒索的目的。这种病毒已经存在了数年,并且不断演变,形成了多种不同的家族和变种。如果您的数据承载着…

接口测试-笔记

Date 2024年4月23日21:19:51 Author KarrySmile 1. 前言 因为想更加规范地开发接口,同时让自己测试接口的时候更加高效,更好地写好接口文档。所以学习黑马的《接口自动化测试》课程。链接:黑马程序员软件测试接口自动化测试全套视频教程&a…

Maven基础篇6

Idea环境中资源上传与下载 具体问题本地仓库如何与私服打交道; 本地仓库向私服上传文件,上传的文件位置在哪里? 访问私服配置相关信息:用户名密码; 下载东西,需要的各种信息,需要的仓库组的…

TDengine高可用探讨

提到数据库,不可避免的要考虑高可用HA(High Availability)。但是很多人对高可用的理解并不是很透彻。 要搞清高可用需要回答以下几个问题: 什么是高可用?为什么需要高可用?高可用需要达到什么样的目标&am…

【面试经典 150 | 数组】反转字符串中的单词

文章目录 写在前面Tag题目来源解题思路方法一:模拟实现方法二:使用库函数 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略,传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下,海特伟业紧跟时代步伐,凭借其深厚…

Security用户管理(一)

Security初探(三)-CSDN博客 Security的身份验证流程: AuthenticationFilter拦截请求并将身份验证职能委托给AuthticationManager.为了实现身份验证逻辑,AuthticationManager会使用身份验证程序.为了检查用户名和密码,AuthenticationProvider会使用UserDetailsService和Passwor…

爱上JDK源码阅读-枚举类

在日常开发中,经常会用到枚举类。这篇文章主要探讨一下枚举类和普通类有什么区别,以及编译过程中偷偷做了什么事情。 知识点 枚举类的本质编译器对枚举类的改动 先看一段简单的枚举类代码: enum StatusType {ON(1) ,OFF(2);StatusType(int …

mongodb 安装问题

1. mongodb启动时显示 Illegal instruction (core dumped) mongodb 5.0之后(包括5.0) 开始使用需要使用 AVX 指令集 2.启动时报错 ERROR: child process failed, exited with 1 通过指令 bin/mongod --repair 查看报错信息 根据报错信息进行修改 3. 配置服务器添加节点时…

Ubuntu20.04安装redis5.0.7

redis下载命令: wget https://download.redis.io/releases/redis-5.0.7.tar.gz 解压到 opt目录下 tar -zxvf redis-5.0.7.tar.gz -C /opt apt install -y gcc # 安装gccapt install make # 安装make 后面执行make一直报错 make报错后清除: make …

数据结构(Wrong Question)

一、绪论 1.1 数据结构的基本概念 D 因为抽象数据类型(ADT)描述了数据的逻辑结构和抽象运算,通常用(数据对象,数据对象,基本操作集)这样的三元组来表示,从而可构成一个完整的数据结…

Unity 如何制作和发布你的 Package

一、制作你的第一个 Package Unity Package 不做过多赘述,像 URP 本质上也是一个 Package,在 Unity 中可以通过菜单栏 → Window → Package manager 来管理你当前的所有 Package 本篇文章主要介绍:如何制作并发布属于你的 Package 1.1 Pac…

配置网络设备的密码设置以及忘记密码的恢复方式以及实现全网互通

1.实验拓扑图: 2.实验需求: 1.推荐步骤 1.1配置IP: 不过多说了,较为基础(略) 2.推荐步骤 2.所有网络设备配置console接口密码 首先进入全局模式,输入以下代码(进入接口console接口0给其配置密…

在 Windows 系统上彻底卸载 TeamViewer 软件

在 Windows 系统上彻底卸载 TeamViewer 软件 References 免费版仅供个人使用 您的会话将在 5 分钟后终止 Close TeamViewer by locating the TeamViewer icon in the system tray, right click and “Exit TeamViewer”. Right click Windows start menu then Control Panel -…

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…

Swift-27-类的初始化与销毁

Swift的初始化是一个有大量规则的固定过程。初始化是设置类型实例的操作,包括给每个存储属性初始值,以及一些其他准备工作。完成这个过程后,实例就可以使用了。 简单来讲就是类的构造函数,基本语法如下: 注意&#xff…

3 命名实体识别调优化

能走到这里说明你对模型微调有了一个基本的认识。那么开始一段命名实体的任务过程,下面使用huggingface官网的数据。 1 准备模型 下面的模型自己选择一个吧,我的内存太第一个模型跑不了。 https://huggingface.co/ckiplab/bert-base-chinese-ner/tree…

在vscode上面进行分支merge的记录

前言:在我们的项目中,有两个分支:master和liutielong。现在要将liutielong分支的改动merge到master分支中。 如果master分支已经更改了,所以要先pull(这是在git bash里面的命令)。 git pull origin master…

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…

【网络安全】对称加密、非对称加密以及密钥分配

目录 1、对称加密 2、非对称加密 3、如何分配对称密钥&#xff1f; 4、如何分配非对称密钥&#xff1f; 1、对称加密 所谓对称加密&#xff0c;就是指加密密钥与解密密钥都使用相同的密钥。如下图所示&#xff0c;通信双方使用的就是对称加密密钥。//代表&#xff1a;DES和…