作者:陈宇杰|FISCO BCOS 核心开发者

引言

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

为了提供更稳定可靠、柔性可用的服务,FISCO BCOS v2.5版本引入了流量控制功能,从节点和群组两个维度进行限流,

一方面,面对大数据量突发请求时对区块链系统进行保护,保证系统能正常运行,提升系统可用性;

另一方面降低区块链节点间、群组间的资源干扰,提升区块链系统的服务质量。

为什么引入流量控制

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实现了模块级别的流量控制,通过控制非关键的网络流量,优先保证关键模块服务质量,提升系统健壮性。

流量控制的功能

FISCO BCOS从节点和群组两个维度实现了业务到节点的请求速率限制和模块粒度的网络流量限制。

前者限制业务到节点的请求速率,以应对大数据量突发请求,保证区块链节点的柔性服务;

后者通过限制区块同步、AMOP等非关键模块的网络流量,优先保证共识、交易同步等关键模块的性能和稳定性。

  • 节点级别请求速率限制:限制业务到节点的总请求速率,当请求速率超过指定阈值后,节点会拒绝业务请求,避免节点过载,防止过多的请求导致节点异常;控制节点资源使用量,降低区块链节点之间的资源竞争
  • 节点级别的流量控制:限制节点的平均出带宽,当节点平均出带宽超过设置阈值后,节点收到区块同步请求后会暂缓发送区块、拒绝收到的AMOP请求,避免区块同步、AMOP消息包发送对节点共识的影响

群组维度上,主要功能包括:

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

当节点和群组都开启请求速率限制时:

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

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

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

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

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

如何使用流量控制功能

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

节点级流量控制

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

请求速率限制

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

打开请求速率限制并设计节点每秒可接受2000个业务请求的示例如下:

[flow_control]; restrict QPS of the nodelimit_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 proceedoutgoing_bandwidth_limit=5

群组级流量控制

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

请求速率限制

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

打开请求速率限制并配置群组每秒可接受1000个业务请求的示例如下:

[flow_control]; restrict QPS of the grouplimit_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 proceedoutgoing_bandwidth_limit=2

总结

随着区块链技术的发展,越来越多应用部署于区块链系统中,对区块链系统服务质量的要求也日渐提升,区块链系统的柔性可用、稳定健壮变得更加重要。

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

社区将持续打磨,优化区块链系统服务质量,希望未来能为海量业务场景提供更好的、高可用的柔性服务。如何做好流量控制的同时,又不影响原本系统性能?敬请关注社区后续文章,为您详解流量控制策略的具体实现原理。欢迎大家共同探讨交流,积极反馈使用的体验与改进建议。

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/articles/3_features/31_performance/flow_control.html

