一种分布式集群限流方法及系统与流程

文档序号:37543819发布日期:2024-04-08 13:45阅读:11来源:国知局
一种分布式集群限流方法及系统与流程

本发明涉及集群负载均衡领域,具体涉及一种分布式集群限流方法及系统。


背景技术:

1、由于服务器的资源能力有限,遇到突发流量,如微博热点,电商活动时,都需要对符合特定规则的用户总请求数进行限流,以防止过大的流量导致服务器宕机,避免影响正常用户请求从而造成经济损失。

2、在大型系统下,网关作为系统接入节点,通常将网关进行集群化多节点部署,网关集群限流成为大型系统的必备防护措施。由于网关每个节点的流量不一定是一致的,将限流规则的集群限流总值平均分配到每台网关节点,转化为单机对符合限流的请求进行限流的方法无法适用。

3、对于目前网关接入集群限流方式,为保证集群限流准确性,一般都用一台中心机器来汇总网关接入集群所有节点符合限流规则的流量。会存在需要额外维护中心机器,符合限流规则但不触发限流的请求时延增加,误限流概率大,限流可靠性差等问题。

4、为了解决这些问题,对于用中心机器来汇总网关接入集群所有节点符合限流规则的流量,会存在需要额外维护中心机器的问题。对于网关接入集群节点阻塞符合限流规则的请求,去中心机器累加请求数,获取集群该限流规则的总请求数,判断是否大于集群限流总值的方式。会增加符合限流规则但不触发限流的请求时延。

5、对于一台中心机器周期性收集网关接入集群每个节点符合限流规则的总请求数,汇总后计算出每台节点请求数占集群总请求数的百分比,根据百分比分配网关集群限流规则的总限流值到每台网关节点方式。会出现中心分配的限流值根据上周期请求数比例而来,而请求数比例可能本周期的比例和上周期不一致。当请求数不同周期分布不一致时,误限流概率较高。限流准确度存在较大缺陷。

6、例如:假设有一个网关接入集群有100台网关节点,要对一个api限速4000r/s。第1秒的时候,这4000qps平均都在100台网关节点中的第1台和第2台上。中心机器收集第1秒的数据,把第2秒的4000r/s限流值分配到第1和第2台节点,第1和第2台节点各限速2000r/s,第3到第100节点限速值为0r/s。但在第2秒时,用户的4000qps访问到了第3和第4节点,第1和第2节点没有流量。则第2秒时,用户在第3和第4节点触发了限流0r/s,导致第2秒所有请求都被限流。对用户来说,需要通过4000qps。但实际通过的qps为0。距离用户4000r/s的限流偏差较大。


技术实现思路

1、有鉴于此,本发明提出了一种分布式集群限流方法及系统,通过节点同步装置、节点统计模块和节点转发模块的协同工作,实现了高效、精准、可靠的请求限流。系统通过异步查询和分布式计算,有效处理大规模请求流量,提高了系统的性能、可扩展性和可维护性。

2、基于上述目的,第一方面,本发明提供了一种分布式集群限流系统,包括:

3、节点同步装置:部署在网关接入集群的每个节点,在网关接入集群扩缩容机器时,扩缩容机器更新信息到本节点的节点同步装置,并将信息同步到集群其余节点的节点同步装置中,用于通过节点同步装置查询到集群所有节点信息;

4、节点统计模块:接收集群所有节点的统计请求,根据请求中的周期和计数信息进行计数数量的累加,响应累加后的总计数;

5、节点转发模块:用于加载限流配置,获取限流规则和对应的集群总限流值;还用于处理用户请求,当用户请求到达时,匹配限流规则,并根据限流规则进行处理,节点转发模块通过本地计数缓存判断是否需要向节点统计模块发起请求。

6、作为本发明的进一步方案,所述节点统计模块部署在集群中的每个节点上,节点统计模块在进行计数数量的累加时,计数数量的累加和成功响应为一个事务,若响应没成功,则请求中的周期总计数数量不累加。

7、作为本发明的进一步方案,匹配限流规则时,当第一次接收到匹配限流规则的请求时,进行初始化,设置上周期本节点总请求数,本周期本节点总请求数,本周期本节点计数缓存值都为0;若非第一次接收到匹配限流规则的请求,且本周期已到,则设置上周期本节点总请求数为当前本周期节点总请求数,更新本周期本节点总请求数,本周期本节点计数缓存值为0。

8、作为本发明的进一步方案,节点转发模块通过本地计数缓存判断是否需要向节点统计模块发起请求时,匹配限流规则的本周期本节点总请求数加1,若节点计数缓存小于或等于零时,判断本地是否集群总计数超过集群限流总值,若超过,则拒绝请求。若没超过,则放行请求;

9、匹配限流规则的本周期本节点计数缓存减1,当本周期本节点计数缓存小于零时,计算出需要到集群中某个节点的节点统计模块累加的计数,准备发出统计请求。

