此文已由作者苏州授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验
1.区块链系统长期的痛
众所周知,吞吐量一直是区块链的一个痛点。比特币的底层设计仅支持每秒7笔交易,还不及传统支付工具Visa每秒8000笔交易的一个零头,更别说支付宝在去年双十一创造的每秒25.6万笔的记录。这严重制约了去中心化应用的发展。去年以太猫风靡全球,造成了以太坊的大堵塞,以至于人们戏称用是否造成区块链堵塞来评价去中心化应用的热度。关于区块链系统的性能提升也是业界当前研究的一个主流方向,那么接下来就由本人来说说区块链系统的性能瓶颈在哪?区块链系统性能可以提升到多少?区块链系统适不适合高并发场景下的应用呢?
本文主要从联盟链的角度出发进度性能优化角度的提升,主要考虑是因为在实际项目实践中多以联盟链为主,而且联盟链相比公链来说,基于联盟链的特点系统提升的空间将会更大些。
2.区块链的性能瓶颈在哪
首先,我们来说说区块链的性能瓶颈在哪?知道性能瓶颈才可以针对性的下药嘛。根据本人对于以太访的实践和学习,总结了以太访中的性能瓶颈要点,部分要点已经成为了业界的共识。
1)共识算法
共识算法是区块链系统的核心,也是区块链系统公平公正性的保障。本人认为区块链系统的最大的创新在于其共识机制。首先,来说说以太访公链POW算法,简单来说POW算法就是通过选取网络中“最聪明”节点的算法,该算法能够很好的保证公平性,但是该算法存在能源浪费严重,出块效率低的问题。当然除了POW算法外,像其他的POS、DPOS、PBFT等等共识算法,都存在一个瓶颈,就是共识算法在某单点的时间上都只有一个节点且某块,在出块方面永远都是串行的,无法并行出块。区块链系统的TPS性能和区块的出块速度有着直接的关系,也是本人认为在做项目中首要考虑的因素。
(特别想强调下,有很多人认为只有POW是去中心化的,本人认为没有真正意义上的去中心化的说法,POW也是会被算力强的部分节点中心后,80%的出块权力掌握在20%的节点手中,而且在实际做项目中我们也不要被去中心化给带偏)。
2)P2P网络
以支付宝以及双十一的TPS的并发量来推演区块链领域。d为交易大小,TPS是35万笔每秒,P是需要转发的交易数,D是每秒需要处理的数据总量,Td是每秒钟网络接收和数据发送的总量。如果区块链要达到这样的一个性能指标的话,每秒钟需要处理的数据传输,网络传输至少是50M,也就是每秒钟节点之间数据传输需要达到50M/每秒。对于一些好机房来说可以实现,但是对于一般网络挑战就非常大了。(本人比较懒,就引用了汪晓明《如何通过软硬件结合打破区块链性能瓶颈》的说法)
3)交易执行
说起交易执行,就要说说区块链系统的特点,简单来说区块链系统其实是一个“很笨的状态机”,干着一件“所有节点都在做同样的事”的特点,看似区块链有成千上万个分布节点,干着却是单机一样的事,可以肯定的说“区块链是一个零并发系统”。为什么说“零并发”,因为交易顺序执行、交易指令顺序执行、所有交易都是单机执行。
4)签名验证
签名验证主要是从单机执行的角度出发,根据本人的实际测试验证签名在单机交易执行时间上的占比1/3左右。从市场上来说,已经有很多的关于区块链加解密的硬件出来,也充分说明了签名验证对于区块链系统性能的影响。
5)数据存储
下载过以太访或者比特币的同学就知道,等把全链数据下载完你的磁盘空间就基本没剩下多少了。另一方面,如果在大并发情况下,对于数据的读写性能要求也会更加。
3.那么如何提升区块链的性能呢?
性能提升的思路简单一句话概况为“模块拆分、数据并发、业务剥离、网络分组”。以太访源码(EthereumJ,本文都是以Java版本为前提说的,本人本人主要对GO语言不是很熟悉)为单个工程项目,包含账户管理、共识、网络、数据存储、P2P、RPC模块等。
免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐
更多网易技术、产品、运营经验分享请点击。