深度学习
共识 (consensus)在很多时候会与一致性 (consistency)术语放在一起讨论。严谨地讲,两者的含义并不完全相同。
一致性往往指分布式系统中多个副本对外呈现的数据的状态。如前面提到的顺序一致性、线性一致性,描述了多个节点对数据状 态的维护能力。而共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。因此,一致性描述的是结果状态,共识则是一种手段。达成某种 共识并不意味着就保障了一致性。
实践中,要保障系统满足不同程度的一致性,核心过程往往需要通过共识算法来达成。
共识算法解决的是对某个提案(proposal)大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事 件发生的顺序、某个键对应的值、谁是领导……等等。可以认为任何可以达成一致的信息都是一个提案。对于分布式系统来讲,各个节点通常都是相同的确定性状态 机模型(又称为状态机复制问题,state-machine replication),从相同初始状态开始接收相同顺序的指令,则可以保证相同的结果状态。因此,系统中多个节点最关键的是对多个事件的顺序进行共 识,即排序。
4.2.1 问题与挑战
实际上,如果分布式系统中各个单节点都能保证以十分“理想”的性能(瞬间响应、超高吞吐)无故障地运行,节点之间通信瞬时送达,则实现共识过程并不十分复杂,简单地通过广播进行瞬时投票和应答即可。
可惜的是,现实中这样的“理想”系统并不存在。不同节点之间通信存在延迟(光速物理限制,通信处理延迟),并且任意环节 都可能存在故障(系统规模越大,发生故障可能性越高)。如通信网络会发生中断、节点会发生故障、甚至存在恶意节点故意要伪造消息,破坏系统的正常工作流 程。
一般地,把出现故障(crash或fail-stop,即不响应)但不会伪造信息的情况称为“非拜占庭错误”(non- byzantine fault)或“故障错误”(Crash Fault);伪造信息恶意响应的情况称为“拜占庭错误”(Byzantine Fault),对应节点为拜占庭节点。
4.2.2 常见算法
根据解决的是非拜占庭的普通错误情况还是拜占庭错误情况,共识算法可以分为Crash Fault Tolerance(CFT)类算法和Byzantine Fault Tolerance(BFT)类算法。
针对常见的非拜占庭错误的情况,已经存在一些经典的解决算法,包括Paxos、Raft及其变种等。这类容错算法往往性能比较好,处理较快,容忍不超过一半的故障节点。
对于要能容忍拜占庭错误的情况,一般包括PBFT(Practical Byzantine Fault Tolerance)为代表的确定性系列算法、PoW为代表的概率算法等。对于确定性算法,一旦达成对某个结果的共识就不可逆转,即共识是最终结果;而对 于概率类算法,共识结果则是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,成为事实上的最终结果。拜占庭类容错算法往往性能较差,容忍 不超过1/3的故障节点。
此外,XFT(Cross Fault Tolerance)等最近提出的改进算法可以提供类似CFT的处理响应速度,并能在大多数节点正常工作时提供BFT保障。
注意 实践中,一致性的结果往往还需要客户端的额外支持,典型情况如通过访问足够多个服务节点来比对验证,确保获取共识后的正确结果。
4.2.3 理论界限
数学家都喜欢对问题先确定一个最坏的理论界限。那么,共识问题的最坏界限在哪里呢?很不幸,在推广到任意情形时,分布式 系统的共识问题无通用解。这似乎很容易理解,当多个节点之间的通信网络自身不可靠的情况下,很显然,无法确保实现共识(例如,所有涉及共识的消息都在网络 上丢失)。那么,对于一个设计得当,可以大概率保证消息正确送达的网络,是不是就一定能保证达成共识呢?
科学家们证明,即便在网络通信可靠情况下,可扩展的分布式系统的共识问题,其通用解法的理论下限是——没有下限(无解) 。
这个结论称为“FLP不可能原理”。该原理极其重要,可以看做是分布式领域里的“测不准原理”。
提示 不仅在分布式系统领域,实际上在很多领域都存在类似“测不准原理”的约束。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=972
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区