一种缓存代理方法和装置与流程

文档序号:32748159发布日期:2022-12-30 23:17阅读:22来源:国知局
一种缓存代理方法和装置与流程

1.本技术涉及互联网技术领域,尤其涉及一种缓存代理方法和装置。


背景技术:

2.随着互联网行业的高速发展,网站数据缓存已经成为网站的一个关键性支撑技术。当前,诸多业务场景都会使用缓存服务如redis(remote dictionary server,远程字典服务),memcache(分布式高速缓存系统)等来提升网站的响应速度。
3.然而,在高并发场景中,如电商秒杀、直播带货、微博热点等业务场景使用redis、memcache集群进行缓存处理时,会存在对应缓存落在缓存集群中的同一缓存节点上,导致缓存集群节点被频繁访问,造成缓存集群负载不均匀的问题,即缓存系统中的热点key的问题。redis的单线程模型在处理大key会出现io瓶颈。热点key和大key的问题都极有可能引发整个缓存集群无法提供缓存服务。


技术实现要素:

4.本技术基于上述问题,通过增加一层缓存代理层来统一解决热点key、大key的问题。
5.本技术一方面提供了一种缓存代理方法,该方法包括:
6.接收客户端发送的第一缓存请求,并从该第一缓存请求中提取缓存key;
7.判断该缓存key是否在预设的频控列表中;
8.若该缓存key在所述预设的频控列表中,计算该缓存key的每秒查询率;若该每秒查询率大于预设的第一频控阈值,向该客户端返回频控限制结果;
9.若该缓存key不在所述预设的频控列表中,判断该缓存key是否为热点key;
10.若该缓存key为热点key,根据该缓存key读取本地缓存中预先缓存的结果,向该客户端返回该结果;
11.其中,热点key为访问次数高于预设次数的缓存key。
12.优选地,本技术实施例提供的方法进一步包括,向客户端返回频控限制结果之后,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
13.优选地,本技术实施例提供的方法进一步包括,若该每秒查询率小于预设的第一频控阈值,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
14.优选地,本技术实施例提供的方法进一步包括,若该缓存key不为热点key,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
15.优选地,本技术实施例提供的方法进一步包括:
16.当代理节点返回的结果为失效缓存key时,判断该失效缓存key是否为大key;
17.若该失效缓存key为大key,发送报警信息,广播该失效缓存key给所有代理节点,以使得所有代理节点清除该失效缓存key对应的本地缓存;
18.其中,失效缓存key为执行改变缓存的操作后的缓存key;
19.其中,大key为缓存key值超出第二频控阈值的缓存key。
20.优选地,本技术实施例提供的方法进一步包括:
21.当代理节点返回的结果为访问缓存key时,根据时间滑窗算法计算在一个预设周期内所有缓存key的访问次数;
22.根据所有缓存key的访问次数提取访问次数最大的多个热点key,广播该多个热点key给所有代理节点,以使得所有代理节点保存该多个热点key到本地缓存;
23.其中,访问缓存key为基于缓存key值访问命令来访问对应的缓存key。
24.优选地,本技术实施例提供的方法进一步包括:
25.接收客户端发送的第二缓存请求,并从该第二缓存请求中提取失效缓存键key和该失效缓存key的值;
26.判断该失效缓存key是否为大key;
27.若该失效缓存key为大key,标记该失效缓存key到频控列表;
28.若该失效缓存key不为大key,判断该失效缓存key是否为热点key;
29.若该失效缓存key为热点key,清除该失效缓存key对应的本地缓存,异步向代理节点上报失效缓存事件;
30.若该失效缓存key不为热点key,发送该第二缓存请求至代理节点,接收代理节点返回的结果。
31.本技术另一方面提供了一种缓存代理装置,该装置包括:接收模块、处理模块和发送模块。
32.接收模块,用于接收客户端发送的第一缓存请求,并从该第一缓存请求中提取缓存键key;
33.处理模块,用于判断该缓存key是否在预设的频控列表中,若该缓存key在该预设的频控列表中,计算该缓存key的每秒查询率;
34.发送模块,若该每秒查询率大于预设的第一频控阈值,向客户端返回频控限制结果;
35.处理模块,还用于若该缓存key不在该预设的频控列表中,判断该缓存key是否为热点key;
36.发送模块,还用于若该缓存key为热点key,根据该缓存key读取本地缓存中预先缓存的结果,向客户端返回该结果。
37.优选地,该发送模块还用于,若该每秒查询率小于预设的第一频控阈值,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
38.优选地,该发送模块还用于,若该缓存key不为热点key,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
39.优选地,该发送模块还用于,向客户端返回频控限制结果之后,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
40.优选地,该处理模块还用于:
41.当代理节点返回的结果为失效缓存key时,判断该失效缓存key是否为大key;
42.若该失效缓存key为大key,发送报警信息,广播该失效缓存key给所有代理节点,以使得所有代理节点清除该失效缓存key对应的本地缓存。
43.优选地,该处理模块还用于:
44.当代理节点返回的结果为访问缓存key时,根据时间滑窗算法计算在一个预设周期内所有缓存key的访问次数;
45.根据所有缓存key的访问次数提取访问次数最大的多个热点key,广播该多个热点key给所有代理节点,以使得该所有代理节点保存该多个热点key到本地缓存。
46.优选地,该接收模块,还用于接收客户端发送的第二缓存请求,并从该第二缓存请求中提取失效缓存键key和该失效缓存key的值。
47.该处理模块,还用于判断该失效缓存key是否为大key。
48.该处理模块,还用于若该失效缓存key为大key,标记该失效缓存key到频控列表。
49.该处理模块,还用于若该失效缓存key不为大key,判断该失效缓存key是否为热点key。
50.该处理模块,还用于若该失效缓存key为热点key,清除该失效缓存key对应的本地缓存,异步向代理节点上报失效缓存事件。
51.该发送模块,用于若该失效缓存key不为热点key,发送该第二缓存请求至代理节点,接收代理节点返回的结果。
52.本技术通过提供热点探测,能够快速发现热点key,并将该热点key缓存在代理节点,以及通过检测缓存key的每秒查询率,限制访问频率并预警,实现了对热点key、大key问题的统一处理。
附图说明
53.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
54.图1为本技术实施例提供的一种缓存代理方法的流程示意图;
55.图2为本技术实施例提供的一种缓存代理方法的失效缓存key的流程示意图;
56.图3为本技术实施例提供的一种缓存代理方法的示例性场景的流程示意图;
57.图4为本技术实施例提供的一种缓存代理方法和装置的应用环境架构图;
58.图5为本技术实施例提供的一种缓存代理装置的结构示意图;
59.图6为本技术实施例提供的另一种缓存代理装置的结构示意图;
60.图7为本技术实施例提供的一种缓存代理方法和装置的关于失效缓存key预警和广播的流程示意图;
61.图8为本技术实施例提供的一种缓存代理方法和装置的关于热点key发现的流程示意图。
具体实施方式
62.下面结合附图,对本技术的实施例进行描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
63.本技术实施例提供一种缓存代理方法,用于实现对热点key、大key问题的统一处理。本技术实施例还提供了相应的装置。以下分别进行详细说明。
64.参见图1,该图为本技术实施例提供的一种缓存代理方法的流程示意图。本技术实施例提供的一种安缓存代理方法,例如可以通过如下步骤s101-s108实现。
65.s101:接收客户端发送的第一缓存请求,并从该请求中提取缓存键key。
66.s102:判断该缓存key是否在预设的频控列表中。
67.s103:若该缓存key在预设的频控列表中,计算该缓存key的每秒查询率;
68.s104:若每秒查询率大于预设的第一频控阈值,执行步骤s107。
69.该步骤用于当该缓存key在预设的频控列表中时,根据该缓存key的qps(queries-per-second,每秒查询率)来执行相应策略。
70.具体的,若该缓存key的qps小于预设的第一频控阈值,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
71.s105:若该缓存key不在预设的频控列表中,判断该缓存key是否为热点key。
72.具体的,热点key为访问次数高于预设次数的缓存key。
73.s106:若该缓存key为热点key,根据该缓存key读取本地缓存中预先缓存的结果,执行步骤s108。
74.具体的,若该缓存key不为热点key,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
75.s107:向客户端返回频控结果。
76.若该缓存key的qps超出本方法预设的第一频控阈值,向客户端返回频控限制结果,阻止该缓存key对缓存集群的访问。
77.具体的,向客户端返回频控限制结果之后,发送该第一缓存请求至代理节点,接收该代理节点返回的结果。
78.s108:向客户端返回在本地缓存中读取的结果。
79.以上为本技术提供的一个实施例。
80.图2是本技术实施例提供的一种缓存代理方法的关于失效缓存key的流程示意图,可以通过如下步骤s201-s206实现。
81.假设缓存集群是redis cluster(redis集群),应用系统为java语言,缓存客户端为jedis cluster(jedis集群)。这时候,我们正在举行一场直播活动,直播活动id=168,直播信息有直播标题、直播封面图、直播流地址、直播在线人数、直播开始时间、直播结束时间等信息。那为了提升响应速度和服务的并发能力,我们将直播信息进行缓存处理。缓存key=live_168,缓存key值=直播信息。
82.运营后台提前将直播信息录入到管理后台,同时触发应用系统缓存client通过setex命令设置缓存:setex live_16886400"商品信息...",第一个参数setex为redis命令,表示设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。key=live_168,过期秒数为86400,也就是1天。value="商品信息..."。
83.s201:接收客户端发送的第二缓存请求,并从该第二缓存请求中提取失效缓存键key和该失效缓存key的值。
84.对于设置、修改、删除等改变缓存的操作,得到的缓存key都为失效缓存,例如解析
请求得到的命令为setex(缓存失效指令),缓存key为live_168,缓存key的值,即value为“商品信息...”。
85.s202:判断该失效缓存key是否为大key。
86.判断该失效缓存key的value是否大于第二频控阈值,比如该第二频控阈值为4kb(kilobyte,千字节)。
87.具体的,失效缓存key为执行改变缓存的操作后的缓存key。
88.具体的,大key为缓存key值超出第二频控阈值的缓存key。
89.s203:若该失效缓存key为大key,标记该失效缓存key到频控列表。
90.失效缓存key=live_168的value大于4kb,将该失效缓存key=live_168标记到频控列表。
91.s204:若该失效缓存key不为大key,判断该失效缓存key是否为热点key。
92.失效缓存key=live_168的value小于4kb,判断该失效缓存key=live_168是否为热key。
93.s205:若该失效缓存key为热点key,清除该失效缓存key对应的本地缓存,异步向代理节点上报失效缓存事件。
94.失效缓存key=live_168为热点key,根据失效缓存key=live_168来删除其对应的本地缓存,并采用异步的方式向代理节点上报失效缓存事件。
95.采用异步的方式进行上报,能够在高并发场景下,对单位时间内的指令进行去重,减少缓存代理层的访问压力,提高缓存代理层的性能。
96.s206:若该失效缓存key不为热点key,发送该第二缓存请求至代理节点,接收代理节点返回的结果。
97.将客户端的请求转发给rediscluster,读取集群响应结果,并将该结果返回给客户端。
98.图3是本技术实施例提供的一种缓存代理方法的另一流程示意图,可以通过如下步骤s301-s306实现。
99.假设缓存集群是redis cluster(redis集群),应用系统为java语言,缓存客户端为jedis cluster(jedis集群)。这时候,我们正在举行一场直播活动,直播活动id=168,直播信息有直播标题、直播封面图、直播流地址、直播在线人数、直播开始时间、直播结束时间等信息。那为了提升响应速度和服务的并发能力,我们将直播信息进行缓存处理。缓存key=live_168,缓存key值=直播信息。
100.用户请求应用系统的接口,触发缓存client(客户端)获取直播活动168的直播信息进入直播间。缓存client发起获取直播信息命令:get live_168。
101.s301:接收client的第一缓存请求并解析,提取访问缓存key。
102.解析请求提取得到命令为get(访问命令),缓存key为live_168。
103.具体的,访问缓存key为基于缓存key值访问命令来访问对应的缓存key。
104.s302:判断该缓存key是否命中频控列表。
105.若该缓存key命中频控列表,则计算该缓存key在当前节点的访问的qps,如果qps大于频控配置,如100次/毫秒,则返回被频控限制的异常结果,进入步骤s305,如果qps小于频控配置,进入步骤s304。如果未命中频控列表,则进入步骤s303。
106.s303:判断该缓存key是否为热点key。
107.若该缓存key为热点key,则直接读取该缓存key对应的本地缓存并返回,进入步骤s305。若该缓存key不为热点key,进入步骤s304。
108.s304:转发请求到缓存集群,读取集群响应结果。
109.s305:访问缓存key并异步上报。
110.s306:封装返回结果并发送给客户端。
111.具体的,对于不同的缓存服务,其请求、响应协议是不同的。将返回结果进行封装,能够解决缓存的一致性问题,并有益于后续的拓展。
112.如图4的应用环境架构图所示,本技术实施例通过增加了一层缓存代理层,通过提供热点探测,能够快速发现热点key,并将该热点key缓存在代理节点,以及通过检测缓存key的每秒查询率,限制访问频率并预警,实现了对热点key、大key问题的统一处理。本技术的缓存代理层通过广播机制来解决分布式缓存系统的数据一致性,避免了解决多语言、多集群模式所带来的高研发成本和高接入成本的问题,做到了对客户端的零侵入。同时,本技术采用边车模式部署,无需单独申请代理缓存集群服务器资源,提高了资源的利用率。
113.以上描述了本技术实施例提供的缓存代理方法,下面结合附图介绍本技术实施例提供的缓存代理装置。
114.如图5所示,本技术实施例提供的安全测试结果的自动化判定装置的一实施例包括:
115.接收模块501,用于接收客户端发送的第一缓存请求,并从该第一缓存请求中提取缓存key;
116.处理模块502,用于判断该缓存key是否在频控列表中,若该缓存key在频控列表中,计算该缓存key的每秒查询率;
117.发送模块503,用于若该每秒查询率大于预设的第一频控阈值,向客户端返回频控限制结果;
118.该处理模块502还用于若该缓存key不在频控列表中,判断该缓存key是否为热点key;
119.该发送模块503还用于若该缓存key为热点key,根据该缓存key读取本地缓存中预先缓存的结果,向客户端返回该结果。
120.具体的,该发送模块还用于若该每秒查询率小于预设的第一频控阈值,发送第一缓存请求至代理节点,接收该代理节点返回的结果。
121.具体的,该发送模块还用于若该缓存key不为热点key,发送第一缓存请求至代理节点,接收该代理节点返回的结果。
122.如图6所示,一种可能的实施例中,该装置包括:连接模块、热点模块、频控模块、事件模块、事件处理集群和配置中心。
123.连接模块用于接收客户端的所有缓存请求,并将该缓存请求代理分发给缓存集群,读取缓存集群响应结果,并将该结果返回给客户端。在该请求响应的过程中,该连接模块还用于解析缓存key值访问命令、缓存key值失效命令,并将这些命令发送给事件模块、同步发送至频控模块获取频控结果。
124.热点模块用于维护热点key的本地缓存及本地缓存对应的过期时间。
125.频控模块用于接收来自连接模块的缓存key值访问命令,判断其缓存key是否在频控列表,其缓存key值是否超过预设的第二频控阈值,并计算出频控结果返回给连接模块。
126.事件模块,用于接收来自连接模块的缓存key值访问事件和缓存key值失效事件,并将这些事件异步上报给事件处理集群。该事件模块还用于监听来自事件处理集群的热点key发现事件和热点key失效事件,并通知热点模块更新热点列表及本地缓存。
127.事件处理集群用于接收所有代理节点上报的的key值事件。
128.配置中心用于存储频控配置策略,并根据对应情况,下发给所有代理节点。
129.如图7所示,一种可能的实施例中,事件处理集群还用于如下步骤s701-s703:
130.s701:事件处理集群接收来自代理节点上报的失效缓存key事件,该失效缓存key事件包括缓存key值失效命令、失效缓存key、是否为大key标记。
131.s702:判断该失效缓存key是否为大key,若该失效缓存key为大key,执行步骤s703,若该失效缓存key不为大key,执行步骤s704.
132.s703:根据预设规则发送报警信息。
133.s704:广播该失效缓存key给所有代理节点,通知代理节点清楚失效缓存key对应的本地缓存。
134.如图8所示,一种可能的实施例中,时间处理集群还用于如下步骤s801-s805:
135.s801:事件处理集群接收来自代理节点上报的访问缓存key事件,该访问缓存key事件包括访问缓存key值命令、缓存key。
136.s802:对每个缓存key设置一个热度滑窗计数器。
137.s803:根据时间滑窗算法计算在一个预设周期内所有缓存key的访问次数。
138.可选的,定期根据预设周期统计每个缓存key的访问热度,并进行汇总。
139.s804:根据所有缓存key的访问次数提取访问次数最大的多个热点key。
140.可选的,从访问热度汇总结果选出topn热点key。
141.s805:将提取出的多个热点key广播给所有代理节点,使得所有代理节点将该多个热点key保存到本地缓存。
142.可选的,广播热点key列表给所有代理节点,代理节点接收消息后,保存热点key和key值到本地缓存。当下一次代理节点接收到这些热点key的访问缓存key值指令,能够直接从缓存集群获取对应结果。
143.需要说明的是,上述所描述缓存代理装置由于与本技术图3所示的方法实施例基于同一构思,其带来的技术效果与本技术方法实施例相同,具体内容可参见本技术前述所示的图3的方法实施例的技术效果的叙述,此处不再赘述。
144.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
145.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,
装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
146.以上的具体实施方式,对本技术的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本技术的具体实施方式而已。
147.以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1