完成区块链应用的搭建,除了要编写和部署智能合约,还需打通业务系统和链上智能合约的交互,但在实际场景中,底层区块链和业务应用端之间的对接,往往会存在一系列的问题:
1)目前区块链底层种类多样,应用对接的方式各不相同,业务应用端往往对接成本高,逻辑复杂;
2)区块链本质上还是去中心化的数据库,某些应用场景下,业务高峰期,光一个应用的交易请求都可能导致节点瘫痪宕机。更进一步的,当对接多个应用端时,由于每一个节点都是单点,更有可能会成为限制区块链系统高可用性的瓶颈。因此,区块链管理者需要重点关注当一个或多个应用同时发起交易请求时,如何既保证交易请求不拥堵,又保证交易的成功率;
3)对接多个业务应用端时,如何保证统一的鉴权或黑白名单控制,并实现所有交易留痕审计和统一管控。
为解决上述痛点,趣链BaaS平台研发了前置代理,实现区块链的负载均衡。通过为区块链底层绑定前置代理,为其分配统一的独立网络IP,并对访问接口进行封装,实现在权限控制下业务应用端与链上节点进行通信。本文将详细介绍前置代理的原理和应用实例。
原文详见公众号: QTech
什么是负载均衡?
负载均衡(Load Balance):将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。究竟什么是“负载均衡”?我们用几个通俗例子讲解:
例一
领导安排了一个重要任务,可部门只有一个人,任务量巨大一个人无法完成,于是又招了几个人一起来处理这个任务,同时领导亲自将这个任务划分成了多个不同的小任务,并分配给不同的人。任务分配的过程就是“负载均衡”。
例二
某个打车APP,仅有一台服务器可以承载100人同时访问,然而一到早晚高峰期或者下雨天,会有1万人同时段发起打车,这段时间就会有1万多客户端对这台服务器同时发起请求。一台服务器是远远无法支撑业务的进行,那该怎么办?答案是:进行扩容,添加99台服务,用以维持1万用户对APP的访问请求。
但这也会引发很多问题,如果请求都打到一台服务器怎么办?那剩下的99台依然没有用处。这100台服务器如何分配任务?如何分配能既保证高峰期的巨大访问量,又能保证非高峰期的最低的能耗?这个时候就轮到负载均衡登场了。
区块链负载均衡如何实现?
区块链任意节点都是单点的,业务应用端在对接区块链节点时,为了保证高可用性也会连接多个节点,因此也会遇到一样的问题,应用端应该给哪个节点发送交易?这就需要采用负载均衡对应用端的请求做分配转发。
区块链本质是分布式账本,是分布在网络上多个节点或计算设备上的数据库,虽然分布在网络中的每个节点,但都是复制并存储同一个账本的副本,每一笔交易发起后会经历一段时间的节点共识,所以除了要采用传统负载均衡的随机分发、权重分类、最小连接数分发等固定策略进行分发,还需要针对区块链的真实业务量做特性适配。
比如:业务端和区块链节点之间是同步通信的,当交易量过大时,会存在交易尚未成功,业务端就无法发起新的交易,从而导致业务端拥堵的情况,如果把所有交易全发送给节点,则可能会导致节点的拥堵。所以在传统负载均衡的基础上,对业务端发送的交易做缓存处理,保证其既存在同步请求,又存在异步请求,避免业务端和节点的拥堵。
趣链BaaS与负载均衡
核心流程
联盟链管理员通过浏览器访问BaaS平台(如图步骤1),给绑定特定联盟链的访问代理配置访问凭证(AccessKey)(如图步骤2);
应用开发者自定义开发区块链应用(如图步骤0),应用端通过携带AccessKey信息申请访问联盟链,先将链上请求发送给访问代理(如图步骤3);
访问代理接收不同应用端的交易请求,将交易请求信息缓存到数据库中(如图步骤4);
通过轮询的机制、均衡的流量分发调度机制以及鉴权机制等,向节点发送交易请求(如图步骤5)确保每一笔交易发送成功,成功上链;
应用端的请求记录均会回传至BaaS平台,用户可以通过BaaS平台查看相关的访问业务指标,有全方位的掌控。
具体实践
以上一篇NFT合约为例,详见原文《看完这篇!新手也能写NFT合约》,本章将介绍如何在趣链BaaS平台内,为示例联盟链绑定前置代理,便于应用端访问示例链并调用NFT合约。
准备工作:创建示例联盟链并部署NFT合约,复制合约地址以备用。
创建前置代理并绑定示例联盟链:在前置代理创建页面内,选择示例联盟链zzhhpc2011,并选择部署前置代理的主机。在完成网络检测后,可快速完成前置代理部署。
【参数配置页】
【部署进度页】
绑定AccessKey:随后为前置代理绑定一组特定的AccessKey。
在应用端配置必要信息:将示例联盟链的信息、前置代理访问URL、NFT合约地址和AccessKey等信息配置在应用端,应用端即可调用该NFT合约。
应用端访问:应用端开发者可携带AK信息申请访问联盟链,若鉴权通过则可以访问已授权前置代理的节点,并进行调用合约实例的操作。
下图是一个可视化demo页,先以选择mint方法,在页面内的参数框内填写nft合约的部署地址、nft的所有者地址、nft编号等信息,其他方法的调用相同。
调用成功后返回如下结果:
联盟链管理员查看应用端调用记录:如下图,回到趣链BaaS平台内的前置代理页面内,可查看通过前置代理进行的调用记录详情,可帮助联盟链管理者直观洞悉不同应用端的调用情况,在实操时可根据需求自定义查询,如按客户端地址、访问节点IP、调用方法等。
总结
上例详细展示了趣链BaaS在实现区块链与链外应用端对接方面的解决方案。通过前置代理背后配置的轮询机制、均衡的流量分发调度机制以及鉴权机制等,向节点发送交易请求,确保每一笔交易发送成功,稳定上链。此外,管理员可以为不同的应用端配置不同的AccessKey以区分标记,实现应用端调用联盟链的高效管控。