1

区块链负载均衡:「多碗水端平」

 2 years ago
source link: https://www.ccvalue.cn/article/1397415.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

区块链负载均衡:「多碗水端平」

 •  12 小时前
通过前置代理背后配置的轮询机制、均衡的流量分发调度机制以及鉴权机制等,向节点发送交易请求,确保每一笔交易发送成功,稳定上链。此外,管理员可以为不同的应用端配置不同的AccessKey以区分标记,实现应用端调用联盟链的高效管控。

完成区块链应用的搭建,除了要编写和部署智能合约,还需打通业务系统和链上智能合约的交互,但在实际场景中,底层区块链和业务应用端之间的对接,往往会存在一系列的问题

1)目前区块链底层种类多样,应用对接的方式各不相同,业务应用端往往对接成本高,逻辑复杂;

2)区块链本质上还是去中心化的数据库,某些应用场景下,业务高峰期,光一个应用的交易请求都可能导致节点瘫痪宕机。更进一步的,当对接多个应用端时,由于每一个节点都是单点,更有可能会成为限制区块链系统高可用性的瓶颈。因此,区块链管理者需要重点关注当一个或多个应用同时发起交易请求时,如何既保证交易请求不拥堵,又保证交易的成功率;

3)对接多个业务应用端时,如何保证统一的鉴权或黑白名单控制,并实现所有交易留痕审计和统一管控。

为解决上述痛点,趣链BaaS平台研发了前置代理,实现区块链的负载均衡。通过为区块链底层绑定前置代理,为其分配统一的独立网络IP,并对访问接口进行封装,实现在权限控制下业务应用端与链上节点进行通信。本文将详细介绍前置代理的原理和应用实例。

什么是负载均衡?


负载均衡(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以区分标记,实现应用端调用联盟链的高效管控


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK