区块链:开放联盟链性能调优以及 Web3 应用开发的最优实践_区块链技术通俗讲解中山大学

编者按:6月以来,文昌链上业务量飞涨,618高峰期出现了卡顿、交易排队的情况。BSN运维团队红枣科技和文昌链技术支持团队边界智能通力合作,在不停服的前提下进行了系统的紧急升级及优化。6月24日,边界智能创始人曹恒出席BSN红枣CEO月度说明会,向文昌链应用开发者直播分享了网络调优进展以及文昌链开发最优实践。截至本文发出时,文昌链已经完成第一层次的调优,正在以小于4秒的平均出块时间平稳安全地支持着近250个分布式商业应用的运行。本文在24日的直播内容基础上,由边界智能CTO奚海峰做了更为详细的问题分析及分布式应用开发的建议,相信对于开放联盟链的网络运维及基于NFT技术开发Web3代表应用的开发者都会很有帮助。

如何理解目前文昌链的繁忙程度?

文昌链于2021年2月上线,免费稳定试运行了一年后,于今年3月份开始商业化运行。今年3、4月份开始,文昌链的业务量已开始快速增长。刚开始是每个月度业务量翻倍,而最近几周观察到每星期业务量也呈现指数级增长。

截止到2022年6月21日19点18分,文昌链上活跃链账户数达645万,根据链上数据估算上线应用近250个,当前在进行测试对接的应用约有300个。

截止到6月21日,文昌链链上NFT技术支持的可信数据对象总数已达797万,其中有一半以上是在6月的前3个星期产生。也就是仅6月份的前21天,文昌链上就生成了442万的可信数据对象。

给大家一些比较直观的数据帮助理解这个业务量的规模,可以参考一下业界另外一条优秀的开放联盟链的数据。据腾讯标准官方账号6月23日发布的信息,腾讯旗下的开放联盟链——至信链2021年6月上线,截止到今年5月,其在运营一年时间,支持了超过百余个平台,总用户数超过300万,发行的数字藏品超过500万。现在文昌链的链账户数645万,6月前3周的数据来看,对应数字藏品442万。

对于目前的暂时出现的性能问题,大家不用担心,边界智能在多年的行业实践中支持过许多大规模开放区块链网络和高性能分布式商业应用。我们对于包括纵向扩容和横向扩容等多种优化方法都非常熟悉并有丰富实践的经验。我们会根据业务的发展不断调优。当前我们正在测试环境中,对一些新的拓扑进行测试,并与红枣科技的团队一块协同正逐步在生产网络上部署。经过去近一周时间的优化,网络性能已经有所提升,当然确实还需要时间去和快速增长的业务量实现完全匹配。这里也和大家分享一下,为什么开放联盟链的调优不是几个小时乃至几天就能完成的工作。

为何开放联盟链的调优更为复杂?

开放联盟链是结合了公链和联盟链的技术优势,能支持非信任环境下分布式公共账本服务,并能很好地支持商业级应用需要的合规及良好的应用开发体验。

OPB的调优比公链、比联盟链都要复杂许多。

区块链应用,又叫分布式应用。我们过去一年来服务在座的开发同学,有一个感觉文昌链上大约90%+的开发者,之前并没有分布式应用的开发经验。所以大家会对中心化系统更了解一些,所以我先用中心化应用针对的中心化数据库调优为例,让大家有个直接的感受。然后我会给大家分析,为什么我说相比中心化数据库的调优,开放联盟链的调优难度是其20倍以上。

对于需要支持高并发读写的中心化应用,应用上线前就要对数据库进行规划,包括分区,如何给数据表加读写锁,索引等等。应用上线后,中心化数据库的调优可能还需一个月甚至更长的时间,监控应用访问数据库的模式,针对应用进行进一步的优化。

有人说区块链是分布式数据库,这是不准确的,我必须说区块链远远超越了分布式数据库。但就是分布式数据库的调优,也比中心化数据库增加了数据的同步、多阶段提交保持数据一致性,还有网络通讯优化等多方面的复杂度。

区块链相比分布式数据库,要解决的可不只数据同步、保证数据的一致性。区块链中共同维护可信数据账本的是节点。开放的区块链会假定每一个节点都有可能作恶,有可能给你带来错误的账本数据,甚至篡改数据。所以,它有一套非常严谨的让作恶的数据被识别,能在多节点中通过共识算法,对合法的交易进行排序和正确执行,并将结果分布式可信写入账本。共识算法可以保证分布式节点以block方式组成链式数据,在有恶意请求、网络不可靠或者黑客攻击的情况下,依然可以准确无误地运行。共识协议的执行,会产生相比分布式数据库更多的网络通讯,需要协调更多节点的信息以及本地运算结构的全网同步。正因为此,优化区块链比优化分布式数据库、中心化数据库的难度高了不止10倍的量级。

