FISCO-BCOS流量控制实现

3次阅读

共计 3908 个字符,预计需要花费 10 分钟才能阅读完成。

文章起源:FISCO BCOS 开源社区公众号
作者:陈宇杰 /FISCO BCOS 外围开发者

​1. 引言

区块链零碎作为分布式系统,面对大数据量突发申请场景,暴涨的申请容易引起区块链服务或接口不可用,重大时可能导致整个区块链零碎陷入雪崩状态。

为了提供更稳固牢靠、柔性可用的服务,FISCO BCOS v2.5 版本引入了流量管制性能,从节点和群组两个维度进行限流,一方面,面对大数据量突发申请时对区块链零碎进行爱护,保证系统能失常运行,晋升零碎可用性;另一方面升高区块链节点间、群组间的资源烦扰,晋升区块链零碎的服务质量。

2. 为什么引入流量管制

FISCO BCOS 引入流量管制,旨在:

  • 应答大数据量突发申请
  • 升高区块链节点间、群组间的资源烦扰
  • 升高模块间的相互影响

应答大数据量突发申请

上图比照了 无流量管制性能 带有流量管制性能 的区块链零碎面对大数据量突发申请时的解决状况。

假如该区块链零碎解决能力为 2W,当业务以 20W 申请速率拜访区块链节点时:

  • 无流量管制 的场景下,系统对业务申请 照单全收,导致外部积压的申请数目越来越多,区块链节点响应速度越来越慢,若业务继续以高于零碎解决能力的速率发动申请,最终整个零碎可能会陷入雪崩状态,无奈响应任何业务申请。
  • 退出了 流量管制性能 后,流量管制模块会 依据 零碎解决能力过滤业务申请。在业务申请速率超出零碎解决能力时,流量管制模块会回绝残余的解决申请,使零碎维持 ” 收支平衡 ” 的衰弱状态;并将申请过载的信息返回给业务,业务可依据该信息自适应地调整申请速率,对区块链零碎进行爱护。

简而言之,引入流量管制模块就是给区块链零碎加上一层平安爱护罩,让零碎在接管大数据量突发申请的场景下能够强壮工作,失常响应业务申请。

升高区块链节点间 / 群组间资源烦扰

注:图中两个节点属于两条不同的链,接入了两个不同服务

如上图,当多个区块链节点部署于同一台机器时,会呈现资源竞争的问题,某些节点占用过多系统资源会影响到其余节点的失常服务。

  • t1 时刻,业务 1 继续以 1W 的申请速率申请右边节点,该节点流量激增,零碎接管并解决申请后,应用了 90% 的 CPU
  • 通过 t 工夫距离,业务 2 以 5000 的申请速率申请左边节点,该节点资源匮乏,只能抢占到 10% 的 CPU,响应速度很慢

上述场景中,右边节点因占用过多系统资源影响了左边节点的服务质量。引入流量管制后,可限度每个节点接管申请的速率,管制每个区块链节点的资源占用,防止因区块链节点资源竞争导致的服务质量降落或服务不可用问题。

仍以上图为例:

  • t1 时刻,业务 1 继续以 1W 的申请速率申请节点 1,节点 1 流量管制模块依据配置的申请阈值回绝多余的申请(这里设阈值为 5000),机器 CPU 占用率维持在 50%
  • 业务 1 收到 ” 流量过载 ” 的响应后,可将其申请速率调整到 5000
  • 通过 t 工夫距离,业务 2 以 5000 的申请速率申请节点 2,此时机器还残余 50% 的 CPU,足以解决 5000 个申请,业务 2 的申请失去失常响应

相似于一台机器上运行多个区块链节点时会产生资源竞争,多群组架构下,群组间也存在资源竞争,某个群组占用过多资源同样会影响到其余群组的服务质量,采纳群组级别的流量管制是解决群组间资源竞争的良方。

升高模块间相互影响

同一个节点或群组内的不同模块,也存在资源竞争问题,次要是网络资源竞争,存在网络资源竞争的模块包含:

  • 共识模块
  • 交易同步模块
  • 区块同步模块
  • AMOP 模块

其中共识模块、交易同步模块是决定区块链零碎服务质量的要害模块,其余模块过多占用网络资源,会影响这些要害模块,进而影响零碎可用性。

FISCO BCOS 实现了模块级别的流量管制,通过管制非关键的网络流量,优先保障要害模块服务质量,晋升零碎健壮性。

3. 流量管制的性能

FISCO BCOS 从节点和群组两个维度实现了业务到节点的申请速率限度和模块粒度的网络流量限度。前者限度业务到节点的申请速率,以应答大数据量突发申请,保障区块链节点的柔性服务;后者通过限度区块同步、AMOP 等非关键模块的网络流量,优先保障共识、交易同步等要害模块的性能和稳定性。

  • 节点级别申请速率限度:限度业务到节点的总申请速率,当申请速率超过指定阈值后,节点会回绝业务申请,防止节点过载,避免过多的申请导致节点异样;管制节点资源使用量,升高区块链节点之间的资源竞争
  • 节点级别的流量管制:限度节点的均匀出带宽,当节点均匀出带宽超过设置阈值后,节点收到区块同步申请后会暂缓发送区块、回绝收到的 AMOP 申请,防止区块同步、AMOP 音讯包发送对节点共识的影响

