一种分布式系统限流控制系统和方法与流程

文档序号:31928235发布日期:2022-10-25 23:28阅读:90来源:国知局
一种分布式系统限流控制系统和方法与流程

1.本发明涉及一种分布式系统限流控制系统和方法,属于软件系统设计技术领域。


背景技术:

2.现代软件系统,在面临高并发访问时的应对手段通常包括缓存、降级和限流。缓存通过使用内存减少磁盘io,提高系统访问速度和并发性能;降级是当服务出现问题时可以通过屏蔽服务,保证系统整体上的可用性;限流是一种主动防御手段,通过制定规则限制单位时间内的并发请求数量,确保系统的稳定性。
3.分布式系统为保证整体一致性,当前主流的限流设计方案是选用内存型数据库作为缓存,通过令牌桶算法在缓存中记录令牌的产生和消耗,缓存作为统一的第三方服务可以实现分布式的一致性,同时利用内存的高性能可以确保系统整体性能不会因为限流而出现大幅度下降。
4.这套设计方案在并发不大且限制并发量较小时可以完美应对限流的需求,然而当访问并发量极大且限制并发量也较大时,因为令牌桶的限流key会始终落在同一个缓存数据库节点上,导致该节点需要持续执行令牌桶算法,cpu占用率上升,最终在cpu达到满负载后成为整个系统的性能瓶颈。


技术实现要素:

