分布式一致性协议:拜占庭将军问题
拜占庭将军问题
- 什么是拜占庭将军问题?
- 故事影射的问题
- 问题剖析
- 解决方法:区块链
- 拜占庭将军问题与PAXOS算法中的希腊民主选举问题有什么区别?
- ZAB与PAXOS什么关系?
- 如何理解2PC与3PC的区别?
- 方法一: 2PC,即二阶段模拟方式,存在问题:
- 方法二: 3PC,即三阶段模拟方式。
- 什么是脑裂?
- 如何解决脑裂?
- 仲裁机制
- 分布式授权承诺机制
- 隔离机制
- 小结
- Reference
什么是拜占庭将军问题?
故事影射的问题
- 拜占庭将军问题是一个协议问题,只有所有将军达成共识,一同攻击某个敌军,才能成功。(目的是达成共识,且结果代表大多数人的意见)
- 分散的军队,军队内可能有叛徒和敌军间谍,左右将军们的决策。在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。(在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识)
- 拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。(点对点通信,在存在消息丢失的不可靠信道上试图通过消息传递方式达到一致性是不可能的)
问题剖析
- 身份追溯
- 信息私密
- 防伪签名
- 传递规则
解决方法:区块链
随机成本(哈希算法工作量)
区块链轻而易举地解决了这一问题,它为信息发送加入了成本,降低了信息传递的速率,而且加入了一个随机元素使得在一定时间内只有一个将军可以广播信息。这里所说的成本就是区块链系统中基于随机哈希算法的“工作量证明”。哈希算法所做的事情就是计算获得的输入,得到一串64位的随机数字和字母的字符串。控制节奏(10分钟的运算量)
运算的输入数据是指节点发送的当前时间点的整个总账。当前计算机的算力使其可以实时计算出单个哈希值,但是区块链系统只接受前13个字符是0的哈希值结果作为“工作量证明”。而前13个字符是0的哈希值是非常罕见的,需要整个网络花费10分钟的时间才在数以亿计的数据中找到一个。在一个有效的哈希值被计算出来之前,网络中已经生产了无数个无效值,这就是降低信息传递速率并使得整个系统成功运行的“工作量证明”。
每个比特币交易账号可以看作一个将军
哈希算法对信息传递速率的限制加上加密工具使得区块链构成了一个无须信任的数据交互系统。在区块链上,一系列的交易、时间约定、域名记录、政治投票系统或者任何其他需要建立分布式协议的地方,参与者都可以达成一致。区块链思想:
1. 去中心化,避免依赖第三方中心平台的信任担保。 2. 只可记录,不可修改(约束)。 3. 记账有回报,记账有成本(算力)。 4. 最长账单链为有效链条(公共约束力,增加作恶算力成本)。
拜占庭将军问题与PAXOS算法中的希腊民主选举问题有什么区别?
- 拜占庭将军问题:在不可靠信道上试图通过消息传递的方式达到一致性是不可能的(Leslie Lamport证明,当叛徒不到1/3时,存在有效的算法,不论叛徒如何折腾,忠诚的将军们总能达成共识。当叛徒达到三分之一时,则无法保证一定能达成一致性)。
- Paxos算法的前提是:不存在拜占庭将军问题,即信道是安全的、可靠的,集群节点间传递的消息是不会被篡改的。
ZAB与PAXOS什么关系?
- Zookeeper Atomic Broadcast,zk原子性广播协议。
- ZAB是Paxos的工业实现,目的是构建一个高可用的分布式数据主从系统,follower是leader的从机,leader挂了可以马上从follower选一个leader。ZAB为了解决活锁问题,只允许一个进程提交提案,属于3PC提交。而leader挂了时候选举算法是2PC,所有的follower都可以提交,就是我选我。
如何理解2PC与3PC的区别?
- PAXOS算法分为贿选阶段(prepare->promise)+提议阶段(propose->accept)。
在具体的实现过程中,需要对整个选举过程进行模拟,PAXOS算法模型中,所有节点都是对等的(选举与贿选都可以),具体实现的过程中,为了解决“活锁”的问题,引入了“总统/领导”的概念(主从模式)。
方法一: 2PC,即二阶段模拟方式,存在问题:
1. 二阶段的 prepare 和 commit 中,prepare 到 commit 的过程,需要锁定资源,同步阻塞导致性能下降。
2. 主节点宕机挂掉,在选举出新的主节点之前,所有从节点阻塞。
3. commit 阶段,网络延迟、丢包导致从节点事务状态分歧(仅部分成功提交),导致整个分布式系统出现数据不一致现象。由于二阶段提交存在着诸如同步阻塞、协调者宕机后阻塞、脑裂等缺陷和问题,所以研究者们在二阶段提交的基础上做了改进,提出了三阶段提交。
方法二: 3PC,即三阶段模拟方式。
- 与二阶段相比,三阶段:
1. 引入超时机制:同时在协调者和参与者中都引入超时机制。
2. 在第一阶段和第二阶段中插入一个准备阶段:保证了在最后提交阶段之前各参与节点的状态是一致的,即三阶段提交就有 CanCommit(无锁状态)、PreCommit(无锁状态)、DoCommit 三个阶段。 - 存在问题:
1. 三阶段的超级机制,解决了阻塞问题。
2. CanCommit的预先铺垫 过渡到 PreCommit 的预备阶段,相当于让我们有理由相信 DoCommit 成功提交的几率很大,但是由于网络原因导致的数据不一致问题依然存在。
什么是脑裂?
- 脑裂:一个整体内的节点互相联系着,一切运转正常。当网络问题导致心跳检测误判原master不在了,主备切换产生新的master。而后续被判定“死”的master由于网络恢复复活,此时网络出现两个主master,出现争抢共享资源造成系统混乱、数据损坏的现象,即:脑裂。
如何解决脑裂?
仲裁机制
- 第三方检测服务器,旁观者监控所有,但是性能存在瓶颈。
分布式授权承诺机制
- 颁发的lease,给凭证,旧的master的老的凭证失效不可用,然后触发报警,人工介入更换老的master。
隔离机制
- 共享存储fencing:确保只有一个Master往共享存储中写数据。
- 客户端fencing:确保只有一个Master可以响应客户端的请求。
- Slave fencing:确保只有一个Master可以向Slave下发命令。
小结
- “脑裂问题”的本质是分布式环境由于网络不稳定,导致了分布式环境主备切换后,双主同时存在的问题,规避该问题的核心是隔离----保证系统识别得到唯一主,剔除掉失效主节点;
- 仲裁机制是引入第三方检测器的方式,定时检测保障主存活;(先验逻辑)
- lease方式则是以认证凭据方式,保障切换后,老主失效;(后置保障)
Reference
- https://www.jianshu.com/p/8bcef0ca676c(拜占庭将军问题快速理解)
- https://baike.baidu.com/item/%E6%8B%9C%E5%8D%A0%E5%BA%AD%E5%B0%86%E5%86%9B%E9%97%AE%E9%A2%98/265656?fr=aladdin(拜占庭将军问题)
- https://baike.baidu.com/item/%E4%B8%AD%E6%9C%AC%E8%81%AA/5740822?fr=aladdin(中本聪)
- https://www.jianshu.com/p/8bcef0ca676c(拜占庭将军问题快速理解)
- https://juejin.cn/post/6844904114443436039(面试官:能聊聊Paxos算法和ZAB协议吗)
- https://www.jianshu.com/p/30a18e4ef16e(2pc和3pc的详解与对比)
- https://blog.csdn.net/qq_41946557/article/details/102770531(分布式系统之Paxos选举协议)
- https://blog.csdn.net/xinquanv1/article/details/103126372(分布式脑裂问题分析)
分布式一致性协议:拜占庭将军问题相关推荐
- 简述分布式一致性协议(2pc、3pc、paxos、zab)
分布式一致性协议 二阶段提交协议(2pc) 三阶段提交协议(3pc) paxos zab 在分布式系统中,每个机器都可以确定自己进行的事务操作是否成功,但是无法直接了解其他机器的操作结果.因此,当一个 ...
- 一文说清各种分布式一致性协议
本文来说下各种常见的分布式协议 文章目录 概述 CAP定理 Base理论 2PC 2PC 阶段一 2PC阶段二 举个例子 3PC CanCommit阶段 PreCommit阶段 doCommit阶段 ...
- Paxos分布式一致性协议
为什么80%的码农都做不了架构师?>>> 源码:https://bitbucket.org/sciascid/libpaxos/src 1 前言 分布式系统中的节点通信存在 ...
- [分布式一致性协议] ------ raft协议的解释与理解
前言 在分布式系统中,为了保证容错性,一般会维护多个副本集群,提高系统的高可用,但与之带来的问题就是多个副本的一致性(consensus)问题. 我们认为,对于一个具有一致性的的集群中,同一时刻所有节 ...
- 分布式一致性协议:Raft协议
文章目录 1. Raft协议 ①:Leader选举 ②:集群节点数据同步 ③:发生网络分区,出现脑裂如何处理? 1. Raft协议 Raft协议动态演示图 nacos的CP架构是通过Raft协议来实现 ...
- 浅谈分布式一致性协议之2PC
由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phase Commitment Protocol),三阶提交协议(3 Pha ...
- raft算法_学习分布式一致性协议:自己实现一个Raft算法
前言 MIT6.824是麻省理工学院开设的一个很棒的分布式系统公开课程,课程的Schedule在这里 ,这门课程的学习方式主要是通过教授的 lecture 讲解.Paper阅读.FAQ答疑,以及实践l ...
- 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。
解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...
- 分布式一致性协议Raft,以及难搞的Paxos
Raft这玩意,网上已经有好多解读文章了,大概比Paxos还要多一些,所以,这篇,不求细节,但求核心思想方面,追一下本源,然后,给自己做个笔记. Raft是什么,它想解决什么问题? 所以Raft是什么 ...
- 分布式一致性协议三部曲-深入理解一致性协议Paxos
在理解分析分布式一致性协议前,我们必须先看下CAP理论 CAP CAP是指在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition to ...
最新文章
- 【Vue.js 牛刀小试】:第九章 - 组件基础再探(data、props)
- 如何定义一个不能被继承的类
- 自定义标签 (转载)
- SSH实现分页查询(转)
- c 语言程序设计教程 沈显君 答案,CD3计算机实践《C/C++语言程序设计》报告模板2.doc...
- 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss
- 【OS】期末总结复习
- Node.Js同步mongdb数据
- TCP 端口监听队列原理
- 剑指Offer--青蛙跳台阶引发的一系列问题
- .NET Core 3.0 本地工具
- P6222 「P6156 简单题」(反演 + 积性函数线性筛)
- oracle的dtime,Oracle时间函数
- linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...
- 搜狗Q1每天进账1886万,输入法日处理6亿请求成中国最大语音App
- Vue-Cli3 使用jquery
- 图片轮流翻转,一直循环
- 图解电动汽车:电动汽车关键技术
- 网站虚拟主机是什么?(什么是虚拟主机空间)
- 1413 权势二进制