>>返回主页
中国信通院工程师杨白雪:可信区块链测试工具发布

2019-11-08 16:10

vbox11102__GL_5095_164459_small.JPG

  首先从这个颁奖典礼前后我们这个角色是不太一样的,峰会上午是有关区块链的战略,在此之前是有关区块链的产业,但是从现在开始接下来的几个环节都是区块链的测试。区块链的测试算是区块链技术里的蓝军了,如果把区块链研发当作区块链技术的红军,那我们就是蓝军。刚才男同胞们的圆桌讨论有说过同行是冤家,但是还有一对水火不容的冤家叫做研发与测试。研发与测试的相爱相杀大家都是了解的,但是如果研发是火,那么测试就是水,水火并济才能练出好钢。好钢才配用在刀刃上。

  我们讨论今天给大家带来的这款产品,中国信息通信研究院自主研发的商用级通用区块链基准性能测试工具。我们还是以哲学三问的逻辑来,为什么要做这个事,做了什么事,怎么做的以及以后要干嘛。首先就是为什么,为什么我们要做这样的项目?中国信通院在2018和2019年进行了两个批次的区块链性能测试。测试是区块链技术质量的最后一道防线,那么为什么性能测试在里面显得尤为重要?一方面是区块链性能本来就是软件非常重要的一个性能指标,在我们的国标和IC的标准里把评价软件的质量分为了六大特性,性能是其中重要的一块。再者从这个层面上我们来看,区块链技术是不是能够解决各种各样的问题,达到某些特别好的效果?这个我们不敢认定。但是区块链技术必然有一切软件都存在的问题,这是我们测试存在的意义。

  另外就是区块链的性能跟其他的性能还不太一样的一点是,区块链的性能是受多种因素影响的。就是这个区块链的性能是受多种因素影响的,一方面从三角的内环,区块链的安全性、区块链的分布式程度和区块链的可扩展性三者是互相限制的,也就是说区块链的性能不是一个可以单一提高的部分。另外就是区块链它的性能与它的资源消耗与它的网络规模也是相互限制的,也就是说如果单一的去提高区块链的性能很有可能会影响另外两个角。所以说高性能的表现可能是有很多原因导致的,一方面现在这个蓝色的它有可能是因为降低了网络规模,降低了安全性或者增加了大量的资源消耗为代价。也有可能是它以更合理的系统架构与更优良的工程实现达到了好性能。但是这两者策略里哪一种性能提高得更加明显?显然是牺牲得越多提高得越大。

  但是我们鼓励的不应该是我们去吸收另外一些性能去成就某些性能。我们应该做的是从更好的工程实现与设计上让软件更加的流畅与可用。所以性能测试就是要去区分这两种情况。你是怎么达到的好性能?不拿来测测大家怎么知道呢?下一个就是区块链测试的基准非常重要,就是基准是什么东西?基准是一个统一的测试规范,也就是一把度量衡,一个尺子,给大家一个平台比赛大家对工程的优化程度。它存在的意义是什么呢?它对于技术供给侧的意义来说一方面可以做到技术自净,就是我可以通过这样一个公开透明的平台证明我的技术是优良的是好用的。另外一个从倒逼的角度来说它可以促进技术供给方去主动优化自己的产品结构,然后达到更好的市场推广。对于技术需求侧优势也是非常明显,从什么地方可以知道市场发展得怎么样?没有,很难,全靠广告,广告是大家见仁见智的一些看法。

  所以说有这么一个平台去测试可以让技术的需求方更好的去对市场有一个直观的把握。因此它能规划自己合理的需求。如果我们大家都说自己的性能高上天,是不是市场方,需求方就会觉得我应该有一个高上天的需求。如果我的性能没有高上天那是不是你就被淘汰了?在各方性能和性质里比较适合自己场景的一个选型,所以说这是一个对供需双方都非常有利的一件事情。因此性能测试为什么重要?因为性能重要,因为性能测试重要,因为性能测试的基准重要。既然这么重要怎么可以没有一个工具呢?所以我们基于此中国信通院自主研发了商用级的通用区块链测试工具。在这个工具上怎么做这个工具呢?一开始我们还是要梳理清楚,我们通过两年的性能测试表现,大概以这四个方块是有比较大的互相制约的因素的,部署方案,配置方案,资源环境和计算方法。在这里面部署方案和配置方案是决定了你这个产品伸缩性怎么样,然后它的安全性怎么样,范围怎么样,规模怎么样。然后这个私人环境里是规定了你的消耗怎么样,这两点其实是不可能三角里的两角。对于性能它的计算方法和它使用的这个去测试的这个交易逻辑也是对性能有比较显著的影响的。

  但是大家觉得这些里面哪些是能用工具解决的?部署和配置,这是产品自身的东西。环境是工具以外的东西。计算方法,只有计算方法是与测试工具相对来说有关系的一点。那么说我们要做一个测试工具实际上是要做什么呢?它要满足的功能实际上是一个流程管理的功能,也就是这个图的右边,大家看就是蓝色的这一部分,这才是一个测试工具,应该去着重解决的部分。但是它做的是一个流程管理的功能,但是它作为一个软件大家对它有比较高的诉求是有这个性质的,一个是指标计算一定要准确,工具一定要容易上手易用,测试工具是不能被产品压死的。另外就是通用性要好。没有好的通用性各个平台无法同时放在一个基准下进行比试。

  所以根据这样的需求我们设计了这样的功能。首先它依赖非常少,再有它要有可视化的界面,配置化的对接,尽量降低二次开发的量。另外是它有一种非侵入式的测试方式。最大程度的去保证测试报告的准确性。然后在我们整个开发的过程中,把区块链、产品,对外对接的部分抽象成了这九类的接口,这是区块链这个产品要跟外界接触,我们认为最少必须要有的接口,大家看看这些口,首先从下面三个开始看,生成账户生成交易,发送交易,区块链必须得有吧?没有这个就没有任何对外提供功能的接口了。另外上面的是区块高度,共识节点数,这是一个区块的配置上的东西,是一定会提供的。另外就是收到交易数,确认交易数,交易内容区块的内容,这是交易过程必须要提供的统计信息,我们把各种各样的区块链产品提炼出来了这九类接口,只要存在这九类接口就都可以接到这个平台上进行测试。

  另外就是如何去保证一个公平的计量指标?单一说一个性能我们觉得它是不合理的,因为性能不是一个单一的指标它是一个其他的因素限制了。我们今年的测试工具只单吞吐量有关的指标就有六个,它包含瞬时,这个平台接受到了交易数,最高接受到了交易数。最高上线的交易数都是瞬时,以及确认和发送的,把这个产品接受到的交易数和上线的交易数是分开的。大家觉得这有什么区别?其实接受到的交易数也就是TPS,它代表的是一个平台能抗压力的能力,就是我来多少东西我这个平台不会崩。但是一个平台的处理能力,这个平台的抗压能力和处理能力实际上是有差别的,我们把它做了非常明确的区分。

  另外就是除了吞吐量以外的指标我们还统计了十一个,它包含交易确认时间,这个在某些场景尤其是实时性要求高的场景非常重要。交易的实时性就是交易的确认时间变长,一定程度上可以明显的提高它的吞吐量。但是有些实时交易高的一定会对这个指标有所要求。在此给它有一定的计量。另外就是交易成功率的统计,在某些高安全的场景,交易的成功率非常重要,我们在此也有统计。另外就是每个区块包含了多少交易数以及交易的延时,这个是区块配置一个表现,大家都知道大区块相对来说容易得到更高的性能,但是不是任何场景都能用大区块去解决。我们把这些有可能跟性能有关的指标都予以了计量,尽量给大家一个公平、完整的结果。这是世界上几个主要的区块链性能工具的对比,也就是我们现在为什么在已经有工具的情况下还要去做新工具的原因。17年新加坡国立大学推出了(英文),是一个比较学术派的工具,它主要是测试了一批区块链的性能指标并且发了很好的文章。但是因为这个工具开发的时间比较早,所以它的应用性和完成度都比较差。而且它没有明显的机制,它的性能是不能横向扩展的。二次开发的工作量也比较大。2018年的时候联合华为推出了区块链测试工具(英文),作为一个大社区开源的平台,它的这个产品的优点是完成度还是很高的。但是因为它是为(英文)产品准备的,所以它的通用性会比较差。如果我不是产品我去用这个它的二次开发量可能会比较大。而且(英文)有相当大的代码量是在维护(英文)的原码而不是用来去进行测试的这部分代码。

  另外就是这个工具它的一个是二次开发,它是NOW实现的,它的性能上有一定的瓶颈。我们今年研发的首先它是云实现的,底层实现了非常完善的横向拓展能力,所以它的性能非常好。再者它是用配置对接的方法通过抽象九类接口与其他的数字平台对接的,一定程度上它的通用性是非常好的。另外就是这个产品是怎么做出来的,首先这个产品的整个开发流程经历了这么样一个过程,首先我们总结了现状,对现状进行了总结和抽象,抽象出来需要重点解决的重要的需求,然后根据这个需求去进行了工程化的实现,然后进行了测试对接并且已经进行了落地验证。设计上我们总结了需求,高层需求就是易用正确高性能,针对需求我们提出了这样的设计,比如说见面,比如说要配置对接,要有系统性的评价指标,要有很好的可扩展性,以及商用级的底层。所以我们设计了这样一种实现,我们用GS做了前端可交互的可说话界面,做了HTTP式的区块链接口对接,做了一个多指标体系的报告,并且用框架的这么一个工程进行了底层实践,实现它的商用级通用性。

  另外这是测试工具测试中的几个阶段,这是我们在2018年峰会上向大家提出的设计,非常庆幸的我们2019年把它实现了,所以重新带到峰会上给大家发布。存储交易,然后再根据任务去发送这些交易,然后这些交易执行完以后通过去获取已经落块的区块的数据去计算最终的报表。这是一个测试工具的架构图,它最底层的有一个总控,总控是涉及各个可扩展性的压力机之间的对接和通讯。设计了一个功能模块是包括监控、计算,整个工具是由事件驱动的,通过改变状态的方式去完成整个测试。高层是提供了结构化的接口验证,提供刚好的可视化的交互。这是我们首批进行测试的7家单位,全部都是以配置的方式完成对接的。共识类型,几乎涵盖了除了比特币,POW以外所有的共识类型,同时进行了三个场景的测试。这儿给大家录了一个小视频。这儿是做了四个集群,它只要把编译好的拷过去,配置项主要是压力机的就可以了,然后压力机就可以启动了。这是它的首页,它的首页包括交易数量,区块高度和上线交易的监控以及一些IP的配置项,这是接口的配置点。我们九类接口都放在这里对接。这个我们以测试机的状态会在这里显示。然后我们展示这九个接口是如何配制的,非常简单。

  这是我们以国内某著名开源联盟链社区的开源产品进行的,配置好了所有的接口都可以在这里查看。配置好之后就可以串接任务了。这是生成交易体的任务,这是生成了一百万的交易,其实已经很多了。然后再创建一个发送交易的任务,就是发送刚才生成的交易,然后这是工具就开始执行,执行这个任务。然后等待任务的执行,任务执行的过程中会有监控,实时的监控,任务启动之后监控会在这个界面显示,它会显示每个交易的时间延迟。任务执行完毕之后就开始启动执行报表了,执行报表也非常的简单,只要点一下执行就可以了。测试报表的页面等待报告生成完成,然后我们就完成了整个测试并且拿到了可视化的报告。

  这个是我们今年用这个工具测试的7个产品,测试的结果情况。这全部统计的是上链交易数不是单纯TPS,是能体现这个产品处理能力而不是抗压能力的。它今年大概的最高值大概在两万左右,中位值大概在两万这么一个数,十六节点和四节点的差距并不是非常明显。在监控中我们会发现其实在磁盘的IO里是比较容易达到瓶颈的,带宽的消耗也会比较大。也就是说在这么多的资源消耗,比较高的资源消耗之下,然后能达到这么样一个程度已经是现在处理能力里大家能期待的比较正常的值了。

  另外就是这个测试工具研发出来之后要做什么?我们准备把这个工具开源出去也寻找成熟的开源社区与我们合作。希望能有成熟的开源社区和广大愿意参与开源事业的同仁们,大家一起把区块链测试和这个工具越做越好,让我们一起用技术度量技术,用技术改变世界,站好区块链技术的最后一班岗,谢谢大家。

0