现在大家应该理解了:就是一般区块链系统调优已经很不容易,让我们来看看OPB。开放联盟链带来了创新性,为开发者和用户带来了友好体验,但它也给我们带来了新的挑战:开放联盟链的参数调优比一般的公链或者联盟链还要更难。在公有链上,应用开发者自己管理自己的节点,根据自己的应用特性优化节点。在联盟链上,一般联盟链都是服务自己封闭生态的1~2个应用,而且大多通过统一中心化的API服务支持应用。开放联盟链的优化,面对着开放多元的应用读写需求。相比公链和联盟链,OPB面对的是更多不确定的应用访问模式,其优化参数空间比公链和联盟链都大大扩大。在保证安全、开放的基础上,还要支撑它的高性能要求,这是一个挑战。

文昌链基于业界领先的Cosmos/Tendermint共识技术开发,同时结合边界智能支持合规高性能的企业级应用的工作,在开放、安全、合规等方面,有诸多先进性,它让web2的开发者也能体验良好地开发web3应用。但确实其调优不只是几个参数的调整,及简单数据索引的变化,涉及到记账节点和全节点的网络拓扑,共识速度,甚至不同节点的读写带宽,不同通讯类型信息的带宽分配等等。

尤其过去的618这一周,我们在调优的过程中,为了保证网络不停服,都是一个节点一个节点地调。当一个节点调整、重启的过程,也会影响文昌链暂时的性能。但大家放心,网络有时是慢了一些,但文昌链确保链账本正确、链资产安全、链安全持续运行。

618前后这周上链交易慢主要是以下三个方面原因造成

我们在采用更为开放的应用服务模式,支持着更为多元的应用生态。技术团队第一时间发现性能问题后展开了网络分析,并已经实施了相应的解决方案:

问题:接收用户交易的全节点跟共识节点之间的p2p连接不稳定,造成很多交易不能及时进入共识节点参与出块解决方案:优化全节点与共识节点之间p2p连接配置参数,提高连接稳定性解决状态:已解决问题:全网交易量高峰时段,每个新区块包含交易数很多,共识节点在广播和校验每个区块上耗费时间变长,造成出块间隙时间变长;虽然网络整体吞吐量增加,但单个交易的上链延迟变长,用户体验到的上链等待时间变长解决方案:优化共识算法各阶段超时时间配置参数,提高出块速度解决状态:已改善,还在持续优化参数和垂直扩展共识节点性能问题:EVM相关交易因nonce错误而上链失败,需要用户重试解决方案:这个「问题」需要应用修改上链策略,每个发交易的链账户要串行发送交易,确保前一个交易的上链状态确定后再发送下一个交易;若要提高交易并发性能,则可采用多个链账户并行发送交易解决状态:已经发布更新的FAQ和代码示例

我们正在进行哪些优化迭代计划?

除了上面实施的方案,过去这一周我们还梳理了多个层次的策略,主要包括:

节点配置拓扑的优化——完成在测试网络的验证,正在文昌链上部署,后续还在继续优化;

Tendermint共识对于EVM的优化——文昌链支持Cosmos原生NFT也支持以太坊虚拟机NFT,我们已经找到Tendermint共识对于EVM优化的方向。但是共识算法的优化是非常严谨的工作,我们会验证后同时协调全球相关开源开发者一起验证。这个工作预计需要1个多月的时间;

多全节点分级的拓扑结构设计:BSN计划下半年向社区开放全节点部署、支持有能力的厂商自行部署全节点做好准备;边界智能已经开始和红枣团队协同,开始部署BSN环境外的全节点并已经在支持AVATAAPI服务;我们也在将这样的全节点部署最优实践形成设计指导文档,方便未来有能力的应用方自己拥有自己的全节点,这也能大大改善应用访问网络的可靠性;

多语言SDK的优化以及AVATA服务性能的优化:围绕上述几点,我们在对于SDK和AVATAAPI服务进行优化,方便应用方能有体验良好的开发工具和支持资源。我们计划一个月内会在SDK及AVATA中添加包含更多最优实践的实现,提供更多方便的开发接口方便应用者使用;

节点历史数据压缩:文昌链的数据增长很快,我们已经有节点数据压缩的技术,计划两个月内完成其围绕浏览器,相关支持工具的开发和测试;

二层网络:我们已经在其他大规模网络上实现了二层网络的技术,我们计划未来几个月中完成其相关支持工具的开发和测试,同时和BSN一起探索其商业化业务模式,这样一旦有业务需求,就可以上线二层网络。通过二层网络技术,满足应用数万级别的TPS需求就变得毫无问题。

开发分布式应用有哪些最优实践建议?

分布式应用大家又叫Web3应用,是基于区块链的应用,是下一代互联网应用。分布式应用如果希望能提供用户体验良好,成本优化的应用,大家需要了解一些区块链系统的特性:

