PoS共识算法在多方分布式账本上的应用研究

2020-08-10 02:38罗才华
现代计算机 2020年17期
关键词:拜占庭算力账本

罗才华

(罗定职业技术学院信息工程系,罗定 527200)

0 引言

在分布式系统中,分布式数据库的共识管理是非常重要的核心技术,也是保证分布式数据库可以像传统数据库一样使用,而不需要应用去管理分布式系统中各个节点。随着分布式技术的发展,分布式数据库的共识管理方案不断在进化,而以往的分布式数据库并不考虑拜占庭容错问题,只考虑节点所在主机的网络故障、宕机等非人为问题。随着互联网发展,大数据时代的来临,企业间合作模式也越来越复杂化,甚至出现多方共同维护一个账本的场景,这时候就必须要考虑可能存在恶意节点的问题,建立网络中记账节点的选择机制,保证账本数据在全网中形成一致和正确的共识。在传统的软件结构中,因为中心服务器(主库)的存在,这从来就不是个问题,其他的从库向主库看齐就可以,但是多方分布式账本系统是一个对等网络结构,此结构中没有所谓的中心节点,一切都要商量着来[1]。

1 拜占庭将军问题

在分布式计算中,各计算机通过交换信息达成共识,并按照同一协作策略行动,但有时系统的成员计算机可能会因为硬件故障、遭到恶意攻击或网络异常而发送错误信息或损坏信息,使网络中各成员得出不同结论,从而破坏系统的一致性。拜占庭将军问题(Byzantine Generals Problem)是Leslie Lamport(莱斯利·兰伯特)在1982年提出的分布式对等网络通信容错问题[2],是对分布式共识问题的情景化描述,描述在可能存在故障节点或恶意行为条件下,分布式系统如何达成一致的共识,Leslie Lamport同时提出了该问题基于口信消息和签名消息的两种解决方案。拜占庭将军问题被认为是分布式系统容错性问题中最难和最复杂容错模型之一,是分布式共识的基础,具有正确性和一致性两个交互一致性条件。

2 分布式数据库共识机制

2.1 Paxos算法

Paxos算法是由拜占庭将军问题提出者Leslie Lamport于 1989 年在论文“The part-time parliament”中提出的一种基于消息传递且具有高度容错特性的分布式系统一致性算法[3-4],由于该论文内容过于晦涩,直到1998年才通过评审和发表。谷歌分布式锁服务Chub-by就是基于Paxos算法的应用,Paxos算法后续衍生出Abstract Paxos、Classicpaxos、Byzantine Paxos 和 Disk Paxos等变种算法,是解决异步系统共识问题最重要的算法家族[5]。基础Paxos算法定义了以下几种角色,Paxos算法模型如图1所示。

图1 Paxos算法模型图

(1)Client:客户端,向分布式系统发起提议并等待结果。

(2)Proposer:协调者,负责接收客户端发起的提议,然后尝试让接受者接受该提议,并且保证即使提议产生冲突,算法也能进行下去。

(3)Acceptor:接受者,负责对提议进行投票,同时会记录自己的投票历史。

(4)Learner:学习者,如果超过半数接受者达成共识,那么学习者就会接受该提议,并做出运算结果,返回给客户端。

2.2 Raft算法

Raft算法是斯坦福大学的Diego Ongaro和John Ousterhout提出的一种分布式一致性算法,其本质是Multi-Paxos的一个变种,Raft为了避免Paxos的复杂性通过简化模型,实现了一种更容易让人理解的共识算法,它依靠状态机和主从同步的方式,让集群各个节点之间实现数据的一致性,如图2所示。Raft主要分为选取主节点和同步数据两个阶段,首先通过多个节点之间的投票竞争来选取主节点(leader),然后在选举出来的leader基础上进行正常操作,例如日志复制、记账等,Raft算法中的节点共有leader(主节点)、follower(从节点)和candidate(参与投票竞争的节点)三种角色,Raft将共识问题分为“leader选举、记账和安全”三个相对独立的子问题[6]。

2.3 PoS共识算法

由于PoW(Proof of Work,工作量证明)算法存在算力浪费和生成新区块周期较长等问题[7],Sunny King提出了PoS(Proof of Stake,权益证明)共识算法。该算法用股权(持有数字货币的数量与时间)证明能力,币龄(持币量*持币时间)越大,记账权利越大,分配到的利息就越多,类似于财产储存在银行,该算法的前提是要求各验证者(活跃参与者)需要拥有一定的资产以供质押。PoS共识机制原理是节点把自身的货币投入PoS机制中,身份变为验证者,PoS机制在所有验证者中随机选出一个节点产生区块,投入的货币越多被选中的概率越大,通过竞争产生的记账节点将区块广播,达成一致共识后上链,并且节点数据越多网络越稳定。PoS算法设计者基于人性逐利的假设,通过用户选择了正确的区块可能会得到一定的奖励,反之支持拜占庭错误区块则有可能受到惩罚的方式,认为大部分用户都会倾向于选择正确区块,因此短期的投机行为和长期的收益基本是一致的,区块链系统是稳定的[8]。