10、作为本发明的进一步方案,所述节点转发模块中计算节点统计模块累加的计数的计算规则为:节点预测出本周期内至少有多少个符合限流规则的请求访问本节点,再加上本节点计数缓存小于零部分;预测时的预测规则为:比较限流规则的上周期总请求数和本周期当前总请求数,取出2者间的较大值,将这个值除以配置值,取整后和1取最大值;其中,配置值默认为10。

11、作为本发明的进一步方案,所述节点转发模块还用于查询同步装置中集群所有节点ip信息,对限流规则进行一致性hash计算,计算出所述限流规则的统计对应在集群中某一台节点的节点统计模块上,向一致性hash选中的集群中某一节点的节点统计模块发起请求,附带上本周期和待请求计数的信息。

12、作为本发明的进一步方案,所述节点转发模块还用于获得节点统计模块响应的本周期当前匹配限流规则的集群总计数,将集群总计数和限流规则集群限流总值对比。

13、作为本发明的进一步方案,将集群总计数和限流规则集群限流总值对比时,若小于集群限流总值,则更新节点计数缓存,更新值为:(当前节点计数缓存+向节点统计模块请求的计数);若超过集群限流总值,则更新值为:max(0,(当前节点计数缓存+(向节点统计模块请求的计数-(总计数-限流规则集群限流总值)))),并设置节点本地,集群总计数超过集群限流总值;当本周期后续请求到达本节点,且本节点计数缓存小于或等于零时,拒绝请求。

14、作为本发明的进一步方案,所述节点转发模块还用于保持与节点统计模块的长连接,每次只会有一个请求存在;发起统计请求后,等待响应或超时后才能发起下一个请求;在通讯过程中,继续减扣本地缓存计数,收到节点统计模块响应后更新本地缓存计数。

15、第二方面,本发明提供了一种分布式集群限流方法,包括以下步骤:

16、用户请求到达网关接入集器节点,网关匹配限流规则,限流规则本周期本地总请求数+1;

17、判断是否触发集群限流,若是则拒绝用户请求;若否则放行用户请求,限流规则本地计数缓存-1;

18、判断是否需要去统计模块累加计数,若否则结束,若是则根据限流规则上周期和本周期当前总请求数,预测本周期最少还有多少次请求访问;

19、将限流规则进行一致性hash计算,hash值映射集群某一个节点的节点统计模块;网关节点访问选出的节点统计模块,带上本周期和需要计数数量信息;

20、获取节点统计模块返回的周期内总统计数,判断总统计数是否超过集群限流总值,若超过集群限流总值,则拒绝本周期的后续请求,若不超过集群限流总值,则更新本地计数缓存。

21、本发明的又一方面,还提供了一种计算机设备,包括存储器和处理器,该存储器中存储有计算机程序,该计算机程序被处理器执行时执行上述任一项根据本发明的分布式集群限流方法。

22、本发明的再一方面,还提供了一种计算机可读存储介质,存储有计算机程序指令,该计算机程序指令被执行时实现上述任一项根据本发明的分布式集群限流方法。

23、与现有技术相比较而言,本发明提出的一种分布式集群限流方法及系统,具有以下有益效果:

24、1.请求时延没有影响。相比用户请求到达网关接入集群节点,网关节点匹配到符合限流规则后,阻塞请求,去一个中心累加查询网关集群该限流规则总请求计数后,再决定是否拒绝请求的方式。通过不阻塞请求,异步查询的方式,不会影响匹配到限流规则,但没触发限流的请求的时延。

25、2.限流精度高。相比一台中心机器定时获取所有网关节点的请求,汇总计算,按网关节点请求占网关集群总请求百分比,分配每个网关节点的限流值方式。网关接入集群节点通过根据上一周期和本周期当前请求情况,预测本节点本周期至少还会有多少请求访问,一个周期多次从统计模块获取,每次根据请求量情况获取一定数量计数。当用户流量本周期和上周期在各个节点请求数比例发生变化时,本方法拥有更高的限流准确度。

26、3.可靠性高。相比网关接入集群节点都到一个中心统计汇总请求的方式。集群中有多个节点,网关接入集群节点根据限流规则进行一致性hash选择不同的本集群节点的节点统计模块,分散了统计压力到集群各个节点。单节点统计模块故障时,节点转发模块可剔除故障统计模块的节点,根据一致性hash选择下一个节点的节点统计模块,不影响限流规则的计数。

27、4.可扩展性高,随着限流规则的增加,集群中的节点统计模块接收请求增加,转化为集群整体qps上升。集群只需要扩容即可减小每个节点的压力。

28、5.维护成本降低,无需维护一个单独的中心机器进行流量汇总。

29、本技术的这些方面或其他方面在以下实施例的描述中会更加简明易懂。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1