一种缓存的处理方法及装置与流程

文档序号:20884205发布日期:2020-05-26 17:22阅读:153来源:国知局
一种缓存的处理方法及装置与流程

本发明涉及计算机技术领域,具体涉及一种缓存的处理方法及装置。



背景技术:

内容分发网络cdn是为了用户能就近访问在服务器端做了缓存,在没有到缓存过期时及时清除cdn缓存;或是为了用户能就近访问在服务器端做了缓存,在用户访问之前在服务器端提前缓存。现有技术处理缓存主要是通过把用户请求通过超文本传输协议http接口鉴权后存储至数据库,每台管理设备再通过agent去访问数据库读取数据,读取数据后写入本地文件,然后通过多个脚本相互嵌套读取文件内容发送处理请求给反向代理nginx,nginx通过hash算法转给后端缓存程序ats,ats接口接收请求后,删除或预热相应的缓存文件

在实现本发明过程中,发明人发现现有技术中至少存在如下问题:

现有技术中,因为每条请求都要存入数据库,数据库在存数据时候写入硬盘的压力会很大,在很大并发的情况下,数据写入及读取都会有很大延迟,导致处理缓存不及时。



技术实现要素:

本发明实施例提供一种缓存的处理方法及装置,通过采取全新的技术考量和全新的方案设计,使逻辑更简单,同时存入数据库的方式变更为消息队列的方式,通过内存队列更快的写入和读取数据,并且各个环节都可以采用分布式的方式,保证高可用。

为达到上述目的,一方面,本发明实施例提供了一种缓存的处理方法,所述方法包括:

通过消息转换程序将缓存处理请求放入本地内存队列,按批次将本地内存队列中的缓存处理请求发送到分布式流平台kafka;

确定kafka的客户端程序agent管理的集群虚拟ip;

通过agent从kafka中读出缓存处理请求,并将缓存处理请求发送至集群虚拟ip;

通过所述集群虚拟ip将缓存处理请求转发至后端真实服务器以处理该缓存处理请求对应的缓存内容。

另一方面,本发明实施例提供了一种缓存的处理装置,所述装置包括:

请求获取单元,用于通过消息转换程序将缓存处理请求放入本地内存队列,按批次将本地内存队列中的缓存处理请求数据发送到分布式流平台kafka;

ip获取单元,用于确定kafka的客户端程序agent管理的集群虚拟ip;

请求发送单元,用于通过agent从kafka中读出缓存处理请求,并将缓存处理请求发送至集群虚拟ip;

请求处理单元,用于通过所述集群虚拟ip将缓存处理请求转发至后端真实服务器以处理该缓存处理请求对应的缓存内容。

上述技术方案具有如下有益效果:本申请技术方案通过采取全新的技术考量和全新的方案设计,使逻辑更简单,同时存入数据库的方式变更为消息队列的方式,本身数据的索引放在内存中,通过内存队列更快的写入和读取数据,方案的agent可以兼容多种数据源并且各个环节都可以采用分布式的方式,保证高可用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例一种缓存的处理方法的流程图;

图2是本发明实施例一种缓存的处理装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,是本发明实施例一种缓存的处理方法的流程图,所述方法包括:

s101:通过消息转换程序将缓存处理请求放入本地内存队列,按批次将本地内存队列中的缓存处理请求发送到分布式流平台kafka。

对于消息的接入,在此之前,获取缓存处理请求的超文本传输协议http,所述http包括处理对象的统一资源定位符url、鉴权编号kid及鉴权秘钥key;判段所述kid及key是否正确以及所述url是否具有刷新权限;若判定所述kid及key正确以及所述url具有刷新权限,则将所述缓存处理请求转发给所述消息转换程序。

具体地,用户通过页面或者特定的软件sdk发送http请求至api接口,请求的body需要带着要刷新的url,kid,key,api接收请求后去验证kid和key是否正确,以及是否有url的刷新权限,通过则转发消息至nginx端口,否则直接报错返回用户信息。反向代理nginx监听http端口,通过nginx的upstream模块负载均衡后,转发至其中一台存活的后端消息转换程序agent的端口,agent接收请求后直接放入本地内存队列,按时间或者数据字节大小(其中一项符合即可发送),按批次发送数据至kafka。

s102:确定kafka的客户端程序agent管理的集群虚拟ip。

对于集群虚拟ip的确定,优选地,每个agent上报心跳至调度接口,调度接口根据上报的心跳周期判断agent是否存活,如否,则把该判断为死亡的agent管理的集群分配给其他agent,计算完成每个存活的agent管理的集群列表后将集群虚拟ip放入内存,对接至api接口保证随时可查。

s103:通过agent从kafka中读出缓存处理请求,并将缓存处理请求发送至集群虚拟ip。

agent的reader模块通过经过sasl认证后连接至kafka,对应kafka的队列topic,读取消息至agent内存中,并且定时上报每次读取消息的位置offset至kafka,然后把消息转至parser模块,进入处理阶段。

优选地,在agent启动时申请数据处理队列;通过数据处理队列存储从kafka中读出的缓存处理请求;从数据处理队列中读出缓存处理请求,经过防盗链规则的约束后,在缓存处理请求的url中增加参数args,或者在缓存处理请求的http中增加请求头requestheader,然后将缓存处理请求发送至集群虚拟ip。

优选地,对于缓存删除请求,agent在启动时申请了4个队列为:localqueue、sleepqueue、execqueue和limitqueue;以及,所述四个数据处理队列之间相互控制关联限速,具体包括:

(1).localqueue:将从kafka读取的缓存处理请求放入localqueue,队列写满后阻塞,不再从kafka读取;localqueue为本地队列,例如长度设置为100万。

