本发明专利技术涉及一种心跳包处理的方法和装置,包括:一个或多个执行线程、以及独立线程;所述独立线程依次获取多个设备上报的一个或多个心跳包并发送至对应的所述执行线程;一个或多个所述执行线程,根据各自对应的散列表和心跳包队列,并行地对对应的心跳包执行处理。本发明专利技术利用独立线程获取并分发心跳包,并使用多个执行线程并行的处理来自多个设备的心跳包,提高了心跳包的处理效率;并且在变更当前设备状态时,运用散列表和心跳队列,避免了对集群中每一个设备的遍历,大幅度减少了系统的运算量。
【技术实现步骤摘要】
【专利摘要】本专利技术涉及一种心跳包处理的方法和装置,包括:一个或多个执行线程、以及独立线程;所述独立线程依次获取多个设备上报的一个或多个心跳包并发送至对应的所述执行线程;一个或多个所述执行线程,根据各自对应的散列表和心跳包队列,并行地对对应的心跳包执行处理。本专利技术利用独立线程获取并分发心跳包,并使用多个执行线程并行的处理来自多个设备的心跳包,提高了心跳包的处理效率;并且在变更当前设备状态时,运用散列表和心跳队列,避免了对集群中每一个设备的遍历,大幅度减少了系统的运算量。【专利说明】一种心跳包的处理方法和装置
本申请涉及数据处理领域,尤其涉及一种心跳包的处理方法和装置。
技术介绍
心跳包是指客户端定时上报简单的信息给服务器端,以此告诉服务器,该客户端处于在线状态。例如,客户端每隔几分钟上报一个信息(可称为心跳包)给心跳服务器,如果该心跳服务器在预定时间内(如,I分钟内)没有收到客户端信息,则表示该客户端已经离线。 现有的心跳服务器采用以下处理方式来管理心跳:在进程中使用“树”来存储每个设备最近一次上报来的心跳包所包含的信息,该“树”可以是二叉查找树,其中,树中的每个结点将会记录3个信息,分别为设备名称、最近一次上报的时间、当前状态。 并且,现有的处理方式为多个线程共同操作该树,其中一些线程负责处理设备上报来心跳包,并在接收到一个心跳包后更新树中的与该心跳包对应的结点,例如,发现该心跳包对应的设备在树中不存在、或者该心跳包对应的设备的状态为线下时,则在树中添加该设备的结点或是将该设备的当前设备状态置为线上;另有一些线程负责遍历树中的每一个节点,将各个设备的上次心跳时间与当前系统时间做比较,若发现某个设备在一定时间内没有上报心跳包,则将该设备的状态设置为下线。 但是,这种处理方式效率并不高,这种低效体现在两点:1、多线程操作同一棵树,必须使用“锁”来保护线程对该共享资源(树)的访问,所述多个线程只有获得“锁”才能对该树进行操作,这限制了多个线程之间的并发性,尤其是多个线程的执行所带来的无谓的进程间切换(如Linux操作系统中,进程切换等价于线程切换)开销将会很可观。2、线程对树的遍历操作运算量过大,尤其是集群内含有大量的设备时,换言之,所述的树中包含大量的节点时,线程要对树中的每一个节点进行遍历,运算量过大。这样,以上的心跳包处理方式导致心跳服务器性能较低,不能处理大量的心跳包。 在云计算环境下,一个大集群(例如阿里云弹性计算集群)内,可以包含2万台物理机和80万台虚拟机,而且这个数据还会随着物理机和虚拟机数量的增加而不断扩大,这样,处理各个设备的心跳包所需要的运算量也越来越大,这导致了集群的心跳服务器性能的局限性。若利用上述心跳包处理方式,可以使用多个心跳服务器组成一个心跳服务器集群才能完成处理,但是,在现有技术中,对于心跳服务器集群的构建还存在很多技术问题,如,对多个心跳服务器进行集群构建设计、数据同步设计等,而且,在系统中添加多个心跳服务器提高了系统成本。
技术实现思路
本申请的主要目的在于提供一种心跳包的处理方法和装置,以解决现有技术存在的多个线程不能并发对多个心跳包进行处理,而且遍历大量设备的状态运算量过大的问题。 为了解决上述技术问题,本申请的目的是通过以下技术方案实现的: 本申请提供了一种心跳包处理的方法,包括以下步骤:一个或多个执行线程、以及独立线程;所述独立线程依次获取多个设备上报的一个或多个心跳包并发送至对应的所述执行线程;一个或多个所述执行线程,根据各自对应的散列表和心跳包队列,并行地对对应的心跳包执行处理。 优选地,在根据本申请所述的方法中,所述心跳包至少包括所述心跳包的上报时间、所述心跳包对应的设备的IP地址;所述散列表记录对应的执行线程接收的每一个心跳包对应的设备的设备信息;其中,所述设备信息包括:所述心跳包的最近一次上报时间、所述心跳包对应的设备的当前设备状态;所述心跳包队列顺序存储对应的执行线程接收的每一个心跳包的心跳包信息;其中,所述心跳包队列的心跳包信息包括:所述心跳包的上报时间。 优选地,根据本申请所述的方法,所述独立线程依次获取多个设备上报的多个心跳包的步骤,包括:所述独立线程根据每一个所述心跳包中的IP地址,将所述各个心跳包发送至与其对应的执行线程中。 优选地,在根据本申请所述的方法中,将所述心跳包中的IP地址转化为长整型数字,并将所述长整型数字与执行线程的数量取模,并得到取模结果;以及基于所述取模结果,所述独立线程将所述心跳包发送至与该取模结果存在关联关系的执行线程中。 优选地,根据本申请所述的方法,所述一个或多个所述执行线程根据各自对应的散列表和心跳包队列并行地对对应的心跳包执行处理的步骤,包括:查询所述散列表中与所述心跳包对应的设备的当前设备状态,并根据所述心跳包更新所述散列表。 优选地,根据本申请所述的方法,所述根据所述心跳包更新所述散列表的步骤,包括:若与所述心跳包对应的设备的当前设备状态是线下,则将所述设备的当前设备状态置为线上并根据所述心跳包的上报时间更新所述设备的最近一次上报时间;若与所述心跳包对应的设备的当前设备状态是线上,则根据所述心跳包的上报时间更新所述设备的最近一次上报时间;以及若在散列表中不包含所述心跳包对应的设备的设备信息,则根据所述心跳包,在散列表中新建与所述心跳包对应的设备的设备信息,并将所述设备的当前设备状态置于线上。 优选地,根据本申请所述的方法,所述一个或多个所述执行线程根据各自对应的散列表和心跳包队列并行地对对应的心跳包执行处理的步骤,包括:对所述心跳包队列进行分析,并根据分析结果更新所述散列表中所述设备的设备当前状态。 优选地,根据本申请所述的方法,所述对所述心跳包队列进行分析的步骤,包括:在所述心跳包队列中,顺次查询所述心跳包的上报时间;根据所述心跳包的上报时间,确定与所述心跳包对应的设备的当前设备状态。 优选地,根据本申请所述的方法,所述根据所述心跳包的上报时间,确定与所述心跳包对应的设备的当前设备状态的步骤,包括:若当前时间与该心跳包的上报时间的差小于弹性时间,则所述心跳包对应的设备的当前设备状态为线上;若当前时间与该心跳包的上报时间的差大于弹性时间,则查询所述心跳包对应的设备在散列表中的设备信息;若心跳包的上报时间小于所述最近一次上报时间,则保持与所述心跳包对应的设备的当前设备状态为线上;若心跳包的上报时间等于所述最近一次上报时间,则将与所述心跳包对应的设备的当前设备状态置于线下。 本申请还提供了一种心跳包处理的装置,包括:一个或多个执行模块,以及独立模块;所述独立模块,用于依次获取多个设备上报的多个心跳包;并将每一个所述心跳包发送至对应的所述执行模块;一个或多个所述执行模块根据各自对应的散列表和心跳包队列并行地对对应的心跳包执行处理。 优选地,在根据本申请所述的装置中,所述心跳包至少包括所述心跳包的上报时间、所述心跳包对应的设备的IP地址;所述散列表记录对应的执行线程接收的每一个心跳包对应的设备的设备信息,其中,所述设备信息包括:所述心跳包的最近一次上报时间、所述心跳包对应的设备的当前设备状态;所述心跳包队列顺序存储对应的执行线程接收的每一本文档来自技高网...
【技术保护点】
一种心跳包处理的方法,其特征在于,包括:一个或多个执行线程、以及独立线程;所述独立线程依次获取多个设备上报的一个或多个心跳包并发送至对应的所述执行线程;一个或多个所述执行线程,根据各自对应的散列表和心跳包队列,并行地对对应的心跳包执行处理。
【技术特征摘要】
【专利技术属性】
技术研发人员:陶辉,
申请(专利权)人:阿里巴巴集团控股有限公司,
类型:发明
国别省市:开曼群岛;KY
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。