本发明实施例涉及通信技术领域,尤其涉及一种集群系统中实例的挂起控制方法及装置。
背景技术:
随着信息技术的快速发展,企业对服务可用性提出了越来越高的要求。对于企业而言,系统宕机或者其它原因导致的服务不可用直接影响着公司的营运收入、形象以及客户满意度,更严重的甚至导致法律纠纷。当前集群已成为服务器行业的主流结构,尽管单个硬件的可靠性日益提高,但由于集群规模增大带来环境的复杂性和人为因素的不确定性,集群系统仍然表现出频繁的故障,这使得从软件角度考虑系统的高可用性能问题,显得尤为必要。所谓可用性是指系统正常工作而不停机的时间百分比。一般的,在系统上线前和上线之后的代码更新后一段时间内,做高可用测试。
其中,应用一般部署在中间件实例上,中间件应用的高可用测试分为实例停止(down)和实例挂起(hang)两种。实例down就是实例被停止的一种状态。实例hang指中间件实例端口在监听,进程存在可以被检测到,但事实上实例已无业务响应能力的一种状态,例如进程内存溢出无响应、进程线程池被占满无响应等状态。
现有的中间件的典型高可用架构包括若干个中间件服务器和负载均衡器,不同的业务请求由负载均衡器负载均衡至中间件服务器进行处理。但是在系统运行过程中,往往会出现某个实例hang的状态。当系统出现hang情况后,负载均衡器就要有机制去识别该异常实例,将业务请求转发到正常的实例,让业务持续可用,因此对实例hang进行高可用测试显得尤为必要。
现有的中间件实例hang的高可用测试方法为:向需要hang的实例发送超大的批量端口调用请求(通过telnet指令),以期望来hang住该实例。但经过事实检验,因该方法发送了超大量级的信号,单位时间发送的命令会极其多,发送此类命令如果太多太频繁,则会消耗掉主机大量资源,导致主机tcp/ip的最大连接数被耗尽,从而引起主机性能异常,而且会影响该主机其他实例的性能,从而影响高可用测试的效果。另外该方法由于没有调用到实例里面内部方法,所以不能完全hang住实例,导致hang的结果具有随机性,即经过实际检验最终不一定会hang住实例,结果具有不可预测性。
综上所述,现有技术中在做高可用测试时存在测试结果准确性较低的问题。
技术实现要素:
本发明实施例提供一种集群系统中实例的挂起控制方法及装置,以解决现有技术中在对实例进行高可用测试时准确性较低的问题。
为了解决上述问题,第一方面,本发明实施例提供一种集群系统中实例的挂起控制方法,所述方法包括:
在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;
向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
第二方面,本发明实施例提供一种集群系统中实例的挂起控制装置,所述装置包括:
部署模块,用于在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;
信号发送模块,用于向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的集群系统中实例的挂起控制方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的集群系统中实例的挂起控制方法的步骤。
本发明实施例提供的集群系统中实例的挂起控制方法及装置,通过在待进行高可用测试的中间件实例内部部署线程控制模块,再通过向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,从而触发线程控制模块对实例所有的线程进行控制,挂起所有的线程,进而使得所有线程均不能再响应请求,实现了对实例的完全挂起,保证了实例挂起结果的确定性,并且对模拟请求信号的数量进行了控制,避免了向待挂起实例发送超大批量端口调用请求时导致的主机性能异常,进而影响该主机的其他实例的性能的问题,保证了在实例挂起时的高可用测试的测试准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1表示本发明实施例中集群系统中实例的挂起控制方法的步骤流程图;
图2表示本发明实施例中集群系统中实例高可用的架构示意图;
图3表示本发明实施例中集群系统中实例的挂起控制装置的模块框图;
图4表示本发明实施例中电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明实施例中集群系统中实例的挂起控制方法的步骤流程图,该方法包括如下步骤:
步骤101:在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块。
在本步骤中,具体的,在需要对存在挂起实例的集群系统进行高可用测试时,可以在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块。
其中,该方法可以应用于集群系统中实例高可用的架构,如图2所示,该架构包括信号发送器21,该信号发送器21可以用于执行本步骤,即用于将线程控制模块22部署在集群系统中待进行高可用测试的实例中,用于对实例的线程进行挂起操作。
具体的,该信号发送器21可以包括自动化部署模块211和信号发送模块212,其中在架构接收到进行高可用测试的任务之后,可以启动信号发送器21的自动化部署模块211,将线程控制模块22的部署包发送并自动化部署到待进行高可用测试的实例上。其中,线程控制模块22可用于对实例的线程进行挂起操作,进而实现实例的挂起控制。
步骤102:向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使线程控制模块根据多个模拟请求信号对实例的所有线程进行挂起操作。
在本步骤中,具体的,在将线程控制模块部署在实例中之后,可以向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使线程控制模块根据多个模拟请求信号对实例的所有线程进行挂起操作,进而实现实例的完全挂起。
这样,基于模拟请求信号的发送数量与实例的线程数量相匹配,实现了实例挂起结果的准确性以及对高可用测试结果的有效把控,避免了现有技术中不能完全挂起实例的问题,并且避免了现有技术中在对待挂起实例发送超大批量端口调用请求以挂起实例时,由于单位时间发送信号较多导致的消耗大量主机资源,影响主机其他实例性能,进而导致高可用测试时结果不准确的问题,提高了集群系统的可用性和稳定性。
具体的,模拟请求信号可以为模拟页面访问的请求信号。
此外,具体的,线程控制模块22可以包括信号接收单元221和线程挂起单元222。其中信号接收单元221用于接收信号发送器21发送的多个模拟请求信号,且信号接收单元221可以使用web编程中的页面组件程序,该程序将借口暴露给信号发送器21进行访问,此外,信号发送器21同样部署了访问该接口的程序,并且通过并发程序语句,以实现批量访问,即批量发送多个模拟请求信号。另外,线程挂起单元222可以使用多线程编程技术,实现调度线程挂起的功能,并且只要信号发送器21发送一个量级对应的模拟请求信号到线程控制模块22时,线程控制模块22就能够挂起一个线程。当批量发送与实例的线程数量相匹配的多个模拟请求信号时,线程挂起单元222能够调用线程控制程序进行线程的挂起操作,以将实例中所包括的所有线程完全挂起,此时负载均衡模块23可以将后续发送至该处于挂起状态的实例的模拟请求信号均衡至其他实例,以测试系统的高可用性。
这样,本实施例通过在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块,并向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使线程控制模块根据多个模拟请求信号对实例的所有线程进行挂起操作。基于模拟请求信号的发送数量与实例的线程数量相匹配,实现了实例挂起结果的准确性以及对高可用测试结果的有效把控,避免了现有技术中不能完全挂起实例的问题,并且避免了现有技术中在对待挂起实例发送超大批量端口调用请求以挂起实例时,由于单位时间发送信号较多导致的消耗大量主机资源,影响主机其他实例性能,进而导致高可用测试时结果不准确的问题,提高了集群系统的可用性和稳定性。
此外,进一步地,在向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号时,可以获取将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量;然后将所述目标量的模拟请求信号发送至线程控制模块,以使线程控制模块能够根据目标量的模拟请求信号,对实例中的所有线程进行挂起操作。
其中,在获取将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量时,可以将预设时段内每个时间切片下模拟请求信号发送量和实例中已挂起线程的数量作为训练样本,对实例中线程挂起数量与模拟请求信号发送量之间的对应关系进行训练学习,并训练得到线程挂起数量与模拟请求信号发送量之间的对应关系;然后根据训练得到的线程挂起数量与模拟请求信号发送量之间的对应关系,确定将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量。
具体的,实例(包括docker中内的实例)一般均设置最大线程数和最小线程数。假设实例的线程最大数,即线程池的代销可以无限制性弹缩,则当业务并发量很大时,执行线程总数就会快速上升,进而容易引起实例内存溢出的问题;另外,如果线程总数没有进行设置,则在业务量突然增高时,线程池可能无法及时做出弹性调整,进而引起一批业务的失败,因此本实施例中的实例的线程数量为预设数值。例如可以为500。
此外,具体的,通过对预设时段内每个时间切片下的模拟信号请求量和实例中实际挂起线程的数量作为训练样本,进行训练学习。此外,由于对数几率回归(logistic)算法具有容易收敛,且快速得出全局最优解的特点,因此可以采用logistic算法对训练样本进行训练。其中,假设实例中已挂起线程的数量与模拟请求信号发送量满足高阶分布伯努利分布(bernouli),则可以对代价函数采用梯度下降法进行迭代,当出现梯度收敛时停止算法,此时可以得到线程挂起数量与模拟请求信号发送量之间的对应关系,并可以根据该对应关系,确定将实例所包括的所有线程全部挂起所需的模拟请求信号的目标量,即确定与实例的线程数量相匹配的模拟请求信号的目标量。
这样,本实施例通过训练学习得到线程挂起数量与模拟请求信号发送量之间的对应关系,进而得到与实例的线程数量相匹配的模拟请求信号的目标量,保证了所得到的模拟请求信号的目标量的准确性,从而保证了在发送目标量的模拟请求信号时,能够将实例完全挂起,避免了因模拟请求信号的发送量过小时,不能保证将实例完全挂起,并避免了因模拟请求信号的发送量较大对实例所在主机的性能影响。
此外,进一步地,在向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号之后,还可以检测所述实例中包括的所有线程是否均处于挂起状态;当检测到所述实例中包括的所有线程均处于挂起状态时,检测所述集群系统是否处于高可用状态。
其中,在检测所述集群系统是否处于高可用状态之后,还可以对所述实例中处于挂起状态的线程进行释放操作,以使处于挂起状态的线程切换至未挂起状态。
具体的,在检测实例中包括的所有线程是否均处于挂起状态时,可以获取实例所在主机上用于采集线程状态的dump日志,并通过dump日志记录的所有线程状态信息判断线程是否被挂起。
当然,在此需要说明的是,若检测到实例中包括的所有线程中存在未挂起的线程时,可以增加向线程控制模块发送的模拟请求信号的数量,直至实例中的线程完全处于挂起状态。
具体的,集群系统中实例高可用的架构还可以包括线程管理模块24,该线程管理模块24包括线程检测单元241和线程释放单元242。其中,本实施例可以通过线程检测单元241检测实例中包括的所有线程是否均处于挂起状态,并通过线程释放单元242对实例中处于挂起状态的线程进行释放操作,以使处于挂起状态的线程切换至未挂起状态。
此外,具体的,高可用测试主要测试实例的故障转移机制,即只要保证被测试实例在故障发生时,集群系统功能能够互相切换,就可验证集群系统的高可用性。因此,在实例中包括的所有线程均处于挂起状态,检测所述集群系统是否处于高可用状态时,可以检测所述实例中包括的所有线程均处于挂起状态时的集群系统的业务成功率和实例未挂起时的集群系统的业务成功率是否相同,若相同,则说明集群系统处于高可用状态。当然,若实例中包括的所有线程均处于挂起状态时的集群系统的业务成功率小于实例未挂起时的集群系统的业务成功率,则需要获取实例的日志,确定是否还在继续接收模拟请求信号或者是否存在报错,若存在报错,则说明集群系统的高可用机制存在缺陷。
这样,本实施例通过在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块,并向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使线程控制模块根据多个模拟请求信号对实例的所有线程进行挂起操作,基于模拟请求信号的发送数量与实例的线程数量相匹配,实现了实例挂起结果的准确性以及对高可用测试结果的有效把控,避免了现有技术中不能完全挂起实例的问题,并且避免了现有技术中在对待挂起实例发送超大批量端口调用请求以挂起实例时,消耗大量主机资源,进而导致高可用测试时结果不准确的问题。
如图3所示,为本发明实施例中集群系统中实例的挂起控制装置的模块框图,该装置包括:
部署模块301,用于在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;
信号发送模块302,用于向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
可选地,所示信号发送模块302包括:
获取单元,用于获取将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量;
发送单元,用于将所述目标量的模拟请求信号发送至线程控制模块,以使线程控制模块能够根据目标量的模拟请求信号,对实例中的所有线程进行挂起操作。
可选地,所述获取单元用于,将预设时段内每个时间切片下模拟请求信号发送量和实例中已挂起线程的数量作为训练样本,对实例中线程挂起数量与模拟请求信号发送量之间的对应关系进行训练学习,并训练得到线程挂起数量与模拟请求信号发送量之间的对应关系;根据训练得到的线程挂起数量与模拟请求信号发送量之间的对应关系,确定将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量。
可选地,所述装置还包括:
线程管理模块,用于检测所述实例中包括的所有线程是否均处于挂起状态;当检测到所述实例中包括的所有线程均处于挂起状态时,检测所述集群系统是否处于高可用状态。
可选地,所述线程管理模块还用于,对所述实例中处于挂起状态的线程进行释放操作,以使处于挂起状态的线程切换至未挂起状态。
本实施例提供的集群系统中实例的挂起控制装置,通过在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块,并向线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使线程控制模块根据多个模拟请求信号对实例的所有线程进行挂起操作,基于模拟请求信号的发送数量与实例的线程数量相匹配,实现了实例挂起结果的准确性以及对高可用测试结果的有效把控,避免了现有技术中不能完全挂起实例的问题,并且避免了现有技术中在对待挂起实例发送超大批量端口调用请求以挂起实例时,消耗大量主机资源,进而导致高可用测试时结果不准确的问题。
此外,如图4所示,为本发明实施例提供的电子设备的实体结构示意图,该电子设备可以包括:处理器(processor)410、通信接口(communicationsinterface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储在存储器430上并可在处理器410上运行的计算机程序,以执行上述各实施例提供的方法,例如包括:在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种集群系统中实例的挂起控制方法,其特征在于,所述方法包括:
在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;
向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
2.根据权利要求1所述的方法,其特征在于,所述向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,包括:
获取将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量;
将所述目标量的模拟请求信号发送至线程控制模块,以使线程控制模块能够根据目标量的模拟请求信号,对实例中的所有线程进行挂起操作。
3.根据权利要求2所述的方法,其特征在于,所述获取将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量,包括:
将预设时段内每个时间切片下模拟请求信号发送量和实例中已挂起线程的数量作为训练样本,对实例中线程挂起数量与模拟请求信号发送量之间的对应关系进行训练学习,并训练得到线程挂起数量与模拟请求信号发送量之间的对应关系;
根据训练得到的线程挂起数量与模拟请求信号发送量之间的对应关系,确定将所述实例所包括的所有线程全部挂起所需的模拟请求信号的目标量。
4.根据权利要求1所述的方法,其特征在于,所述向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号之后,所述方法还包括:
检测所述实例中包括的所有线程是否均处于挂起状态;
当检测到所述实例中包括的所有线程均处于挂起状态时,检测所述集群系统是否处于高可用状态。
5.根据权利要求4所述的方法,其特征在于,所述检测所述集群系统是否处于高可用状态之后,所述方法还包括:
对所述实例中处于挂起状态的线程进行释放操作,以使处于挂起状态的线程切换至未挂起状态。
6.一种集群系统中实例的挂起控制装置,其特征在于,所述装置包括:
部署模块,用于在集群系统中待进行高可用测试的实例中,部署用于对实例的线程进行挂起操作的线程控制模块;
信号发送模块,用于向所述线程控制模块发送与实例的线程数量相匹配的多个模拟请求信号,以使所述线程控制模块根据所述多个模拟请求信号对所述实例的所有线程进行挂起操作。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的集群系统中实例的挂起控制方法的步骤。
8.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至5中任一项所述的集群系统中实例的挂起控制方法的步骤。
技术总结