群组维度上,次要性能包含:

  • 群组级别申请速率限度:限度业务到群组的申请速率,当申请速率超过阈值后,群组会回绝业务申请,该性能可在大数据量突发申请的场景下保护区块链节点,管制群组资源使用量,升高群组间的资源竞争
  • 群组级别的流量管制:限度每个群组的均匀出带宽,当群组均匀出带宽流量超过设置阈值后,该群组会暂停区块发送和 AMOP 申请包转发逻辑,优先将网络流量提供给共识模块应用

当节点和群组都开启申请速率限度时:

节点收到业务发送的申请包时,首先调用节点级别申请速率限度模块判断是否接管该申请,如申请被接管,则进入群组级别申请速率限度模块,通过该模块查看后的申请才会被转发到相应群组,进行解决。

当节点和群组都开启网络流量管制性能时:

1、节点收到客户端 AMOP 申请,首先调用节点级流量管制模块判断是否接管该 AMOP 申请

2、当某个群组收到其余节点对应群组的区块申请后,群组在回复区块之前,须要:

  • 调用节点级流量管制模块,判断节点均匀出带宽是否超过设置阈值
  • 调用群组级流量管制模块,判断群组出带宽是否超过设置阈值,当且仅当节点级和群组级均匀出带宽均未超过设置阈值时,该群组才会回复区块申请

4. 如何应用流量管制性能

流量管制配置别离位于 config.ini 和 group.i.ini 配置文件的 [flow_control] 配置项中,别离对应为节点级别流量管制配置和群组级别流量管制。这里向大家介绍如何启用、敞开、配置流量管制。

节点级流量管制

节点级别的网络流量管制配置项均位于 config.ini 配置文件中,次要包含:

申请速率限度

节点级别的申请速率限度位于配置项 [flow_control].limit_req 中,用于限度业务每秒到节点的最大申请数目,当申请数目超过设置阈值时,申请会被回绝。 该配置项默认敞开,若要开启,请将 limit_req 配置项后面的; 去掉。

关上申请速率限度并设计节点每秒可承受 2000 个业务申请的示例如下:

[flow_control]
  ; restrict QPS of the node
  limit_req=2000
网络流量限度
  • [flow_control].outgoing_bandwidth_limit:节点出带宽限度,单位为 Mbit/s,当节点出带宽超过该值时,会暂缓区块发送,也会回绝客户端发送的 AMOP 申请,但不会限度区块共识和交易播送的流量。该配置项默认敞开,若要开启,请将 outgoing_bandwidth_limit 配置项后面的; 去掉。

关上节点出带宽流量限度,并将其设置为 5MBit/ s 的配置示例如下:

[flow_control]
  ; Mb, can be a decimal
  ; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
  outgoing_bandwidth_limit=5

群组级流量管制

群组级别的网络流量管制配置项均位于 group.i.ini 配置文件中,次要包含:

申请速率限度

群组 i 的申请速率限度位于 group.i.ini 的配置项[flow_control].limit_req 中,限度业务每秒到群组的最大申请数目,当申请数目超过配置项的值时,申请会被回绝。该配置项默认敞开,若要开启,请将 limit_req 配置项后面的; 去掉。

关上申请速率限度并配置群组每秒可承受 1000 个业务申请的示例如下:

[flow_control]
  ; restrict QPS of the group
  limit_req=1000
群组内网络流量限度

[flow_control].outgoing_bandwidth_limit:群组出带宽限度,单位为 Mbit/s,当群组出带宽超过该值时,会暂缓发送区块,但不会限度区块共识和交易播送的流量。该配置项默认敞开,若要开启,请将 outgoing_bandwidth_limit 配置项后面的; 去掉。

关上群组出带宽流量限度,并将其设置为 2MBit/ s 的配置示例如下:

[flow_control]
  ; Mb, can be a decimal
  ; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
  outgoing_bandwidth_limit=2

5. 总结

随着区块链技术的倒退,越来越多利用部署于区块链零碎中,对区块链零碎服务质量的要求也日渐晋升,区块链零碎的柔性可用、稳固强壮变得更加重要。

FISCO BCOS v2.5 引入流量管制性能,是 FISCO BCOS 对区块链柔性服务摸索的重要一步。

社区将继续打磨,优化区块链零碎服务质量,心愿将来能为海量业务场景提供更好的、高可用的柔性服务。

如何做好流量管制的同时,又不影响本来零碎性能?敬请关注社区后续文章,为您详解流量控制策略的具体实现原理。

欢送大家独特探讨交换,踊跃反馈应用的体验与改良倡议。

FISCO BCOS 的代码齐全开源且收费

** 下载地址:https://github.com/FISCO-BCOS…

正文完
 0