您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

共识算法与分布式一致性算法

时间:2022-07-01 09:25:19  来源:  作者:算法的秘密

分布式系统的模型


为了更容易理解分布式系统,我们先来构建一个模型。

  • 武当派因为人口增长变成 11 个办事处分散在地图各地;
  • 办事处之间的通信只能依靠信鸽;
  • 一只信鸽可能无法完全覆盖所有办事处,需要有中继村落代为传输消息。

太极拳大会的举办权不仅会为武当派带来巨大收益同时也会为办事处带来很多好处,为了产生合理的举办者,人们约定了几条规则:

  • 大会举办权从 A 和 B 两个办事处中产生,他们每一届都是候选;
  • 投票时所有办事处仅能投 A 或 B;
  • 用投票的方式产生举办者,少数服从多数。

所有办事处会为了举办权都会使出浑身解数,比如延迟发送投票结果、篡改别人的投票结果、假装没有接收到通知等等。

其实这是一个典型的分布式系统,可以看成是我们简化版的区块链网络环境,那么这个分布式系统会遇到什么样的问题呢?

分布式系统面临的问题


分布式系统面临了几个问题:一致性问题,可终止性问题、合法性问题。

可终止性可以理解为系统必须在有限的时间内给出一致性结果,合法性是指提案必须是系统内的节点提出。当然其中面对的最重要也是最基础的问题,就是我们常说的一致性问题。

一致性是指在某个分布式系统中,任意节点的提案能够在约定的协议下被其他所有节点所认可。

需要提醒你区分的一点是:这里的“认可”表示所有节点对外呈现的信息一致,而不是对信息的内容认可。

我们回到上面的例子,我们提到了所有的办事处只能投 A 或 B,其实这个投票的动作可以理解为提案。

在“投票过程被大家所认可”这个语境下,“被大家所认可”表示某个办事处投票的结果已经被记录,用于最后统计结果,而不是认可投给 A 或者投给 B,这也是我在上述强调你要注意区分的一点。

一致性体现在那里呢?


非人为恶意的意外投票过程。 非人为恶意篡改可归类为信鸽半路挂掉、信鸽迷路、信鸽送错目的地、信鸽送信途中下雨导致信件内容模糊、接收信件的人不在家、天气变化信鸽延迟送达等等。这些对应到分布式系统面临的问题就是:消息丢包、网络拥堵、消息延迟、消息内容校验失败、节点宕机等。

人为恶意篡改投票过程。 人为恶意篡改包括“精神分裂式投票”,中继篡改上一个办事处的投票信息。对应到分布式系统面临的问题就是:消息被伪造、系统安全攻击等等。发生的人为恶意篡改的过程就可以称之为系统发生了拜占庭错误(Byzantine Fault),如果系统可以容忍拜占庭错误而不至于崩溃,也就是在发生系统被恶意篡改的情况下仍然可以达成一致,我们将这样系统称作为做拜占庭容错系统。


有关分布式系统的定理


  • 第一个是 FLP 不可能性,简单来说是:即使网络通信完全可靠,只要产生了拜占庭错误,就不存在一个确定性的共识算法能够为异步分布式系统提供一致性。换句话来说就是,不存在一个通用的共识算法可以解决所有的拜占庭错误。
  • 第二个是 CAP 定理,CAP 定理是分布式系统领域最重要的定理之一,这个我们在“理解区块链的常见误区”一文中稍微讲到过。也就是在设计分布式系统的过程中,“一致性”“可用性”“分区容忍性”三者中,我们只能选择两个作为主要强化的点,另外一个必然会被弱化。

我们由 CAP 定理可以推导出严格一致性和最终一致性。严格一致性是指在约定的时间内,通常是非常短、高精度的时间内,系统达到一致性的状态,这种系统很难实现,即使实现也很难有高的性能。

可用性其实是传统技术后端架构上非常重要的指标,从单点到主备模式、从主备模式到异地多活,再到现在的 Paxos 和 Raft 协议。

分区容忍性在企业内部极少出现,尤其是中心化的服务性应用,所以很少考虑。然而区块链的 P2P 网络环境十分复杂,所以必须要保证很高的分区容忍性。

共识算法与分布式一致性算法


经典的分布式一致性算法

经典分布式一致性算法有 Raft 协议,Raft 协议是一种强 Leader 的一致性算法,它的吞吐量基本就是 Leader 的吞吐量,它无法抵御节点恶意篡改数据的攻击。

稍微复杂一点的就是 Paxos 协议,Paxos 能提供不同场合不同种类的一致性算法,所以 Paxos 有很多变种,经典 Paxos 是 Leaderless 的,有变种是强 Leader 型的,叫做 Fast Paxos。

以上两种都是不提供拜占庭容错的系统,下面介绍一种具有拜占庭容错的一致性算法。

区块链共识算法

区块链的共识算法,我在某些场合直接称作基于经济学的博弈算法,以区别于经典分布式一致性算法思路,它的整体思路就是让攻击者的攻击成本远远大于收益。

区块链中的共识算法目前具有工业成熟度的是 PoW,另外两种比较成熟的是 PoS 和 DPoS,其次还有一些变种和单一币种使用的共识算法。

在使用 PoW 共识算法的情况下,容错阈值是 50%,而 PBFT 及其变种的容错阈值是 33% 左右,这里的百分比是指作弊节点占全网节点的比例。

PoX 类的算法其实都延续了 PoW 的设计理念,相比较经典分布式一致性算法,PoX 类算法通过概率选择记账者降低了潜在的提案者,另外是延长了达成最终一致性的时间。



Tags:共识算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
共识算法:计算机如何共同达成协议并保持安全
译者 | 刘涛审校 | 重楼在去中心化网络的世界里,计算机需要在没有中心权威控制的情况下协作。共识算法是帮助它们合作并找到共同基础的关键所在。这些算法确保网络中的所有节...【详细内容】
2023-09-12  Search: 共识算法  点击:(333)  评论:(0)  加入收藏
共识算法与分布式一致性算法
分布式系统的模型为了更容易理解分布式系统,我们先来构建一个模型。 武当派因为人口增长变成 11 个办事处分散在地图各地; 办事处之间的通信只能依靠信鸽; 一只信鸽可能无法完...【详细内容】
2022-07-01  Search: 共识算法  点击:(338)  评论:(0)  加入收藏
用 Golang 快速实现 Paxos 分布式共识算法
前文《理解 Paxos》只包含伪代码,帮助了理解但又不够爽,既然现在都讲究 Talk is cheap. Show me the code.这次就把文章中的伪代码用 Go 语言实现出来,希望能帮助各位朋友更直...【详细内容】
2020-12-15  Search: 共识算法  点击:(357)  评论:(0)  加入收藏
你知道区块链这几种共识算法吗?
我们先从常见的拜占庭将军问题中理解一下什么是共识。 拜占庭将军问题 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御目...【详细内容】
2020-11-11  Search: 共识算法  点击:(295)  评论:(0)  加入收藏
共识算法Raft为什么这么流行,及原理解析
拜占庭将军问题是分布式领域最复杂、最严格的容错模型。但在日常工作中使用的分布式系统面对的问题不会那么复杂,更多的是计算机故障挂掉了,或者网络通信问题而没法传递信息,这...【详细内容】
2020-01-02  Search: 共识算法  点击:(379)  评论:(0)  加入收藏
区块链共识算法的发展现状与展望
摘 要 共识算法是区块链技术的核心要素, 也是近年来分布式系统研究的热点. 本文系统性地梳理和讨论了区块链发展过程中的 32 种重要共识算法, 介绍了传统分布式一致性算法...【详细内容】
2019-11-14  Search: 共识算法  点击:(445)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(18)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(54)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(46)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(80)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(94)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(106)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(75)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(114)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(79)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(169)  评论:(0)  加入收藏
站内最新
站内热门
站内头条