FISCO BCOS流量控制实现相关推荐

  1. 区块链学习路径,看这一篇就够了 | FISCO BCOS

    FISCO BCOS开源社区已沉淀过百篇文章,覆盖了区块链学习各个阶段.为了方便大家对应自身学习阶段找到合适的教程,我们按照区块链学习成长路径对社区文章进行整理排序,希望沿着这份路径规划,大家都能成为 ...

  2. FISCO BCOS 2.0发布:新增群组架构克服吞吐瓶颈

    今日,FISCO BCOS开源社区正式对外发布FISCO BCOS的2.0版,该版本在可扩展性.性能.易用性.隐私隔离等方面均取得突破性进展,其新增的群组架构方案,可以让企业间像拉微信群一样快速组链, ...

  3. 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA

    本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...

  4. 初步了解区块链技术落地——FISCO BCOS 快速搭建区块链

    区块链端口 p2p_port: 节点通信端口. channel_port: SDK 通知协议交换端口,使用的 SSL. jsonrpc_port: http接口包含的此协议,网络明文. 官方教程 ht ...

  5. 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链

    文章目录 1. 任务背景 2. 任务目标 3. 相关知识点 4. 任务实操 4.1 切换root用户 4.2 安装依赖 4.3 创建目录,下载安装脚本 4.4 搭建单群组4节点联盟链 4.5 启动FI ...

  6. FISCO BCOS迎来开源智能合约编程语言Liquid

    编者荐语: 以下文章来源于微众银行区块链 关注公众号:微众银行区块链,并回复 [Liquid]获取全文高清PDF 面对多样复杂应用场景的全新挑战,适用FISCO BCOS的智能合约语言Liquid提出 ...

  7. FISCO BCOS 2022年度贡献者榜单

    平台践行开源共创的精神,FISCO BCOS开源社区致力打造开放多元的开源联盟链生态. 目前,社区已汇聚了超70000名社区用户,大家聚集于此碰撞观点.交流技术,围绕FISCO BCOS开发各类实用的 ...

  8. 区块链 Fisco bcos 智能合约(22)-全面的性能分析工具

    前 言 We should forget about small efficiencies, say about 97% of the time: premature optimization is ...

  9. FISCO BCOS上使用第三方CA证书底层节点部署实操

    CA证书怎么生成?节点相互验证证书时会交叉验证吗?对于社区常遇到的此类问题,分享一些个人使用第三方CA证书部署底层节点的经验,希望可以给大家一些借鉴与参考. 为什么要对第三方CA证书进行改造? 首先, ...

  10. 对话MVP | 柳贵:在FISCO BCOS,我体会到了开源社区的精神

    " 别人答疑,我也应为别人解惑,这是我保持热情最重要的原因之一.成功帮别人解决了问题,我也尝到了 "传道授业解惑"的那份快乐. -- 柳贵 开源社区成立以来,吸引汇聚了许 ...

最新文章

  1. java读取文件的方法是_Java读取文件方法大全
  2. 递归删除目录下.svn文件
  3. 完结篇 | 吴恩达《序列模型》精炼笔记(3)-- 序列模型和注意力机制
  4. dojo Quick Start/dojo入门手册--dojo.hitch scope/context
  5. python 入门程序_非Python程序员的Python速成课程-如何快速入门
  6. jquery-事件绑定
  7. 微服务开发及部署_基于 Kubernetes 的微服务部署即代码
  8. 变量类型 ROWID 和 UROWID
  9. Linux各个目录的用途
  10. linux卸载aprutil,Linux下安装Apr及其Apr-util的基本步骤
  11. 让你提前认识软件开发(15):程序调试的利器—日志
  12. RobotFramework:App九宫格滑动解锁
  13. python手机版做小游戏代码大全-12岁的少年教你用Python做小游戏
  14. 《码出高效---java》PDF,有学习java的小伙伴可以看看,阿里巴巴出版的书籍
  15. 隧道场景人员车辆定位系统-帮助隧道施工实现智能化管理
  16. android 气泡尖角边框,如何使用CSS实现一个带尖角的气泡框?
  17. 平板android怎么玩电脑游戏,Android平板模拟家用主机游戏教程_小米 平板_平板电脑新闻-中关村在线...
  18. ios html5键盘弹出视图上移,ios 软键盘弹出, 页面整体上移问题
  19. 三菱Q系列PLC ,QD77MS16走总线控制伺服项目
  20. C++加载lib和dll的方法

热门文章

  1. 前端学习笔记--百度2010校园招聘题目
  2. struts2 Unable to load configuration
  3. 程序员的自我修养 - 符号修饰 函数签名 以及一个引申的问题: extern c
  4. 【转】PCDATA和CDATA的区别究竟是什么呢?
  5. 接口 与 抽象类 区别
  6. 《第一行代码》学习笔记12-UI(1)
  7. WinAPI 字符及字符串函数(13): lstrcmp、lstrcmpi - 对比串
  8. 关于SuperMap的ISManager访问权限问题
  9. 【大数据部落】R语言电信公司churn数据客户流失 k近邻(knn)模型预测分析
  10. 拓端tecdat|R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告