http://www.7klian.com

FISCO BCOS流量节制计策

通过表格可看出,相较基于计数器的流量节制算法和漏桶算法,令牌桶算法在流量节制结果、机动性方面均有优势,可同时满意FISCO BCOS请求速率限制和网络流量限制的要求,因此FISCO BCOS最终选择了令牌桶算法来实现流量节制成果。
基于计数器的流量节制算法

在区块链节点处理惩罚RPC请求或发送区块动静包之前,首先会实验获取令牌:
· 新请求到来时,先实验获取令牌,若没有拿到令牌,则阻塞或直接返回;若拿到令牌,则取出令牌,系统处理惩罚请求

· 当该接口返回false时,表白请求实验获取令牌失败,请求会被拒绝或阻塞。

漏桶算法
3种常用流量节制算法

· 会见节点级此外流量节制模块,实验获取令牌,若获取失败,则拒绝请求、延迟发送区块;
RateLimiter中维护了当前令牌数目m_currentStoredPermits,为了不影响系统机能,FISCO BCOS回收了令牌延迟更新的
计策,即并不及时更新m_currentStoredPermits,当且仅当某请求获取不到令牌时,才会实验更新m_currentStoredPermits。
令牌桶算法
请求进入漏桶→漏桶以必然速率出水→漏桶满后,直接拒绝后续请求

由于该算法仅限制了一段时间内的请求总量,没有限制请求速率,因此无法平衡系统资源利用,在某些环境下甚至”无法包袱掩护系统的责任”。

FISCO BCOS支持从节点和群组两个维度对流量举办节制,两者实现道理根基一致,本节将以节点流量节制为例,详述其实现道理。
· 按照当前时间和上一次令牌桶更新时间,更新令牌数m_currentStoredPermits
· 会见群组级别流量节制模块,实验获取地址群组的令牌,若获取失败,同样拒绝请求、延迟发送区块,获取乐成则可以处理惩罚请求、发送区块
· 若更新后的令牌数m_currentStoredPermits不小于requiredPermits,则同步调1,更新m_currentStoredPermits为m_currentStoredPermits-requiredPermits,并返回true,请求可被处理惩罚,不然拒绝或阻塞请求
令牌更新公式如下:
假设某系统回收了基于计数器的流量节制要领,,计数器清理周期配置为10秒,系统每秒最多可处理惩罚1万请求,计数器阈值为10万请求,若恶意进攻者在计数器请求总量很小时,瞬时并发发送10万个请求,这10万个请求均会被吸收,系统将面对瓦解风险。
节点初始化时,先按照设置文件中设置的请求速率限制flow_control.limit_req和出带宽网络流量限制flow_control.outgoing_bandwidth_limit为节点和群组建设并初始化RateLimiter。
· 当该接口返回true时,表白请求实验获取令牌乐成,该请求可被处理惩罚;
· tryAcquire接口是RateLimiter对外袒露的主要接口,请求可挪用该接话柄验获取令牌。
个中now是当前时刻,m_lastPermitsUpdateTime时上一次令牌更新时刻,m_permitsUpdateInterval是令牌更新平均时距离断,m_maxPermits是令牌桶的最大容量。

流量节制是担保漫衍式系统不变性、结实性、可用性的重要一环,为了提供更不变靠得住、柔性可用的处事,FISCO BCOS引入了流量节制成果,《FISCO BCOS流量节制实现》一文先容了FISCO BCOS引入流量节制的原因及其实现成果。本⽂将进一步为⼤家揭秘FISCO BCOS流量节制道理及计策。
increasedPermits = (double)(now – m_lastPermitsUpdateTime) / m_permitsUpdateInterval;
通过以上先容可知,基于计数器的流量节制算法没有限制请求速率,无法平衡系统资源利用;漏桶算法限制了请求处理惩罚和响应速率,但不机动,无法应对突发请求场景;令牌桶算法例通过限制请求流入速率,可应对瞬时突发流量,下表对这三种流量节制算法做了综合比拟:

今朝FISCO BCOS的QoS优化事情仍在一连举办中,接待各人配合探讨交换。

参考Guava RateLimiter,FISCO BCOS实现了一套同时支持请求速率限制和网络流量限制成果的流量节制计策。

初始化RateLimiter时,会按照速率限制计较令牌更新的时距离断,设请求速率限制为m_rate_limit,则每隔m_permitsUpdateInterval = 1000/m_rate_limit毫秒会增加一个令牌。
本文比拟阐明白计数器、漏桶、令牌桶3种常用流量节制算法,说明白FISCO BCOS选择令牌桶作为流量节制算法的考量及FISCO BCOS流量节制实现计策。

· 假如令牌桶满,则无法添加新令牌
· 若当前令牌桶中的令牌数m_currentStoredPermits不小于requiredPermits,则更新m_currentStoredPermits为m_currentStoredPermits-requiredPermits,并返回true,请求可被处理惩罚,不然转后续流程
· 向必然容量的令牌桶中插手令牌
m_currentStoredPermits = std::min(m_maxPermits, m_currentStoredPermits + increasedPermits);
· 支持动态改观令牌添加快率以及时节制处理惩罚速率
设某请求实验获取requiredPermits个令牌,主要处理惩罚流程如下:

该算法利用计数器统计一段时间内的请求数目,并在计数器高出指定阈值时,拒绝剩余请求,计数器周期性清零。

流量节制对付维持系统不变性、结实性、可用性至关重要,不只仅合用于区块链、漫衍式系统和海量处事场景,同样合用于通用的业务场景。
FISCO BCOS流量节制计策
FISCO BCOS流量节制算法选择考量
漏桶算法和令牌桶算法是限制数据传输速率、请求速率的实用算法,两者根基事情道理如下图:

漏桶算法和令牌桶算法
漫衍式系统积聚了许多流量节制⽅案,计数器、漏桶(Leaky Bucket)、令牌桶(Token Bucket)是个中最简朴、实⽤的流量节制算法,在先容FISCO BCOS流量节制道理之前,我们先来看看这些常⽤的流量节制算法。
小结

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

相关文章阅读