firstday--拜占庭之口头协议

简介: 拜占庭将军核心描述:军中可能有叛徒、却要保证进攻一致、由此发展成容错理论问题场景:拜占庭将军想要攻打一个强大的敌人、派出十只军队去包围敌人、敌人虽不比拜占庭将军、但也足以抵御5支常规军队的同时袭击、所以十只军队必须在分开的包围状态下同时攻击、除非至少...

拜占庭将军核心描述:军中可能有叛徒、却要保证进攻一致、由此发展成容错理论

问题场景:拜占庭将军想要攻打一个强大的敌人、派出十只军队去包围敌人、敌人虽不比拜占庭将军、但也足以抵御5支常规军队的同时袭击、所以十只军队必须在分开的包围状态下同时攻击、除非至少6支军队同时进攻才能攻下敌人、拜占庭军队只能依靠通信兵来协商进攻意向及进攻时间、他们却不确定是否有叛徒、他们能否找到一个分布式的协议来让他们远程协商?这就是拜占庭问题

拜占庭将军问题并不去考虑通信兵是否会截取或无法传达信息、及传递消息的信道没有问题、在研究拜占庭将军问题的时候我们假设这个信道是没有问题的、并在这个前提下 我们研究一致性和容错性、如果考虑到信道有问题就涉及到了另外一个问题:两军问题


img_6721fee808c3c4563c0744a3b0370af9.png

算法推演:

定义变量vi、作为其他将军收到的第i个将军的命令值、i将军会把自己的判断作为vi、由于叛徒的存在、各将军收到的vi值肯定不同、在定义一个函数来处理向量(v1,v2...vn)、代表了多数人的意见、各将军用这个函数的结果作为自己最终采用的命令

1、一致性

条件1:每一个忠诚的将军必须得到相同的指向指令(v1,v2...vn)或者指令集合    ---意味着忠诚的将军不一定使用i将军送来的信息指令vi、i将军也可能是叛徒、但是忠诚的将军送来的信息也可能被修改、会影响正确性

因为下面的条件2是针对单个将军、这个条件针对的是所有将军、所以我们可以改写为:

条件1:无论将军i是忠诚或是叛徒、任何两个忠诚的将军都使用相同的vi

2、正确性

条件2:若i将军是忠诚的、那其他将军必须以他送出的值作为vi

综上、问题可以简化为    一个将军i如何帮别的将军接受自己送出的值vi

也可以转换成 司令---副官 模式:

LC1:所有忠诚的副官遵守一个命令、即一致性

LC2:若司令是忠诚的、每一个忠诚的副官遵守它发出的命令、即正确性

司令副官模式下达的命令得到了有效的传达、有意义的将军会作为司令发起新的司令副官模式

拜占庭问题只要满足上面的LC1  LC2就代表算法可以解决拜占庭问题

经典模式下、有两种方法:口头协议和书面协议

口头协议:

第一轮:将军会把消息发送给所有的副官、第i个副官收到的记为Vi、

第二轮:第i个副官会怀疑将军发来的消息Vi是对还是错、于是他会问其余的副官、这样他就会得到(n-2)个副官的值、从i到i-1、没个副官都会得到剩下的n-2个副官的值vi、此时、忠诚的副官j会把子集的vj发送给其他人、而叛徒则会发送假消息

OM算法

OM(m)

1、司令将他的命令发送给每个副官

2、对于每个i、vi是每个副官i从司令那里收到的命令、如果没有命令则认为撤退、副官i在OM(m-1)中作为发令者将之发送给另外n-2个副官

3、对于每个i、和每个 j != i  、vj是副官i从第二步中的副官j(使用OM(m-1)算法)发送过来的命令、如果没收到则认为撤退、最后副官使用majority(v1...vn-1)得到命令

majority代表大多数人的命令、若不存在则认为撤退

这是一个递归算法、m代表多少个叛徒、所以说对于每个将军则至少需要m+1轮的算法才能完成

该算法保证在叛徒数量达到一个最大值(总将军数量的3/1)之下时、拜占庭问题可解 

解释:  

img_88b7e7eb995404e0f5e6dbdff2728a56.png
当m=1 n=3时   


img_d811066467874e06d18b5b7b223be8b9.png
  m=1 n=4时

当 m=2  n=7时(虽然只是多了一个叛徒、但是会出现递归)分两种情况、两个副官为叛徒、一个副官和一个司令是叛徒

两个副官为叛徒


img_80902dd89942796a147d5125a491c047.png
两个副官为叛徒

司令和副官各一个叛徒


img_b2307eb3bdb2a63ef4e419c4e8a0fed3.png
司令和副官各一个叛徒

很多系统都会出现口头协议的情况、即各个节点可以把自己的消息准确的发送出去、同时可以知道消息的来源、但是这个口头协议并不能追奔朔源、必须在四模冗余以上才能保证争取、由此引出书面协议

下一节介绍书面协议

目录
相关文章
|
4月前
共识协议的技术变迁问题之Raft协议中的日志复制如何解决
共识协议的技术变迁问题之Raft协议中的日志复制如何解决
|
4月前
|
负载均衡 数据中心 网络架构
共识协议的技术变迁问题之NOPaxos中如果发生丢包如何解决
共识协议的技术变迁问题之NOPaxos中如果发生丢包如何解决
|
6月前
|
存储 算法 前端开发
作者推荐 | 分布式协议之巅 — 揭秘基础Paxos与Raft协议如何实现分布式系统达成一致性(非变种Paxos协议)
作者推荐 | 分布式协议之巅 — 揭秘基础Paxos与Raft协议如何实现分布式系统达成一致性(非变种Paxos协议)
564 0
|
移动开发 算法 架构师
常见分布式协议和算法的说明和对比
常见分布式协议和算法的说明和对比
|
存储 算法 架构师
【架构师指南】带你彻底认识 Paxos 算法、Zab 协议和 Raft 协议的原理和本质
【架构师指南】带你彻底认识 Paxos 算法、Zab 协议和 Raft 协议的原理和本质
1574 0
【架构师指南】带你彻底认识 Paxos 算法、Zab 协议和 Raft 协议的原理和本质
|
算法
分布式学习十:ZAB协议
分布式学习十:ZAB协议
103 0
分布式学习十:ZAB协议
|
BI
一种拜占庭共识协议-Byzantine Agreement,Made Trivial
## 前言 周六看了几遍Silvio Micali的论文`Byzantine Agreement,Made Trivial`, 理解上比以前深刻了一些。今天准备把论文叙述一遍,不会一字一句翻译,基本是自己的理解。文字记录下来理解会更深一点, 也做为接下来和守敬老师讨论的基础。 ## 介绍 拜占庭共识在几十年间已经吸引了众多前辈投入研究, 本论文提供了一种简单可操作的拜占庭共识协议, 容错
3670 0
|
索引
白话-raft协议(三)
1 特殊场景-投票环节follower的赞成和拒绝 在集群的每一次重新选举过程中,总会有一个节点首先成为candidate,然后向其他节点发起投票请求。这时由于各种情况,follower节点需要根据自身的当前状态选择是投赞成票还是拒绝票.
1719 0
白话-raft协议(二)
raft协议特殊场景分析
840 0