背景技术
随着IP技术的发展、宽带的普及以及网络用户的指数级增长,Internet上的网络流量急速膨胀,各种Internet服务也越来越多。单台服务器已经无法满足客户需求,为了解决上述问题,通常情况下会采用一组服务器来向用户提供服务,对外提供单一接口(即这一组服务器对外只提供一个IP地址进行服务)。
参见图1,为现有技术中针对上述问题的解决方案,利用服务器负载均衡设备检测服务器健康度:RS1到RS7为一组最终提供服务的服务器,服务器负载均衡设备置于这组服务器之前,服务器负载均衡设备里有一组虚拟服务器VS1到VS3,每个虚拟服务器对应某个服务类别,如图中的服务类1到3;用户服务请求到达运营商服务网络后,服务请求先被传送到服务器负载均衡设备上,服务器负载均衡设备依照用户服务请求的类别,将服务请求分配到对应的虚拟服务器上,虚拟服务器再将服务请求转发到相应的后台服务器上进行处理。在这个过程中,为了保证服务取得令用户满意的效果,服务器负载均衡设备需要检查后台服务器的健康度以避免将用户请求分发到不能提供服务的设备上。
所谓健康度是指服务器上相关应用服务或者主机资源的状态,其中,
主机资源健康度状态包括:CPU使用率、内存使用率、服务带宽占用率以及其他关键资源,如进程数、线程数、socket资源数等;
应用服务健康度状态包括:影响用户响应的关键资源数、并发处理能力、当前消耗的资源数等,资源包括socket、应用可用线程、计数器、后台连接、内存、硬盘等,一切可能存在瓶颈的地方。
一般来说,服务器故障状态表现为链路故障、主机故障和应用故障(也称为服务故障),对应地,在服务器故障恢复时,还会有另外三个状态,即链路恢复状态、主机恢复状态和应用(服务)恢复状态。如何对这些状态进行检测,以保证服务的可靠,已经成为通信业务运营商普遍关心的问题。
目前已知的检测服务器健康度的方法有如下几种:
现有技术方案一、利用Ethernet OAM技术进行服务器健康度检查。
OAM是指操作(Operation)、管理(Administration)和维护(Maintenance),该技术的功能包括:性能监控并产生维护信息,根据这些信息评估网络的稳定性;通过定期查询的方法检测网络故障,产生各种维护和告警信息;通过调度或者切换到其它的实体,旁路失效实体,保证网络的正常运行;将故障信息传递给管理实体。
Ethernet OAM提供二层端到端的监控和检测,可以对通过二层交换设备连接的链路状态进行检测。但是由于该技术只能检测链路状态,不能检测服务器主机状态并对外围设备存在很大的依赖性,不利于应用。
现有技术方案二、用ping方法进行健康度检查。
用ping方法进行健康度检查是一种常用的服务器检测方法,其实现方法非常简单:在设备上采用定时器定期向各主机的IP地址发送ping报文,并且检测有无回应,如果有回应则说明主机为健康的,否则就表明主机已经失效。
该方法虽然有实现方法简单、技术扩展性好等优点,但是有可能被主机屏蔽,同时频繁的ping容易被识别为攻击报文且需要在前置设备上启动相关的ping服务,需要在安全路由器上和主机上配置IP地址,可能会与监控网络冲突。同时,该方法只能提供主机状态检测,不能提供服务状态检测。
现有技术方案三、利用arp(地址解析协议)方法进行健康度检查。
利用arp方法进行健康度检查是一种常用的方法,其实现方法如下:在设备上采用定时器定期向各主机的IP地址发送arp报文进行地址请求,并且检测arp回应报文,如果有回应则说明主机为健康的,否则就表明主机失效。
该方法具有实现方法简单、被攻击的风险很小等优点。但是只能应用于二层网络组网,扩展性不好;只能提供主机状态检测,不能提供服务状态检测;可能会与监控网络冲突。
具体实施方式
下面结合附图及具体实施例对本发明进行详细说明。
本发明所提供的服务健康度检测系统,包括用户、运营商服务网络和运营商服务设备,用户的服务请求经过运营商服务网络传送到运营商服务设备后,运营商服务设备中的前置设备对宿主主机进行服务健康度检查,并将服务分配到健康度良好的宿主主机上,通过这种方法,运营商服务网络能够向用户提供较好的服务响应。通过本系统,可以实现对宿主主机的主机状态和服务状态的无遗漏检测,保证前置设备在分配服务的时候不会将用户服务请求分配到不能提供服务的宿主主机上,同时还可以在前置设备和宿主主机间实现不同频度的服务健康度检测,达到提高检测效率、节省系统资源的目的。
本发明所提供的服务健康度检测方法,由包含查询端的前置设备向包含查询代理和服务响应端的宿主主机发起健康度查询请求,查询宿主主机的主机状态和服务状态,宿主主机向前置设备发送服务状态和主机状态响应。通过本方法,可以实现对宿主主机的主机状态和服务状态的无遗漏检测,保证前置设备在分配服务的时候不会将用户请求分配到不能提供服务的宿主主机上,同时还可以在前置设备和宿主主机间实现不同频度的服务健康度检测,达到提高检测效率、节省系统资源的目的。本发明实施例提供了三种具体实现方法:查询-响应方法,注册-通知方法和注册-查询方法。
上述方法和系统中的主机状态即主机健康度状态包括:CPU使用率、内存使用率、服务带宽占用率、进程数、线程数、socket资源数等关键资源的状态;服务状态即服务健康度状态包括:并发处理能力、当前消耗的资源数、socket资源数、应用可用线程、计数器、后台连接、内存、硬盘、会话数、网络地址转换(nat)地址数等其他应用表项资源的状态。
参见图2,为本发明的服务健康度检测系统的示意图。该系统包括用户、运营商服务网络和运营商服务设备。其中,运营商服务设备包括了前置设备和宿主主机。其中,前置设备用于检测宿主主机的服务健康度,其上设置了查询端;
查询端是前置设备上的查询客户端和查询代理的总称,用于向宿主主机发起查询请求;
查询客户端,也可以称为查询请求发起端,指需要获得服务器状态的前置设备上的特定应用;
查询代理,工作在前置设备上的一个健康度检查服务,用于透传查询客户端发起的查询请求及对查询客户端的信息提供封装和解析服务。
宿主主机用于向用户提供服务,宿主主机上设置了查询代理、服务响应端及存储模块。其中:
查询代理,工作在宿主主机上的一个健康度检查服务,用于发起、响应以及转发来自前置设备的查询请求,通过查询代理可以实现迭代方法的查询,即一个服务健康度检查的响应端同时又是另外一个服务健康度查询的查询端,同时查询代理可以提供响应端的宿主主机状态;
服务响应端,被查询的在宿主主机上的应用服务,需要反馈相关服务的健康度。
存储模块,用于缓存服务状态和主机状态。
在图2所示的系统中,用户向运营商服务网络发起服务请求,运营商服务网络接收到用户的服务请求后,将该请求发送给前置设备,前置设备通过查询端检测所连接的一组宿主主机的主机状态和服务状态或者读取宿主主机上存储的本机的主机状态和服务状态,然后把服务请求依照事先确定的规则分配给健康度良好的宿主主机。
同时需要说明的是,本系统中所指的用户,不是一般意义上的个人或者组织,而是包括所有向运营商发起服务请求的机制,可以是个人,也可以是某个中间设备或终端等。本系统中所指的运营商,也不仅仅是指一般意义上的运营商,还包括了所有提供某种应用的个人、组织、中间设备及终端等。
此外,本系统中提出前置设备的查询端包括了查询客户端和查询代理,宿主主机上包括了查询代理和服务响应端,但本发明的构思不限于此,任何将这些功能进行重新组合或者分割的行为,都在本发明的构思之内。
本发明公开的第一种服务健康度检测方法是基于查询-响应方法的。前置设备向宿主主机发出健康度查询请求,宿主主机向前置设备发送健康度查询响应。该具体实现方法又包括三种操作:前置设备查询宿主主机上的即时服务状态、前置设备查询宿主主机上缓存的服务状态和前置设备查询宿主主机的状态。这样可以在前置设备和宿主主机间实现不同频度的服务健康度查询,即查询端—宿主主机上查询代理可以是高频度的查询和响应,而宿主—服务是低频度的查询和响应。下面将结合附图予以说明。
图3示出了本发明实施例中基于查询-响应方法的健康度检测方法流程图,包括如下步骤:
301、前置设备查询端向宿主主机查询代理发起健康度查询请求,这种查询既可以是即时服务状态或主机状态,还可以是宿主主机上依照特定条件缓存的服务状态或主机状态;
302、宿主主机查询代理收到上述健康度查询请求后,判断请求的类型,如果请求查询的是即时服务状态,执行步骤303;如果请求查询的是宿主主机上缓存的服务状态或者主机状态,执行步骤306;
303、宿主主机查询代理向宿主主机服务响应端发起查询即时服务状态的查询请求;
304、宿主主机服务响应端向宿主主机查询代理反馈即时服务状态;
305、宿主主机查询代理收到步骤304中服务响应端的即时服务状态信息后,将该信息转发给前置设备查询端;
306、宿主主机查询代理若收到查询本地缓存的服务状态及主机状态或者即时主机状态的健康度查询请求后,从存储模块读取本地缓存的服务状态或主机状态,或者获取即时主机状态;
307、宿主主机查询代理向前置设备查询端发送步骤306中获得的缓存的服务状态或者主机状态。
通过本方法,可以实现不同频度的服务状态查询,对于那些性能要求比较高的服务或者主机资源,可以随时进行查询,而对于那些性能要求不是太高的服务或者主机资源,就可以设定隔一定周期将状态缓存在宿主主机的存储模块上,需要查询的时候,只要读取这些已经存储的信息就可以了。对于缓存的主机状态或者服务状态,可以规定,只要获得的缓存服务状态或者主机状态是健康的,就可以判定该服务或者主机资源是健康可用的。
本发明公开的另一种服务健康度检测方法是基于注册-通知方法的。首先,前置设备在宿主主机上注册需要查询的服务,注册完成后,宿主主机查询代理定期向前置设备发送所注册的服务状态信息。因此,只要宿主主机查询代理是健康的,前置设备就不用频繁进行宿主主机服务状态查询。这种方法包括了服务注册、查询代理健康度查询和宿主主机状态查询等步骤。下面将进行详细说明。
图4为本发明实施例中基于注册-通知方法的服务健康度检测方法流程图,具体步骤包括:
401、前置设备查询端完成本地查询服务注册,这种设置是为了查询前置设备本地的健康度,查询内容同样包括服务状态和主机状态;
402、前置设备查询端向宿主主机查询代理请求进行查询服务注册;
403、宿主主机查询代理收到前述查询服务注册请求后,判断要求进行查询注册的服务的类型,如果是要注册的是即时服务状态,执行步骤404;如果要注册的是宿主主机上缓存的服务状态或者主机状态,执行步骤407;
404、宿主主机查询代理向宿主主机服务响应端请求进行即时服务状态查询注册;
405、宿主主机服务响应端收到上述注册请求后,完成即时服务状态查询注册,并依照注册条件向宿主主机查询代理反馈即时服务状态;
406、宿主主机查询代理向前置设备查询端通知步骤405所获取的即时服务状态;
407、宿主主机查询代理进行本地缓存的服务状态或主机状态查询注册;
408、宿主主机查询代理依照注册条件向前置设备查询端通知步骤407中所获取的缓存服务状态或者主机状态。
在上述过程中,还可以包括以下内容:
前置设备向宿主主机请求查询服务注册后,向宿主主机查询代理发送查询所述查询服务是否注册成功的消息,如果查询服务注册成功,前置设备查询端不再进行其他操作,如果查询服务注册失败,可再次发起查询服务注册请求;
前置设备查询端向宿主主机查询代理发出代理健康度查询请求,如果前置设备收到宿主主机查询代理的查询响应,则认为宿主主机查询代理是健康的,否则,判断宿主主机查询代理已经失效,进而判断宿主主机失效。
需要说明的是,在本方法中,既可以设定宿主主机如前所述依照一定的时间周期向前置设备发送注册服务的状态或者主机状态,也可以设定宿主主机只有当主机状态发生变化或者所注册的服务状态变化时才向前置设备发送状态变化信息。具体包括:
宿主主机发生主机状态变化时,宿主主机查询代理向前置设备查询端发送主机状态变化消息,前置设备查询端在收到上述状态变化消息后,向宿主主机查询代理发送状态变化响应;
宿主主机发生服务状态变化时,宿主主机服务响应端向前置设备查询端发送服务状态变化消息,前置设备查询端在收到上述状态变化消息后,向宿主主机服务响应端发送状态变化响应。
本发明还公开了一种基于注册-查询方法的服务健康度检测方法。在本方法中,所涉及的服务注册方法与上述注册-通知方法中的注册方法完全相同。所不同的是,本方法中,前置设备不仅仅被动地等待宿主主机发送注册的服务状态或者宿主主机状态,还可以设置一定条件,在满足设定条件或者发生临时需求时,前置设备主动对宿主主机的主机状态和服务状态进行查询。下面将对本方法进行具体说明。
图5示出了本发明实施例中基于注册-查询方法的服务健康度检测方法的流程图,具体包括:
501、前置设备查询端完成本地查询服务注册,这种设置是为了查询前置设备本地的健康度,查询内容同样包括服务状态和主机状态;
502、前置设备查询端向宿主主机查询代理请求进行查询服务注册;
503、宿主主机查询代理收到前述查询服务注册请求后,判断要求进行查询注册的服务的类型,如果是要注册的是即时服务状态,执行步骤504;如果要注册的是宿主主机上缓存的服务状态或者主机状态,执行步骤507;
504、宿主主机查询代理向宿主主机服务响应端请求进行即时服务状态查询注册;
505、宿主主机服务响应端收到上述注册请求后,完成即时服务状态查询注册,并依照注册条件向宿主主机查询代理反馈即时服务状态;
506、宿主主机查询代理向前置设备查询端通知步骤505所获取的即时服务状态;
507、宿主主机查询代理进行本地缓存的服务状态或主机状态查询注册;
508、宿主主机查询代理依照注册条件向前置设备查询端通知步骤507中所获取的缓存服务状态或者主机状态。
以上步骤用于在常规下获取注册的服务状态和主机状态,当超过注册时的设定条件前置设备仍没有收到宿主主机的通知信息或者发生特定查询需求时,本方案还可以实现以下步骤:
509、前置设备查询端向宿主主机查询代理发送健康度查询请求,若经过一段时间不能收到宿主主机查询代理的响应,则判定宿主主机已经失效;
510、宿主主机查询代理判断所请求的查询服务是否已经注册,若该服务已经注册,则执行步骤511;若该服务并没有注册且查询请求为即时服务状态,则执行步骤513;若该服务并没有注册且查询请求为宿主主机上缓存的服务状态或者主机状态,则执行步骤516;
511、宿主主机查询代理调用注册的函数获取相应服务或者主机状态;
512、宿主主机查询代理向前置设备查询端发送步骤511中所获取的服务状态信息或主机状态信息;
513、宿主主机查询代理向宿主主机服务响应端请求进行即时服务状态查询;
514、宿主主机服务响应端向宿主主机查询代理反馈步骤513中所述服务状态查询请求;
515、宿主主机查询代理向前置设备查询端发送步骤514中所获取的服务状态查询响应;
516、宿主主机查询代理获取本地缓存的服务状态或者主机状态;
517、宿主主机查询代理向前置设备查询端发送步骤516中所获取的服务状态或者主机状态。
通过以上步骤可以看出,本方法为前述查询-响应方法和注册-通知方法的改进。与前述查询-响应方法不同的是,本方法中的主动查询是基于一定条件的,这个条件可以根据需要随意设定。
本发明所述方法中提出的前置设备的查询端还可以根据需要分为查询客户端和查询代理,本发明所述方法中的宿主主机上的查询代理和服务响应端也可以组合成一个功能模块,任何将本发明所述功能进行重新组合或者分割的行为,都在本发明的构思之内。
总之,本发明所提供的服务健康度检测系统能够可靠地实现对宿主主机的主机状态和服务状态的查询,并保证前置设备在分配服务的时候不会将用户服务请求分配到不能提供服务的宿主主机上,同时还可以在前置设备和向连接的宿主主机上针对不同的状态需求实现不同频度的服务健康度检测,达到提高检测效率、节省系统资源的目的。
本发明所提供的服务健康度检测方法能够应用于任何网络技术或任何主机技术上,并可以承载在任何二层、三层、四层或应用层协议中,也可以通过远程过程调用(RPC)的方法获得相关服务;并可以将前置设备看成是一个大型的虚拟主机,进行迭代查询。
以上所述实施例为本发明的较佳实施例,仅用来解释本发明,而不能用来限定本发明的范围,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。