图2 Raft算法模型图

3 PoS算法的安全性评估分析

像比特币这样的数字货币,用巨量的算力来加强网络的安全性,因为PoW算法的存在,挖矿需要消耗大量的算力,工作量证明的概念1993年首次出现在学术论文“Pricing via Processing or Combatting Junk Mail”中,而PoW算法是在1999年才被正式提出,但是直到2009年中本聪创立了比特币之后,这种技术才被大规模使用。中本聪意识到这种机制可以用来达成多节点网络环境的共识,从而保证了比特币的安全。但是,PoW算法需要所有的节点都去运算解决一个加密学的问题,这些运算者就是矿工,而第一个得到正确答案的矿工就可以得到奖励,这些奖励导致了一个情况,那就是矿工们正在建造越来越大的矿场,反而导致了区块链的算力越来越向矿池集中化,违反了去中心化的原则。为了解决这一问题,Sunny King提出了Proof of Stake的股权证明算法,PoS算法使用一种选举机制,随机在网络节点中选取一个,并且不再需要矿工,取而代之的是Validators,为了成为Validators,节点必须先抵押一定数量的Token作为Stake,抵押的数量决定了下一次选举时被选为Validators的概率大小。如果Validators让非法的交易计入区块中,那么它将付出损失部分押金的代价,只要押金比获得的交易手续费高,作弊就是不经济的,因此PoS算法总体来说是安全的。但是也不是没有缺点,PoW算法中,如果掌控了51%的算力,就可以进行欺骗的交易;而PoS算法中,如果掌控了51%的股权,同样可以做到,但是掌控51%的股权远比掌控51%的算力要困难得多,所以实际上针对PoS机制发起攻击的可能性远比PoW小。

4 PoS共识算法在多方分布式账本中的应用

传统分布式系统一致性算法Paxos、Raft不考虑拜占庭容错,即假设不存在恶意篡改和伪造数据的拜占庭节点,认为所有节点都是可信任的。因此,在很长一段时间里,传统分布式一致性算法的应用场景大多是节点数量有限且相对可信的分布式数据库环境[9]。随着社会经济转型和“大智云物移”技术的快速发展,企业间合作方式也越来越复杂化和多样化,多运营方共用一个账本的需求越来越多,例如多方企业的物联网共享数据、金融行业多方交易转账和电商平台与商家账本同步等等,每一方都有自己的机房存储账本。现在最普遍的做法就是约定时间对账清算,这种方式效率不高,如果出现账本不一致,可能还会引发信任问题。因此,迫切需要一种解决方案来保障开放、多节点(可能存在恶意拜占庭节点)和账本场景复杂环境下多方分布式账本可靠和一致问题。

从本质来看,Paxos、Raft、PoW、PoS 算法都是为了解决“谁来写”的问题,实际就是为了决定把谁作为持久化日志存储的基准,这四种共识算法对比情况如表1所示。在多活架构中,每个节点都可以进行写入操作,为了让所有节点达成一致,就必须在某个时刻所有节点向一个节点看齐。而PoS共识算法就是为了解决拜占庭容错问题、实现去中心化,也就是“异地多活”的实现。PoS共识算法不仅决定了“谁应该写”的问题,并且还能确定“写的东西是不是真实”(拜占庭问题),实现了多方账本数据真实、可靠、一致。基于此,本文对多方企业的物联网共享数据和金融行业多方交易转账提出了新的解决方案,如图3、图4所示。

表1 四种共识算法对比

图3 多方企业的物联网共享数据模型

图4 金融行业多方交易转账模型

5 结语

基于PoS共识算法能有效解决分多方布式账本中“谁来写”和“写的东西是不是真实”等问题,实现多方账本数据的真实、可靠、一致。本文以多方企业的物联网共享数据和金融行业多方交易转账为例,提出了基于PoS共识算法的多方分布式账本解决方案,有助于解决多方账本企业场景下信任合作的痛点,相对于传统定时对账清算,效率更高、选举更加透明公正,结合分布式数据库,实现多方异地数据一致性。

猜你喜欢
拜占庭算力账本
中国电信董事长柯瑞文:算力成为数字经济的主要生产力
新型算力网络架构及其应用案例分析
杭州“算力小镇”
嘟嘟熊家的百货商店(二十九)
计算万物 算力之下要有坚实的地基
数说:重庆70年“账本”展示
月亮的账本
丢失的红色账本
第四次十字军东征前的东地中海世界
拜占庭之光