一种热点信息监测方法、装置及系统
技术领域
本申请涉及数据处理领域,尤其涉及一种热点信息监测方法、装置及系统。
背景技术
在Redis服务器中,访问频率高的关键码(以下称为Key)称为热点Key。热点Key处理不当容易造成Redis服务器进程阻塞,影响正常服务。
热点Key问题产生的原因大致有以下两种:
(1)用户消费的数据远大于生产的数据(秒杀、热卖商品、热点新闻、热点评论、明星直播)。
在日常工作生活中一些突发事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,会形成一个较大的需求量,这种情况下就会造成热点问题。同理,被大量刊发、浏览的热点新闻、热点评论、明星直播等,这些典型的读多写少的场景也会产生热点问题。
(2)请求分片集中,超过单各服务器的性能极限。
在服务器读数据进行访问时,往往会对数据进行分片切分,此过程中会在某一服务器上对相应的Key进行访问,当访问超过服务器极限时,就会导致热点Key问题的产生。
现有技术中,发现热点Key的方法主要由以下几种:
方法一:凭借工作人员的业务经验,进行预估哪些是热点Key。李例,某商品在做秒杀,那这个商品的Key可能是热点Key。
方法二:在客户端进行收集,在客户端加入代码进行数据统计。
方法三:在代理Proxy层收集。如果Redis服务器集群采用Twemproxy代理分片机制,可在服务器集群的统一入口——代理Proxy层对热点Key数据进行手机上报。
方法四:使用Redis自带命令。如monitor命令或hotkeys参数。
上述发现热点Key的方法存在以下缺陷:
方法一,容易出现错误且并非所有业务都可预估出热Key。
方法二,对客户端代码造成入侵,而且会带来内存暴增、性能下降等问题。
方法三,并非所有的Redis服务器集群架构都存在proxy层。而且,实现复杂,多加一层代理,访问延迟增加,占用资源较多,降低性能。
方法四,monitor命令在高并发的条件下,有内存增暴增的隐患,还会降低Redis服务器的性能。hotkeys参数在高版本服务器支持,在执行的时候,要遍历全量数据,如果Key比较多,执行起来比较慢,而且不能给出定量的结果。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请实施例提供了一种热点信息监测方法、装置及系统。
第一方面,本申请实施例提供了一种热点信息监测方法,包括:
确定符合预设条件的网络接口;
对所述网络接口接收到的网络数据包进行复制,得到待分析数据包;
解析得到所述待分析数据包中的关键码;
统计所述关键码的第一访问信息;
根据所述第一访问信息生成热点信息。
可选的,所述确定符合预设条件的网络接口,包括:
当所述网络接口的访问频率超出预设频率阈值时,确定所述网络接口符合预设条件;
和/或,
当当前时间到达预设时间范围时,确定所述网络接口符合预设条件。
可选的,所述对所述网络接口接收到的网络数据包进行复制,得到待分析数据包,包括:
从所述网络接口接收到的网络数据包中筛选符合预设协议类型的网络数据包;
对符合所述预设协议类型的网络数据包进行复制,得到所述待分析数据包。
可选的,所述解析得到所述待分析数据包中的关键码,包括:
当确定至少两个所述待分析数据包对应同一数据时,保留其中一个所述待分析数据包;
从保留的所述待分析数据包中解析得到所述数据对应的关键码。
可选的,所述统计所述关键码的第一访问信息,包括:
将所述关键码及所述关键码在第一预设时间间隔内的访问次数记录为所述第一访问信息;
将所述第一访问信息保存到第一散列表中。
可选的,所述统计所述关键码的第一访问信息,还包括:
当到达所述第一预设时间间隔时,将所述第一散列表通过多级缓冲后进行存储;
生成用于保存下一第一预设时间间隔对应的第一访问信息的第二散列表。
可选的,所述根据所述第一访问信息生成热点信息,包括:
根据所述第一访问信息确定所述访问次数超过预设阈值的关键码为热点关键码;
统计在第二预设时间间隔内所述热点关键码的出现次数;
根据所述出现次数生成所述热点关键码对应的热点信息。
第二方面,本申请实施例提供了一种热点信息监测装置,包括:
确定模块,用于确定符合预设条件的网络接口;
复制模块,用于对所述网络接口接收到的网络数据包进行复制,得到待分析数据包;
解析模块,用于解析得到所述待分析数据包中的关键码;
统计模块,用于统计所述关键码的第一访问信息;
生成模块,用于根据所述第一访问信息生成热点信息。
第三方面,本申请实施例提供了一种热点信息监测系统,包括:与网络接口连接的旁路分析装置;
所述旁路分析装置,用于确定符合预设条件的网络接口,对所述网络接口接收到的网络数据包进行复制,得到待分析数据包,解析得到所述待分析数据包中的关键码,统计所述关键码的第一访问信息,根据所述第一访问信息生成热点信息。
可选的,所述旁路分析装置包括:过滤器、解析器、至少两级缓冲器、存储器及生成器;
所述过滤器,用于确定符合预设条件的网络接口,对所述网络接口接收到的网络数据包进行复制,得到待分析数据包;
所述解析器,用于从所述待分析数据包中解析得到所述关键码,将所述关键码及所述关键码在第一预设时间间隔内的访问次数记录为所述第一访问信息,将所述第一访问信息保存到第一散列表中,将所述第一散列表发送到第一级数据缓冲区,并生成用于保存下一第一预设时间间隔对应的第一访问信息的第二散列表;
所述第一级数据缓冲区,用于缓存所述第一散列表,当到达所述第一预设时间间隔时,将所述第一散列表发送到下一级数据缓冲区;
所述下一级数据缓冲区,用于缓存所述第一散列表,将所述第一散列表发送到所述存储器;
所述存储器,用于存储所述第一散列表;
所述生成器,用于从所述存储器中获取所述第一散列表,根据所述第一散列表生成热点信息。
第四方面,本申请实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行计算机程序时,实现上述方法步骤。
第五方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
通过旁路抓取访问服务器的数据包,统计数据包中Key的访问信息,可以准确、快速地分析定位热点Key。另外,由于采用旁路分析的模式,对客户端或服务器无代码侵入,避免带来客户端或服务器内存暴增、性能下降的问题,对线上业务影响较小。同时,可以适用于多种不同架构及不同版本的服务器,提高热点信息监测方法的普适性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种热点信息监测方法的流程图;
图2为本申请另一实施例提供的一种热点信息监测方法的流程图;
图3为本申请另一实施例提供的一种热点信息监测方法的流程图;
图4为本申请实施例提供的多级缓冲示意图;
图5为本申请实施例提供的统计后的第一访问信息的示意图;
图6为本申请另一实施例提供的一种热点信息监测方法的流程图;
图7为本申请实施例提供的热点信息的示意图;
图8为本申请实施例提供的一种热点信息监测装置的框图;
图9为本申请实施例提供的热点信息监测系统的框图;
图10为本申请另一实施例提供的热点信息监测系统的框图;
图11为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例解决了现有技术中热点Key难以被发现的问题,同时为了避免对服务器及客户端的代码侵入,通过旁路抓取请求数据包,通过解析数据包统计Key的被访问频次。
下面首先对本发明实施例所提供的一种热点信息监测方法进行介绍。该方法采用旁路分析方式,对网络接口接收到的数据进行复制用于热点Key的分析。
图1为本申请实施例提供的一种热点信息监测方法的流程图。如图1所示,该方法包括以下步骤:
步骤S11,确定符合预设条件的网络接口。
由于旁路分析也会占用一定的计算资源,因此,并不会对所有网络接口接收到的数据进行分析,而是对特定情形和/或特定时间下的网络接口所接收到的数据继续分析。
通常将过滤规则下发到内核层,由内核层根据该过滤规则选择相应的网络接口进行数据复制。
步骤S12,对网络接口接收到的网络数据包进行复制,得到待分析数据包。
步骤S13,解析得到待分析数据包中的Key。
由于客户端和Redis服务器之间使用RESP(REdis Serialization Protocol)的二进制安全文本协议进行通信,因此,通过对该协议进行分析,得到待分析数据包中的Key。
步骤S14,统计Key的第一访问信息。
其中,记录Key在一定时间段内的访问次数,如每秒钟的访问次数。以散列表(Hash表)的方式保持该第一访问信息。
步骤S15,根据第一访问信息生成热点信息。
这样,通过统计每个Key的访问信息,可以定位业务中的热点Key。
本实施例中,通过旁路抓取访问服务器的数据包,统计数据包中Key的访问信息,可以准确、快速地分析定位热点Key。另外,由于采用旁路分析的模式,对客户端或服务器无代码侵入,避免带来客户端或服务器内存暴增、性能下降的问题,对线上业务影响较小。同时,可以适用于多种不同架构及不同版本的服务器,提高热点信息监测方法的普适性。
在可选实施例中,上述步骤S11包括以下至少一项:
(一)当网络接口的访问频率超出预设频率阈值时,确定网络接口符合预设条件。
为了避免单个Redis服务器宕机影响整个服务,降低数据风险,将全部缓存数据分割到多个Redis服务器分片,多个分片共同维护缓存数据,每个分片对应一个网络接口。
当接收到请求数据时,首先会监测该请求数据访问的是哪个网络接口,可以仅对访问频率较高的网络接口进行旁路分析。因此,当网络接口的访问频率超出预设频率阈值时,选择该网络接口发送的数据包。
(二)当当前时间到达预设时间范围时,确定网络接口符合预设条件。
例如,在618、双十一等特定时间,某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,相应的网络接口会接收到大量请求数据,此时,可以自动开启对网络接口接收到的数据包进行旁路抓取及热点Key统计。
在可选实施例中,上述步骤S12包括:从网络接口接收到的网络数据包中筛选符合预设协议类型的网络数据包。对符合预设协议类型的网络数据包进行复制,得到待分析数据包。例如,可以选择TCP协议的待分析数据包,等等。
本实施例中,可以采用柏克莱封包过滤器(Berkeley Packet Filter,简称BPF)对网络接口接收到的网络数据包进行过滤。在存在BPF的网络中,BPF根据预先设定的过滤规则确定是否接收该网络接口的数据包以及接收哪些数据包,在将过滤后的待分析数据包发送到上层进行热点Key分析。在可选实施例中,上述步骤S12还包括:当确定至少两个待分析数据包对应同一数据时,保留其中一个待分析数据包。从保留的待分析数据包中解析得到数据对应的关键码
由于以太网最大报文段长度(Maximum Segment Size,MSS)为1500字节,即每个数据包的大小不能超过1500字节。因此,如果某个数据被拆分为多个数据包时,则需要将旁路抓取的数据包拼接为完整的数据再进行后续解析和热点Key统计,这样会大大增加处理逻辑的复杂性。
发明人发现,在Redis服务器的网络交互设置中,由于选择了Socket的TCP_NODELAY选项,因此每个数据包实际上都很小,不超过1500字节,大多数交互内容都能在一个数据包内完成,甚至一个数据包内可以包括多个交互内容,即包括多个完整的数据。但对于大数据,即超过1500字节,根据传输控制协议(TCP),需要将其拆为多个数据包进行传输。其中,在数据拆包时,根据传输控制协议,每个数据包中会标记数据的头和尾,因此,通过解析可以得到哪些数据包属于同一数据。
在一种情形中,对于大数据,其Key会在一个数据包内,而关键码值Value则会被拆分为多个数据包,此时,进行热点Key统计仅使用包含Key的数据包,其他Value的数据包对统计结果没有影响,抛弃即可。
在另一种情形中,对于大数据,拆分后的每个数据包可能都包含Key及部分Value,此时,仅保留一个数据包进行Key的解析即可,其他数据包可以删除。
因此,当至少两个待分析数据包对应同一数据时,仅保留其中一个数据包用以记录该数据对应的Key,其他数据包删除,避免同一数据中的Key被多次重复记录。这样,在保证热点Key统计准确性的同时,降低数据包处理逻辑的复杂度,节约服务器计算资源。
图2为本申请另一实施例提供的一种热点信息监测方法的流程图。如图2所示,上述步骤S13包括以下步骤:
步骤S21,将Key及Key在第一预设时间间隔内的访问次数记录为第一访问信息。
其中,该第一预设时间间隔可以为1秒,即统计每秒内Key的访问次数。
步骤S22,将第一访问信息保存到第一散列表中。
以键值对的方式保存该第一访问信息。例如,Key为pro_sku_28525711126,当前1秒的访问次数为25240,则以键值对方式保存Key及其访问次数,即以pro_sku_28525711126为键,以25240为值。
图3为本申请另一实施例提供的一种热点信息监测方法的流程图。如图3所示,上述步骤S13包括以下步骤:
步骤S31,当到达第一预设时间间隔时,将第一散列表通过多级缓冲后进行存储。
步骤S32,生成用于保存下一第一预设时间间隔对应的第一访问信息的第二散列表。
例如,以秒为单位统计Key的访问次数,每秒生成一张散列表。已统计完成的散列表通过多级缓存后存储到数据存储区,其中,可设置至少2级数据缓冲区。
图4为本申请实施例提供的多级缓冲示意图。如图4所示,设置n个数据缓冲区411、412、……、41n,第一个数据缓冲区411与时钟42连接,根据时钟信号确定是否将当前的散列表发送到后续的数据缓冲区。当到达预设时间间隔时,如1秒,第一个数据缓冲区411将散列表依次通过之后的n-1个数据缓冲区,存储到数据存储区43。后续从该数据存储区43获取散列表以分析生成热点信息。这样,通过对散列表的多级缓冲,减少数据缓存时锁的使用,在高并发场景下,提高热点Key统计的准确性及效率。
图5为本申请实施例提供的统计后的第一访问信息的示意图。如图5所示,可以展示同一个Key:pro_sku_28525711126每秒的访问次数。
图6为本申请另一实施例提供的一种热点信息监测方法的流程图。如图6所示,上述步骤S14包括:
步骤S51,根据第一访问信息确定访问次数超过预设阈值的Key为热点Key。
步骤S52,统计在第二预设时间间隔内热点Key的出现次数。
步骤S53,根据出现次数生成热点Key对应的热点信息。
可选的,如果在第二预设时间间隔内热点Key的出现次数大于预设次数,则根据该热点Key生成热点信息。
图7为本申请实施例提供的热点信息的示意图。如图7所示,例如,第二预设时间间隔为5分钟。5分钟内有289秒出现热点Key,超过预设次数210,当然该热点Key可能为同一个Key,则生成热点Key对应的热点信息。
可选的,可以仅在Redis服务器中保存热点Key对应的第一访问信息。
本实施例中,可以准确地定位到Redis服务器中的热点Key,减少运维人员定位热点key的工作量,为开发人员解决问题提供依据,并且热点key监测采用旁路技术,对业务无侵入,降低对线上业务的无影响。
下述为本申请装置实施例,可以用于执行本申请方法实施例。
图8为本申请实施例提供的一种热点信息监测装置的框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图8所示,该热点信息监测装置包括:
确定模块61,用于确定符合预设条件的网络接口。
复制模块62,用于对所述网络接口接收到的网络数据包进行复制,得到待分析数据包。
解析模块63,用于解析得到待分析数据包中的Key。
统计模块64,用于统计Key的第一访问信息。
生成模块65,用于根据第一访问信息生成热点信息。
图9为本申请实施例提供的热点信息监测系统的框图。如图9所示,该系统包括:与网络接口71连接的旁路分析装置72。
旁路分析装置72,用于确定符合预设条件的网络接口71,对网络接口71接收到的网络数据包进行复制,得到待分析数据包,解析得到待分析数据包中的关键码,统计所述关键码的第一访问信息,根据第一访问信息生成热点信息。
图10为本申请另一实施例提供的热点信息监测系统的框图。如图10所示,旁路分析装置72包括:过滤器721、解析器722、至少两级缓冲器7231、……723n、存储器724及生成器725。
过滤器721,用于确定符合预设条件的网络接口,对所述网络接口接收到的网络数据包进行复制,得到待分析数据包。
解析器722,用于从待分析数据包中解析得到Key,将Key及Key在第一预设时间间隔内的访问次数记录为第一访问信息,将第一访问信息保存到第一散列表中,将第一散列表发送到第一级缓冲器,并生成用于保存下一第一预设时间间隔对应的第一访问信息的第二散列表。
第一级缓冲器7231,用于缓存第一散列表,当到达第一预设时间间隔时,将第一散列表发送到下一级缓冲器。
下一级缓冲器723n,用于缓存第一散列表,将第一散列表发送到存储器。
存储器724,用于存储第一散列表。
生成器725,用于从所述存储器中获取所述第一散列表,根据所述第一散列表生成热点信息。
可选的,上述过滤器位于Redis服务器的内核层,解析器、缓冲器及存储器位于用户层。过滤后的第二数据包在内核缓冲区进行缓存,在用户层通过pcap库获取内核缓冲区中的第二数据包发送到解析器进行分析统计,再将得到的散列表通过多级缓冲器传输到存储器中进行存储。
其中,解析器722,还用于当解析的第二数据包中不包括Key时,删除该第二数据包,即至少两个所述第二数据包对应同一请求数据时,保留包括Key的第二数据包。
本实施例中,通过旁路分析装置抓取访问服务器的数据包,统计数据包中Key的访问信息,可以准确、快速地分析定位热点Key。另外,由于采用旁路分析的模式,对客户端或服务器无代码侵入,避免带来客户端或服务器内存暴增、性能下降的问题,对线上业务影响较小。同时,可以适用于多种不同架构及不同版本的服务器,提高热点信息监测方法的普适性。
本申请实施例还提供一种电子设备,如图11所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的计算机程序时,实现以下上述方法实施例的步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(PeripheralComponentInterconnect,PCI)总线或扩展工业标准结构(Extended IndustryStandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以下上述方法实施例的步骤。
需要说明的是,对于上述装置、电子设备及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
进一步需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。