CN109725852B - 一种限流计数的优化方法及终端 - Google Patents
一种限流计数的优化方法及终端 Download PDFInfo
- Publication number
- CN109725852B CN109725852B CN201811415872.9A CN201811415872A CN109725852B CN 109725852 B CN109725852 B CN 109725852B CN 201811415872 A CN201811415872 A CN 201811415872A CN 109725852 B CN109725852 B CN 109725852B
- Authority
- CN
- China
- Prior art keywords
- interface
- redis cluster
- counting information
- cluster queue
- counting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种限流计数的优化方法及终端,通过在每一接口中新增记录被调用次数的第一计数信息,定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有包括实例标识和对应的第一计数信息的第二计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,无需操作IO,可以降低维护计数器的消耗,需要限流的接口只需访问redis集群队列获取总请求量,提高中心节点汇总数据的高效性,提高接口效率。
Description
技术领域
本发明涉及互联网产品技术领域,尤其是涉及一种限流计数的优化方法及终端。
背景技术
在开发高并发终端时通常采用缓存、降级和限流来保护终端,缓存的目的是提升终端访问速度和增大终端能处理的容量,是抗高并发流量的有力手段;降级是当服务出问题或影响到核心流程的性能时则暂时屏蔽,待高峰过去或问题解决后再打开;有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此通过限流来限制这些场景的并发/请求量,限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护终端,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)。
在限流中分为单机限流以及分布式限流两种方案,二者主要的区别是在分布式限流中,接口请求计数器需要中心化存储,即多个实例的接口请求数量需要存储在一个中心点中,而不是像单机限流方案中只存储在本地实例中。此时,需要开发人员自己维护一个中心计数器来计算统计各个实例的总数据量。目前的方案一般是把所有实例中的计数信息发送到redis集群中,将其作为一个中心存储节点,当实例需要使用终端时均要访问redis集群。每个实例的所有操作均需要添加一次redis的读写操作,多了一次IO,同时每个实例都会频繁更新计数器,给redis带来不小的压力。
发明内容
本发明所要解决的技术问题是:提供一种限流计数的优化方法及终端,无需操作IO,提高接口的效率。
为了解决上述技术问题,本发明采用的技术方案为:
一种限流计数的优化方法,包括步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中。
为了解决上述技术问题,本发明采用的技术方案为:
一种限流计数的优化终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中。
本发明的有益效果在于:通过在每一接口中新增记录被调用次数的第一计数信息,定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有包括实例标识和对应的第一计数信息的第二计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,无需操作IO,可以降低维护计数器的消耗,需要限流的接口只需访问redis集群队列获取总请求量,提高中心节点汇总数据的高效性,提高接口效率。
附图说明
图1为本发明实施例的一种限流计数的优化方法的流程图;
图2为本发明实施例的一种限流计数的优化终端的结构示意图;
标号说明:
1、一种限流计数的优化终端; 2、存储器; 3、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:在每一接口中新增第一计数信息,定时将每一个实例中汇总的各接口的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有第二计数信息,处理得到每一接口的总请求量。
请参照图1,一种限流计数的优化方法,包括步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中。
从上述描述可知,本发明的有益效果在于:通过在每一接口中新增记录被调用次数的第一计数信息,定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有包括实例标识和对应的第一计数信息的第二计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,可以降低维护计数器的消耗,无需操作IO,避免计算数据与汇总数据的操作互相影响,需要限流的接口只需访问redis集群队列获取总请求量,提高中心节点汇总数据的高效性,提高接口效率。
进一步的,所述第一计数信息包括接口类型和对应的被调用的数量。
由上述描述可知,所述接口类型用于区分不同的接口进行计数。
进一步的,所述步骤S2中所述定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后还包括:
将该实例中每一接口对应的第一计数信息中的被调用的数量清零。
由上述描述可知,将被调用的数量清零可以方便下一时间段的数据统计。
进一步的,所述步骤S2中通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列。
由上述描述可知,通过异步处理的方式可以提高工作效率,避免计数数据与汇总数据的操作互相影响。
进一步的,步骤S3中所述定时取出redis集群队列中的所有第二计数信息,处理得到每一接口的总请求量具体为:
获取所述redis集群中所有的所述第二计数信息,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量。
由上述描述可知,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量,可以提高中心节点汇总数据的高效性,同时可以提高接口效率,降低用于维护计数器的消耗。
请参照图2,一种限流计数的优化终端1,包括存储器2、处理器3及存储在存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现以下步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中。
从上述描述可知,本发明的有益效果在于:通过在每一接口中新增记录被调用次数的第一计数信息,定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有包括实例标识和对应的第一计数信息的第二计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,可以降低维护计数器的消耗,无需操作IO,避免计算数据与汇总数据的操作互相影响,需要限流的接口只需访问redis集群队列获取总请求量,提高中心节点汇总数据的高效性,提高接口效率。
进一步的,所述第一计数信息包括接口类型和对应的被调用的数量。
由上述描述可知,所述接口类型用于区分不同的接口进行计数。
进一步的,所述步骤S2中所述定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后还包括:
将该实例中每一接口对应的第一计数信息中的被调用的数量清零。
由上述描述可知,将被调用的数量清零可以方便下一时间段的数据统计。
进一步的,所述步骤S2中通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列。
由上述描述可知,通过异步处理的方式可以提高工作效率,避免计数数据与汇总数据的操作互相影响。
进一步的,步骤S3中所述定时取出redis集群队列中的所有第二计数信息,处理得到每一接口的总请求量具体为:
获取所述redis集群中所有的所述第二计数信息,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量。
由上述描述可知,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量,可以提高中心节点汇总数据的高效性,同时可以提高接口效率,降低用于维护计数器的消耗。
实施例一
请参照图1,一种限流计数的优化方法,包括步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
其中,所述第一计数信息包括接口类型和对应的被调用的数量。
具体地,所述第一计数信息记录在本地内存中,每当接口被调用时,所述第一计数信息的接口被调用数量加一。所述第一计数信息的接口类型用于区分不同的接口。
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
具体地,通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,在所述redis集群队列中保存的每一条记录都是每一次实例汇总上来的原始计数器数据;
所述异步处理的定时时间可以自行定义,优选地,所述定时的时间间隔为1分钟或2分钟,这时异步处理任务每隔1分钟或2分钟获取本地内存中的所述第一计数信息,遍历所述第一计数信息后将其推送至redis集群队列;
在定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后,将该实例中每一接口对应的第一计数信息中的被调用的数量清零。
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,具体的,通过与步骤S2中不同的独立的另一个异步处理任务来执行步骤S3;
具体地,获取所述redis集群中一段时间内的所有的所述第二计数信息,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到这一段时间内每一接口类型的总请求量,将所述每一接口的总请求量存入所述redis集群队列中;将所述每一接口类型的总请求量除以这段时间得到每一接口类型在该时间段内的每秒请求量,将所述每一接口的每秒请求量存入所述redis集群队列中,方便接口的查询使用。
当接收需要限流的接口的请求时,只需返回redis集群队列中的所述该接口的总请求量即可。
实施例二
将实施例一所述的方法应用于具体的例子:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
其中,所述第一计数信息包括接口类型和对应的被调用的数量。
具体地,所述第一计数信息记录在本地内存中,所述第一计数信息是数据类型为map<接口类型,数量>的变量,每当接口被调用一次时,所述第一计数信息的接口被调用数量加一。所述第一计数信息的接口类型用于区分不同的接口,所述map<接口类型,数量>中的接口类型的字段名称为key。
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
具体地,通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,在所述redis集群队列中保存的每一条记录都是每一次实例汇总上来的原始计数器数据;
所述异步处理的定时时间可以自行定义,优选地,所述定时的时间间隔为1分钟或2分钟,这时异步处理任务每隔1分钟或2分钟获取本地内存中的map数据信息,遍历所述第一计数信息后将其推送至redis集群队列;
在定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后,将该实例中每一接口对应的第一计数信息中的被调用的数量清零,即将本地内存中各个接口的被调用数量置为0。
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,具体的,通过与步骤S2中不同的独立的另一个异步处理任务来执行步骤S3;
其中,所述redis集群队列中的第二计数信息也为map结构,但所述第二计数信息的map结构为map<key,field,value>,其中key为实例ID信息,即所述实例标识,field为接口类型,value为该时间段内的请求数量;
具体地,获取所述redis集群中一段时间内的所有的map信息,按照所有map信息中涉及的实例ID列表,分别获取每个实例的每个接口一段时间内的被调用数量,接着根据所述map信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到这一段时间内每一接口类型的总请求量,将所述每一接口的总请求量存入所述redis集群队列中;将所述每一接口类型的总请求量除以这段时间得到每一接口类型在该时间段内的每秒请求量,将所述每一接口的每秒请求量存入所述redis集群队列中,方便接口的查询使用。
当接收需要限流的接口的请求时,只需返回redis集群队列中的所述该接口的总请求量即可。
实施例三
请参照图2,一种限流计数的优化终端1,包括存储器2、处理器3及存储在存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的各个步骤。
综上所述,本发明提供的一种限流计数的优化方法及终端,通过在每一接口中新增记录被调用次数的第一计数信息,定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列,定时取出redis集群队列中所有包括实例标识和对应的第一计数信息的第二计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中,所有用户的同步操作在维护计数器的消耗上只需要一次的本地内存累加操作,无需操作IO,可以降低维护计数器的消耗,同时通过两个不同的异步处理任务分别进行计算数据和汇总数据,避免计算数据与汇总数据的操作互相影响,通过异步处理的方式可以提高工作效率,需要限流的接口只需访问redis集群队列获取总请求量,提高中心节点汇总数据的高效性,提高接口效率。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种限流计数的优化方法,其特征在于,包括步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中;
所述步骤S2中通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列。
2.根据权利要求1所述的一种限流计数的优化方法,其特征在于,所述第一计数信息包括接口类型和对应的被调用的数量。
3.根据权利要求1或2所述的一种限流计数的优化方法,其特征在于,所述步骤S2中所述定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后还包括:
将该实例中每一接口对应的第一计数信息中的被调用的数量清零。
4.根据权利要求2所述的一种限流计数的优化方法,其特征在于,步骤S3中所述定时取出redis集群队列中的所有第二计数信息,处理得到每一接口的总请求量具体为:
获取所述redis集群中所有的所述第二计数信息,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量。
5.一种限流计数的优化终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、在每一接口中新增第一计数信息,记录该接口被调用的次数;
S2、定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列;
S3、定时取出redis集群队列中所有的第二计数信息,所述第二计数信息包括实例标识和对应的第一计数信息,处理得到每一接口的总请求量,将所述每一接口的总请求量存入所述redis集群队列中;
所述步骤S2中通过异步处理的方式定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列。
6.根据权利要求5所述的一种限流计数的优化终端,其特征在于,所述第一计数信息包括接口类型和对应的被调用的数量。
7.根据权利要求5或6所述的一种限流计数的优化终端,其特征在于,所述步骤S2中所述定时将每一个实例中汇总的每一接口对应的第一计数信息推送至redis集群队列之后还包括:
将该实例中每一接口对应的第一计数信息中的被调用的数量清零。
8.根据权利要求6所述的一种限流计数的优化终端,其特征在于,步骤S3中所述定时取出redis集群队列中的所有第二计数信息,处理得到每一接口的总请求量具体为:
获取所述redis集群中所有的所述第二计数信息,根据所述第二计数信息中包含的接口类型分别对与所述接口类型对应的所有被调用的数量进行累加,得到每一接口类型的总请求量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811415872.9A CN109725852B (zh) | 2018-11-26 | 2018-11-26 | 一种限流计数的优化方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811415872.9A CN109725852B (zh) | 2018-11-26 | 2018-11-26 | 一种限流计数的优化方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109725852A CN109725852A (zh) | 2019-05-07 |
CN109725852B true CN109725852B (zh) | 2022-06-07 |
Family
ID=66295753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811415872.9A Active CN109725852B (zh) | 2018-11-26 | 2018-11-26 | 一种限流计数的优化方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109725852B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110363482A (zh) * | 2019-07-16 | 2019-10-22 | 腾讯科技(上海)有限公司 | 计数方法、装置、服务器以及存储介质 |
CN111352967B (zh) * | 2020-02-27 | 2024-02-06 | 携程旅游网络技术(上海)有限公司 | 滑动窗口算法的频次控制方法、系统、设备及介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060294058A1 (en) * | 2005-06-28 | 2006-12-28 | Microsoft Corporation | System and method for an asynchronous queue in a database management system |
US20080263077A1 (en) * | 2007-04-19 | 2008-10-23 | Christopher Boston | Systems, methods, website and computer products for service ticket consolidation and display |
CN106874319A (zh) * | 2016-06-17 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 点击量的分布式统计方法及装置 |
CN108112038B (zh) * | 2016-11-24 | 2021-06-01 | 深圳市云网万店科技有限公司 | 一种控制访问流量的方法及装置 |
CN107609976A (zh) * | 2017-09-25 | 2018-01-19 | 中国银行股份有限公司 | 一种交易接口的限流方法及装置 |
-
2018
- 2018-11-26 CN CN201811415872.9A patent/CN109725852B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109725852A (zh) | 2019-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10372723B2 (en) | Efficient query processing using histograms in a columnar database | |
CN111460023B (zh) | 基于Elasticsearch的业务数据处理方法、装置、设备及存储介质 | |
CN1811757B (zh) | 用于定位万维网页以及计算机网络文件的系统和方法 | |
US7243110B2 (en) | Searchable archive | |
CN103370691B (zh) | 管理缓冲器溢出状况 | |
US20070143246A1 (en) | Method and apparatus for analyzing the effect of different execution parameters on the performance of a database query | |
CN105095365A (zh) | 一种信息流数据的处理方法和装置 | |
US20110202497A1 (en) | Systems and Methods for Performing Direct Reporting Access to Transaction Databases | |
CN108228322B (zh) | 一种分布式链路跟踪、分析方法及服务器、全局调度器 | |
CN107783881B (zh) | 基于内存队列的网站动态性能监控方法及系统 | |
CN109815240B (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN109725852B (zh) | 一种限流计数的优化方法及终端 | |
CN110321364B (zh) | 信用卡管理系统的交易数据查询方法、装置及终端 | |
CN103392169A (zh) | 排序 | |
US20110179013A1 (en) | Search Log Online Analytic Processing | |
CN108228432A (zh) | 一种分布式链路跟踪、分析方法及服务器、全局调度器 | |
CN115408149A (zh) | 一种时序存储引擎内存设计及分配方法及装置 | |
US20170337197A1 (en) | Rule management system and method | |
CN107330031A (zh) | 一种数据存储的方法、装置及电子设备 | |
CN109739913A (zh) | 一种基于可配置化的热点数据缓存处理方法及设备 | |
US8290935B1 (en) | Method and system for optimizing database system queries | |
CN108140047B (zh) | 数据处理装置和方法以及数据容器结构 | |
CN110990394B (zh) | 分布式面向列数据库表的行数统计方法、装置和存储介质 | |
US10037155B2 (en) | Preventing write amplification during frequent data updates | |
Mavroudopoulos et al. | A Comprehensive Scalable Framework for Cloud-Native Pattern Detection with Enhanced Expressiveness |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |