本公开涉及大数据,具体地涉及一种限流方法、装置、设备、存储介质和程序产品。
背景技术:
1、分布式缓存是一种基于开源kv数据库,数据通过代理层转发至存储层进行存储,能够实现多分片、多副本、可横向扩展的缓存方案。
2、但是,在秒杀型交易(一类具有特定特性的交易,在特定时间点交易压力会突增,多出现在如在线商城促销,新品抢购等业务场景上)等热数据高并发访问场景下,分布式缓存很容易出现热key问题,而这会导致存储层某一个存储分片出现网络带宽耗尽或者处理器超负载的情况,进而致使请求堆积以及请求超时失败等问题。
3、目前可以通过修改存储层开源产品源码的方式在存储层进行限流,从而改善上述问题。但是,开源代码逻辑复杂,牵一发而动全身,开发和维护成本较高。
技术实现思路
1、鉴于上述问题,本公开提供了一种限流方法、装置、设备、存储介质和程序产品。
2、根据本公开的第一个方面,提供了一种基于代理节点的限流方法,其中,包括:
3、获取至少一个存储节点的实时负载,并根据所述存储节点的实时负载确定所述存储节点的负载状态;
4、根据所述存储节点的负载状态,更新负载监控信息,所述负载监控信息包括至少一个负载超限的存储节点及其实时负载;
5、当所述负载监控信息发生更新时,根据更新的内容向所述代理节点发布通知;
6、所述通知配置为:使所述代理节点在监听到所述通知时,执行以下步骤:
7、从所述通知中获取目标存储节点;
8、根据所述通知的内容,对所述目标存储节点的限流措施进行调整。
9、根据本公开的实施例,所述根据所述存储节点的实时负载确定所述存储节点的负载状态,包括:
10、当所述存储节点的实时负载高于第一预设值时,确定所述存储节点的负载状态为第一状态;
11、所述根据所述存储节点的负载状态,更新负载监控信息,包括:
12、当所述存储节点的所述负载状态为所述第一状态时,将所述存储节点的实时负载写入至所述负载监控信息中,以得到所述存储节点的负载超限记录;
13、为所述负载超限记录设置信息有效期;
14、所述限流方法还包括:
15、当所述负载超限记录在所述信息有效期内未进行更新时,删除所述负载超限记录。
16、根据本公开的实施例,所述当所述存储节点的所述负载状态为所述第一状态时,将所述存储节点的实时负载写入至所述负载监控信息中,以得到所述存储节点的负载超限记录,包括:
17、在首次将所述存储节点的实时负载写入所述负载监控信息中时,在负载超限列表中添加所述存储节点;
18、所述根据所述存储节点的实时负载确定所述存储节点的负载状态,包括:
19、当所述存储节点的实时负载低于所述第一预设值且高于第二预设值时,确定所述存储节点的负载状态为第二状态;
20、所述根据所述存储节点的负载状态,更新负载监控信息,还包括:
21、当所述存储节点的所述负载状态为所述第二状态,并且所述负载超限列表存在所述存储节点时,将所述存储节点的实时负载写入至所述负载监控信息中,以对该存储节点的负载超限记录进行更新。
22、根据本公开的实施例,所述根据所述存储节点的实时负载确定所述存储节点的负载状态,包括:
23、当所述存储节点的实时负载低于所述第二预设值时,确定所述存储节点的负载状态为第三状态;
24、所述根据所述存储节点的负载状态,更新负载监控信息,还包括:
25、当所述存储节点的所述负载状态为所述第三状态,并且所述负载超限列表存在所述存储节点时,删除所述负载监控信息中所述存储节点的所述负载超限记录。
26、根据本公开的实施例,所述当所述负载监控信息发生更新时,根据更新的内容向所述代理节点发布通知,包括:
27、当所述负载监控信息中至少一条所述负载超限记录发生更新,且更新时所述存储节点的所述负载状态为所述第一状态时,向所述代理节点发布第一通知;
28、所述根据所述通知的内容,对所述目标存储节点的限流措施进行调整,包括:
29、响应于所述第一通知,判断是否已对所述目标存储节点实施限流措施;
30、当已对所述目标存储节点实施限流措施时,按照预设步长提升所述目标存储节点的限流措施的限流力度。
31、根据本公开的实施例,所述当所述负载监控信息发生更新时,根据更新的内容向所述代理节点发布通知,包括:
32、当所述负载监控信息中至少一条所述负载超限记录发生更新,且更新时所述存储节点的所述负载状态为所述第二状态时,向所述代理节点发布第二通知;
33、所述根据所述通知的内容,对所述目标存储节点的限流措施进行调整,包括:
34、响应于所述第二通知,维持所述目标存储节点当前的限流措施。
35、根据本公开的实施例,所述当所述负载监控信息发生更新时,根据更新的内容向所述代理节点发布通知,包括:
36、当所述负载监控信息中至少一条所述负载超限记录被删除时,向所述代理节点发布第三通知;
37、所述根据所述通知的内容,对所述目标存储节点的限流措施进行调整,包括:
38、响应于所述第三通知,解除对所述目标存储节点的限流措施。
39、本公开的第二方面提供了基于代理节点的限流装置,其中,包括:
40、监控模块,用于获取至少一个存储节点的实时负载,并根据所述存储节点的实时负载确定所述存储节点的负载状态;
41、以及,根据所述存储节点的负载状态,更新负载监控信息,所述负载监控信息包括至少一个负载超限的存储节点及其实时负载;
42、管理模块,用于当所述负载监控信息发生更新时,根据更新的内容向所述代理节点发布通知;
43、代理节点,用于在监听到所述通知时,执行以下步骤:
44、从所述通知中获取目标存储节点;
45、根据所述通知的内容,对所述目标存储节点的限流措施进行调整。
46、本公开的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述的限流方法。
47、本公开的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述的限流方法。
48、本公开的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述的限流方法。
49、上述一个或多个实施例具有如下优点或益效果:
50、采用本公开实施例的限流方法,可以在存储节点负载过高时,及时对存储节点进行限流,避免分布式缓存系统在抢券以及秒杀等高并发场景下发生请求超等问题。更重要的是,本公开实施例的限流方法无需修改存储层源码即可实现限流目的,不修改存储层源码,一方面可以减少不可控因素,减低了生产运行风险,另一方面还可以不影响存储层的版本升级和替换存储介质,降低了开发和运维成本。