5.本发明目的是提供了一种分布式系统限流控制系统和方法,提高分布式系统的并发性能,同时保证限流结果的一致性。
6.本发明为实现上述目的,通过以下技术方案实现:一种分布式系统限流控制系统,包括限流执行模块、限流调度模块、分布式业务系统和缓存数据库。
7.所述缓存数据库保存注册信息。
8.所述限流执行模块负责各节点独立的限流;限流执行模块启动后,开启rpc服务端,发送注册请求至限流调度模块,将自身信息注册至限流调度模块,并通过心跳和限流调度模块维持健康检查。
9.所述限流调度模块负责整个分布式业务系统统一的限流;限流调度模块启动后,查询缓存数据库,获取当前制定的限流策略,接收限流执行模块发送的注册信息和心跳信息请求,维护当前可用的限流执行模块列表,并为所有可用的限流执行模块分配限流策略,将需要执行的策略通过通过注册时的信息,发送rpc请求同步至限流执行模块;当限流调度模块通过心跳感知可用的限流执行模块数量出现变化时,重新为各限流执行模块分配策略。
10.所述分布式业务系统根据限流调度模块的限流结果执行业务逻辑;分布式业务接收到业务请求后,具体接收请求的节点调用内部集成的限流执行模块进行限流控制,限流执行模块判断当前节点在单位时间内的请求数量是否已达分配额度的上线,如果未达到额
度就执行放行请求;如果已达到额度或接收到限流控制模块的接管限流请求后,需要向限流调度模块询问是否可放行,如果限流调度模块允许访问就继续放行请求,如果限流调度模块不允许访问,那么在后续单位时间内的所有请求不再询问限流调度模块,全部保持阻断,直到控制时间结束后重置,重新执行限流策略。
11.优选的,所述限流策略包括指定限流阈值、分担比例和控制时间。
12.优选的,限流调度模块分配策略具体方法如下:限流调度模块通过注册和心跳机制,能够近实时感知当前分布式系统内所有可用的限流执行模块状态,在获取到限流策略后,首先根据限流阈值和分担比例计算限流执行模块和自身分别应承担的限流额度,并通过当前可用限流执行模块数计算每个限流执行模块应承担的限流额度,将每个限流执行模块承担限流额度和限流控制时间同步至限流执行模块。
13.一种分布式系统限流控制方法,包括以下步骤:s1:限流执行模块执行限流,并判断系统整体是否已经限流,如果已经限流则限流执行结束,如果没有限流则进入步骤s2。
14.s2:判断调度服务是否接管限流,如果没有接管限流,则执行模块按照策略执行限流,进入步骤s3;如果接管了限流,则调度模块按照策略执行限流,进入步骤s4。
15.s3:判断是否限流,如果已经限流则访问限流调度模块并通知接管限流,调度模块按照策略执行限流,进入步骤s4;如果没有限流则限流执行结束。
16.s4:判断是否限流,如果没有限流,限流执行结束;如果限流则限流调度模块通知系统整体已经限流,限流调度模块向各限流执行模块发送请求,通知各限流执行模块限流调度模块开始接管限流,后续单位时间内的请求需要由限流调度模块判定是否放行,限流执行结束。
17.s5:单位控制时间结束后,各限流执行模块重置,重新执行分配的限流控制策略。
18.本发明的优点在于:在分布式系统使用缓存技术进行限流控制的基础上,减少网络io和cpu的占用,提高分布式系统的并发性能,同时保证限流结果的一致性,避免因执行限流导致性能瓶颈影响系统整体服务能力。
附图说明
19.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
20.图1为本发明软件系统交互流程结构示意图。
21.图2为本发明流程结构示意图。
具体实施方式
22.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
23.一种分布式系统限流控制系统和方法,包括:软件系统由限流执行模块和限流调度模块两个独立的模块组成;限流执行模块负责各节点独立的限流,限流调度模块负责整
个分布式系统统一的限流。
24.限流执行模块启动后,开启rpc服务端,发送注册请求至限流调度模块,将自身信息注册至限流调度模块,后续通过心跳和限流调度模块维持健康检查。
25.限流调度模块启动后,查询数据库,获取当前制定的限流策略,接收限流执行模块发送的注册信息和心跳信息请求,维护当前可用的限流执行模块列表,并为所有可用的限流执行模块分配限流策略,将需要执行的策略通过通过注册时的信息,发送rpc请求同步至限流执行模块;当限流调度模块通过心跳感知可用的限流执行模块数量出现变化时,会重新为各限流执行模块分配策略。
26.限流策略说明:限流策略可以指定限流阈值、分担比例和控制时间,限流阈值是指定一个合法的调用者在指定控制时间内可以访问接口的数量;分担比例是限流执行模块和限流调度模块分别各自承担限流阈值的额度;控制时间执行限流控制的单位时间长度。
27.限流调度模块分配策略说明:限流调度模块通过注册和心跳机制,能够近实时感知当前分布式系统内所有可用的限流执行模块状态,在获取到限流策略后,首先根据限流阈值和分担比例计算限流执行模块和自身分别应承担的限流额度,并通过当前可用限流执行模块数计算每个限流执行模块应承担的限流额度,将每个限流执行模块承担限流额度和限流控制时间同步至限流执行模块。
28.限流执行模块接收到分配的策略后,按照策略执行限流控制。
29.分布式系统接收到业务请求后,具体接收请求的节点调用内部集成的限流执行模块进行限流控制,限流执行模块判断当前节点在单位时间内的请求数量是否已达分配额度的上线,如果未达到额度就执行放行请求;如果已达到额度或接收到限流控制模块的接管限流请求后,需要向限流调度模块询问是否可放行,如果限流调度模块允许访问就继续放行请求,如果限流调度模块不允许访问,那么在后续单位时间内的所有请求不再询问限流调度模块,全部保持阻断,直到控制时间结束后重置,重新执行限流策略。
30.包括以下步骤:s1:限流执行模块执行限流,并判断系统整体是否已经限流,如果已经限流则限流执行结束,如果没有限流则进入步骤s2;s2:判断调度服务是否接管限流,如果没有接管限流,则执行模块按照策略执行限流,进入步骤s3;如果接管了限流,则调度模块按照策略执行限流,进入步骤s4;s3:判断是否限流,如果已经限流则访问限流调度模块并通知接管限流,调度模块按照策略执行限流,进入步骤s4;如果没有限流则限流执行结束;s4:判断是否限流,如果没有限流,限流执行结束;如果限流则限流调度模块通知系统整体已经限流,限流调度模块接收到限流请求,表明在单位控制时间内已有限流执行模块达到限流阈值,此时为保证分布式系统整体一致性,限流调度模块向各限流执行模块发送请求,通知各限流执行模块限流调度模块开始接管限流,后续单位时间内的请求需要由限流调度模块判定是否放行,限流执行结束;s5:单位控制时间结束后,各限流执行模块重置,重新执行分配的限流控制策略。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1