网络状况决定交易处理/上链速度:多个区块链节点根据共识算法对需要上链的事务(transaction,也可以称为交易)根据请求先后顺序排序,并在各个节点中分布式执行;节点的内存池容量有限,当事务多的时候,可能出现节点忙于其他计算,等待处理的事务无法进入内存池,因此无法得到及时处理并上链的情况,因此应用会需要链外维护队列排队,并对上链失败的事务重试;任何涉及链上数据变化的事务(交易)都会产生一定的网络费用;对于不同类型的交易而言,根据其需要的计算资源,节点处理速度也不同;每笔交易网络都需要验证,因此对多次请求而言,打包成一笔交易会比多笔交易的处理速度更快、消耗GAS更少;在共识过程中,或者就是因为网络通讯有延迟,大家需要理解区块链的各个节点可能会出现状态不一致,因此分布式应用自己的状态变量最好自己本地维护,而不是每次都到链上获取。然后分布式应用也一定不能像中心化应用一样假定你发的链上事务一定会在确定时间内完成。文昌链网络畅通时一般出块时间在3秒~10秒间。但如果堵塞的时候就会要等待比较多的区块了。

理解了这些特性,有些窍门分享:

业务设计:(1).一些比较费资源的需要计算量大的业务,比如NFT铸造,如果可以设计业务流程为提前铸造;需要更好响应的场景,比如应用用户领取NFT时,就是链上的转账交易,就会快许多;(2).也可以看看一些优秀的数藏应用和它们学习好的业务设计。最近看到鲸探就开始避免秒杀活动,而是让用户邀请好友助力来获取购买的资格。这样的设计增强了用户的社交性,更有趣,用户不用掐点去抢刷手机,体验好了许多,还避免了系统的高并发;(3).链账户创建:现在为了用户体验良好,一般都是应用在托管用户的链账户,并替用户支付GAS费用。应用可以提前准备申请好链账户,并完成GAS费代付的链上授权。等到应用用户注册时,应用只用在应用系统中进行分配。这就是应用的一个本地计算,不用等待链上的响应。上链时间的选择:避免在网络繁忙的时候进行大批量的链上交易提交,大家需要记住开放联盟链是开放地支持数百个应用。建议提前计划需要大量产生链账户、NFT铸造等链上事务的执行,给自己留出工作时间余量。文昌链提供了非常完善的区块链浏览器,可以通过浏览器非常方便地查看当前网络繁忙情况。出块时间和最近区块包含的交易笔数可以反映网络拥堵程度,可以提前去浏览器了解相关情况,避开链繁忙的高峰时间。上链方式:上面谈到了把多个事务信息打在一个交易中,又快又省GAS。可以看文昌链SDK以及API服务AVATA中的multi-msg方法。本地维护应用状态:上链操作是没法实时返回结果的,一个好的实践是应用自己离线维护sequence/nonce或本地保存operationid。

上面这些具体的实施,都可以到文昌链的GitHubFAQ找到样本。另外应用开放者还可以通过官网/公众号找到我们加入文昌链技术开发社区群。在技术社区群,我们会经常分享这些最优实践,开发者有的问题也可以问边界的技术同事,社区开发者中也不乏高手热情地给大家帮助。

文昌链是基于非常先进的Cosmos企业版IRITA开发的,Cosmos的架构支持多模块,文昌链上的NFT包括原生模块的原生NFT也有以太坊EVMNFT。原生NFT直接执行在区块链的状态机,比EVMNFT性能要好许多。同时原生NFT还具有feegrant的链上功能,可以让大家开发非常省力,用户体验好而且还省GAS费。刚才何总也分享了BSNDDC会在7月份上线这样的GAS费代付功能,可以对网络优化有不少帮助。现阶段文昌链原生NFTfeegrant的能力已经生产环境运行近4个月了。大家如果没有特别自己需要定制的智能合约开发,可以优先试一试原生NFT模块。文昌链原生NFT也正在适配DDC接口。具体原生NFT,EVMNFT还有DDC的关系,可以下次和大家说明分享。

另外对于开发分布式应用不是很有经验的开发者,我还想请大家关注文昌链的API服务平台AVATA,上面提到的最优实践如果你自己开发太费力的话,可以考虑直接使用AVATA而不是SDK来接入。AVATA已经封装了上述的最优实践,而且对于链外排队,超时重试方面也都做了服务优化,会很省大家的力气。

总之,大家有任何问题都欢迎通过边界智能的自媒体渠道找到我们,加入文昌链开发者社区群。大家可以互相帮助,不断切磋打造可信、安全且用户体验良好的分布式应用。

*本文内容源于2022年6月24日BSN文昌链月度说明会曹恒女士分享,后经补充细化,与读者共享。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

DOT数字人:数字人民币_数字货币

区块链技术 2008年11月1日,一位自称中本聪的人发表了《比特币:一种点对点的电子现金系统》一文,这标志着比特币的诞生。随着比特币价格的上涨,其底层技术区块链也开始为广为人知.

[0:0ms0-2:354ms