(2).sleepqueue:当从localqueue读出缓存处理请求后,在sleepqueue中写入1,队列写满后阻塞,以防止本地sleep的任务占内存太大,导致程序失控;sleepqueue为休眠队列,例如长度设置为30万。

(3).当从localqueue读出缓存处理请求后,在sleepqueue中写入1时,同时把缓存处理请求写入execqueue,队列写满后阻塞,当从execqueue读出缓存处理请求时,同时从sleepqueue中读出1,当execqueue队列的内容全部读取完成后阻塞。

(4).limitqueue:当从execqueue读出缓存处理请求进行处理时,同时在limitqueue中写入1,每处理完成一条缓存处理请求后从limitqueue中读出1,保证该设备并行的连接在可控范围之内将从execqueue读出的清除缓存请求任务经过防盗链规则的约束后,增加清除缓存请求的url的参数args,或者清除缓存请求的http的requestheader,发送请求至第一步已经获取的集群的虚拟ip,该虚拟ip为lvs服务创建的虚拟ip,用于集群内服务器的负载均衡。

对于缓存预热请求,agent在启动时申请了2个队列为:execqueue和limitqueue;以及,所述两个数据处理队列之间相互控制关联限速,包括:

(1).execqueue:将从kafka读取的缓存处理请求放入execqueue,同时在limitqueue中写入1;

(2).limitqueu:当从execqueue读出缓存处理请求进行处理时,同时在limitqueue中写入1,每处理完成一条缓存处理请求后从limitqueue中读出1,保证该设备并行的连接在可控范围之内,将从execqueue读出的清除缓存请求任务经过防盗链规则的约束后,增加清除缓存请求的url的参数args,或者清除缓存请求的http的requestheader,发送get请求,及range请求的第一个字节至已经获取的集群的虚拟ip(由lvs服务创建的虚拟ip,用于集群内服务器的负载均衡。

s104:通过所述集群虚拟ip将缓存处理请求转发至后端真实服务器以处理该缓存处理请求对应的缓存内容。虚拟ip转发请求至后端真实服务器的nginx,nginx接收请求后通过hash算法转发至后端ats接口,ats接口删除对应url的缓存。

对应于上述方法,如图2所示,是本发明实施例一种缓存的处理装置的结构示意图,所述装置包括:

请求获取单元21,用于用于通过消息转换程序将缓存处理请求放入本地内存队列,按批次将本地内存队列中的缓存处理请求数据发送到分布式流平台kafka;

ip获取单元22,用于确定kafka的客户端程序agent管理的集群虚拟ip;

请求发送单元23,用于通过agent从kafka中读出缓存处理请求,并将缓存处理请求发送至集群虚拟ip;

请求处理单元24,用于通过所述集群虚拟ip将缓存处理请求转发至后端真实服务器以处理该缓存处理请求对应的缓存内容。

进一步地,所述请求获取单元还用于:

在所述通过消息转换程序将缓存处理请求放入本地内存队列之前,

获取缓存处理请求的超文本传输协议http,所述http包括处理对象的统一资源定位符url、鉴权编号kid及鉴权秘钥key;

判段所述kid及key是否正确、以及所述url是否具有刷新权限;

若判定所述kid及key正确、且所述url具有刷新权限,则将所述缓存处理请求转发给所述消息转换程序。

进一步地,所述ip获取单元具体用于:

将每个agent上报心跳至调度接口,调度接口根据上报的心跳周期判断agent是否存活,如否,则把该判断为死亡的agent管理的集群分配给其他agent,计算完成每个存活的agent管理的集群列表后将集群虚拟ip放入内存。

进一步地,所述请求发送单元具体用于:

在agent启动时申请数据处理队列;

通过数据处理队列存储从kafka中读出的缓存处理请求;

从数据处理队列中读出缓存处理请求,经过防盗链规则的约束后,在缓存处理请求的url中增加参数args,或者在缓存处理请求的http中增加请求头requestheader,然后将缓存处理请求发送至集群虚拟ip。

进一步地,所述缓存处理请求包括缓存删除请求和缓存预热请求,对于缓存删除请求,所述数据处理队列为:localqueue、sleepqueue、execqueue和limitqueue;以及,所述四个数据处理队列之间相互控制关联限速,具体包括:

将从kafka读取的缓存处理请求放入localqueue,队列写满后阻塞;

当从localqueue读出缓存处理请求后,在sleepqueue中写入1,队列写满后阻塞;

当从localqueue读出缓存处理请求后在sleepqueue中写入1时,同时把缓存处理请求写入execqueue,队列写满后阻塞;

当从execqueue读出缓存处理请求时,同时从sleepqueue中读出1,当execqueue队列的内容全部读取完成后阻塞;

当从execqueue读出缓存处理请求进行处理时,同时在limitqueue中写入1,每处理完成一条缓存处理请求后从limitqueue中读出1;

对于缓存预热请求,所述数据处理队列为:execqueue和limitqueue;以及,所述两个数据处理队列之间相互控制关联限速,包括:

将从kafka读取的缓存处理请求放入execqueue,同时在limitqueue中写入1;

当从execqueue读出缓存处理请求进行处理时,同时在limitqueue中写入1,每处理完成一条缓存处理请求后从limitqueue中读出1。

本申请技术方案比现有方案的读写速度要快,本方案采用消息队列的方式,本身数据的索引放在内存中,比mysql数据库放入硬盘中要快很多,其次mysql的读写性能和消息队列不是一个量级;本方案可直接获取内存队列的长度,获取刷新是否有延迟的监控,而现有方案只能通过日志分析,比较原始;本方案是流式数据处理,而现有方案是通过读取mysql存储到文件,通过脚本按批次处理的方式,可能导致处理不及时;本方案的agent可以兼容多种数据源,不只是可以从kafka获取消息,代码已成框架,开发成本较低。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个装置的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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