区块链分布式系统核心问题

“区块链其实是一种分布式系统”

分布式系统的问题

一致性问题

在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。如果分布式系统能实现“一致”,对外就可以呈现为一个功能正常的,且性能和稳定性都要好很多的“虚处理节点”。举个例子,某影视公司旗下有西单和中关村的两个电影院,都出售某电影票,票一共就一万张。那么,顾客到达某个电影院买票的时候,售票员该怎么决策是否该卖这张票,才能避免超售呢?当电影院个数更多的时候呢?这个问题在人类世界中,看起来似乎没那么难,你看,英国人不是刚靠 投票 达成了“某种一致”吗?

注意:一致性并不代表结果正确与否,而是系统对外呈现的状态一致与否,例如,所有节点都达成失败状态也是一种一致。

共识问题

  • 提案(proposal)

为了简化理解,仍然以两个电影院一起卖票的例子。可能有如下的解决思路:每次要卖一张票前打电话给另外一家电影院,确认下当前票数并没超售;两家电影院提前约好,奇数小时内一家可以卖票,偶数小时内另外一家可以卖;成立一个第三方的存票机构,票都放到他那里,每次卖票找他询问;更多……这些思路大致都是可行的。实际上,这些方法背后的思想,将可能引发不一致的并行操作进行串行化,就是现在计算机系统里处理分布式一致性问题的基础思路和唯一秘诀。只是因为计算机系统比较傻,需要考虑得更全面一些;而人们又希望计算机系统能工作的更快更稳定,所以算法需要设计得再精巧一些。共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案。

FLP不可能原理

 三个人在三个不同房间里面投票 , ABC, C经常睡着。先别这么悲观,学术界做研究,考虑的是数学和物理意义上最极端的情形,很多时候现实生活要美好的多。例如,上面例子中描述的最坏情形,总会发生的概率并没有那么大。工程实现上多试几次,很大可能就成功了。

科学告诉你什么是不可能的;工程则告诉你,付出一些代价,可以把它变成可能。

这就是工程的魅力。那么,退一步讲,在付出一些代价的情况下,我们能做到多少?另外还有个博弈学上的概念,  科学上告诉你去赌场赌博从概率上总会是输钱的;工程则告诉你,如果你愿意接受最终输钱的结果,中间说不定偶尔能小赢几笔呢!?例如,科学上告诉我们,飞机绝对是有危险的。这是绝对的事情,不管我们做得多么安全,总是含有危险。而工程学则把它变为可能,不是不制造飞机,而是在细节防护上多做功夫。

常见分布式共识算法

  • Paxos

1990 年由 Leslie Lamport 提出的 Paxos 共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Paxos 被广泛应用在 Chubby、ZooKeeper 这样的系统中,Leslie Lamport 因此获得了 2013 年度图灵奖。故事背景是古希腊 Paxon 岛上的多个法官在一个大厅内对一个议案进行表决,如何达成统一的结果。他们之间通过服务人员来传递纸条,但法官可能离开或进入大厅,服务人员可能偷懒去睡觉。算法中将节点分为三种类型:proposer:提出一个提案,等待大家批准为结案。往往是客户端担任该角色;acceptor:负责对提案进行投票。往往是服务端担任该角色;learner:被告知结案结果,并与之统一,不参与投票过程。可能为客户端或服务端。Raft是paxos的一个简单实现

  • Raft

可靠性指标

一般来说,单点服务器系统至少能满足两个九。

 

posted @ 2019-01-19 23:59 hongxinerke 阅读(...) 评论(...) 编辑 收藏