CN113760409B - 服务实例管理方法、装置、设备及存储介质 - Google Patents

服务实例管理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113760409B
CN113760409B CN202111055797.1A CN202111055797A CN113760409B CN 113760409 B CN113760409 B CN 113760409B CN 202111055797 A CN202111055797 A CN 202111055797A CN 113760409 B CN113760409 B CN 113760409B
Authority
CN
China
Prior art keywords
instruction
instance
service instance
information
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111055797.1A
Other languages
English (en)
Other versions
CN113760409A (zh
Inventor
古才良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Baiguoyuan Network Technology Co Ltd
Original Assignee
Guangzhou Baiguoyuan Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Baiguoyuan Network Technology Co Ltd filed Critical Guangzhou Baiguoyuan Network Technology Co Ltd
Priority to CN202111055797.1A priority Critical patent/CN113760409B/zh
Publication of CN113760409A publication Critical patent/CN113760409A/zh
Application granted granted Critical
Publication of CN113760409B publication Critical patent/CN113760409B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种服务实例管理方法、装置、设备及存储介质,该方法包括:接收针对服务实例的指令,其中,针对服务实例的指令包括发布平台指令或自动拉起指令;其中,发布平台指令中包含元信息,元信息包括用于表示执行发布平台指令后对应的服务实例的预期状态的信息;在执行针对服务实例的指令之前,判断针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断服务实例的预期状态是否为停止,若预期状态为停止,则不允许执行自动拉起指令;若针对服务实例的指令为发布平台指令、或者若预期状态不为停止,则执行针对服务实例的指令。利用本发明的服务实例管理方法,能够实现服务进程状态的一致性。

Description

服务实例管理方法、装置、设备及存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种服务实例管理方法、装置、设备及存储介质。
背景技术
此处的陈述仅提供与本发明有关的背景信息,而不必然地构成现有技术。
发布平台,也称为服务发布平台***,用于管理服务实例的生命周期,主要功能包括:存储管理、分发部署和指令执行等等。以包发布***为例,发布端会将服务包组按要求发布部署安装到指定的接收端机器上,之后按照要求执行这些包以进行部署、卸载、启停等生命周期操作。
随着机器长期的服役,机器会出现各种不可预估的故障,可能会因为诸如重启、断电、内存、网络等原因而导致机器上原本运行的服务进程停止。所以包发布***承载了自动拉起监控服务进程的职责,即负责检查进程是否正常运行,如果发现进程不正常运行,则需要重新执行启动指令,恢复服务进程运行。特殊的,如果服务进程本身不是运行状态,例如被用户操作停止的进程,那么包发布***不应该重新启动该进程。发布***要保障实际实例状态和用户期望的服务进程状态达到一致。
发明内容
本发明的目的在于提供一种新的服务实例管理方法、装置、设备及存储介质,用以实现服务进程状态的一致性。
本发明的目的采用以下技术方案来实现。依据本发明提出的一种服务实例管理方法,包括以下步骤:接收针对服务实例的指令,其中,所述针对服务实例的指令包括发布平台指令或自动拉起指令;其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息;在执行所述针对服务实例的指令之前,判断所述针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令;若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则执行所述针对服务实例的指令。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种服务实例管理方法,包括:发送发布平台指令,其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息,以供所述发布平台指令的接收端根据前述示例的服务实例管理方法来执行所述发布平台指令。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种服务实例管理装置,包括:接收模块,用于接收针对服务实例的指令,其中,所述针对服务实例的指令包括发布平台指令或自动拉起指令;其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息;判断模块,用于判断所述针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令;以及,执行模块,用于若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则执行所述针对服务实例的指令。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种服务实例管理装置,包括:发送模块,用于发送发布平台指令,其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息,以供所述发布平台指令的接收端根据前述的服务实例管理方法来执行所述发布平台指令。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种服务实例管理设备,包括:存储器,用于存储非暂时性计算机可读指令;以及处理器,用于运行所述计算机可读指令,使得所述处理器执行时实现前述任意一种服务实例管理方法。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种计算机可读存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时,使得所述计算机执行前述任意一种服务实例管理方法。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提出的服务实例管理方法、装置、设备及存储介质至少具有下列优点及有益效果:本发明通过利用元信息机制,尤其是同时利用元信息机制和实例上下文信息机制,实现了发布平台的实例状态一致性。
上述说明仅是本发明技术方案的概述,为了能更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1是现有的发布平台的服务实例管理的流程示意图;
图2是本发明一个实施例的服务实例管理方法的流程示意图;
图3是本发明另一实施例的服务实例管理方法的流程示意图;
图4是本发明再一实施例的服务实例管理方法的流程示意图;
图5是本发明又一实施例的服务实例管理方法的流程示意图;
图6是本发明一个实施例的服务实例管理设备的示意图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的服务实例管理方法、装置、设备及存储介质的具体实施方式、结构、特征及其功效,详细说明如后。
需要说明的是,在本文中,诸如“第一”、“第二”等关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。另外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本文提及的发布***也称为服务发布平台***,用于管理服务实例的生命周期。主要功能包括但不限于:存储管理、分发部署和指令执行。可选的,本发明涉及的是物理机的发布。
本文提及的co_agent为:一种websocket服务,负责接收指令并执行指令,返回指令执行结果。
本文提及的crontab为:Linux机器上是用来定期执行程序的命令。
本文提及的服务实例为:服务的进程。
本文提及的实例状态为:服务进程在机器上的状态,如:运行状态,停止状态。
本文提及的进程自动拉起监控为:检查实例状态是否停止,如果检测停止,则执行对应的启动程序,恢复程序运行状态。
发布***包括基于容器云的发布***、基于Linux的发布***。
基于容器云的发布***:
随着技术发展,容器云已成为发布***的主要选型,有着完善的编排和管理功能。以Kubernetes为例,每个服务节点上会启动一个运行在节点上的kubelet服务,它可读取容器清单,确保指定的容器服务启动并运行。一般通过探针的方式来检查容器的健康状态,或者通过容器docker API的方式获取到对应容器的状态,如果检测到容器不正常,kubelet将杀掉该容器,并上报容器信息通知控制器,控制器再去重启策略做相应处理,如重新创建一个新的容器等。
基于Linux的发布***:
图1示出了一种现有的包发布***实例一致性机制的示意性图示。现有的基于Linux的包发布的实例状态一致性保障,是通过接收端机器上的crontab定时执行一份进程监控清单,但是这份清单存在一定的缓存,当用户通过包发布***平台把某个服务进程停止(如停止操作、卸载操作等),此时需要从监控清单剔除,预期接收端机器上的实例状态是停止的,并且不会被再次启动运行。但是因为某些原因(网络问题,机器无响应等)未能及时更新监控清单,无法确保实时获取最新的监控列表,导致crontab执行的仍然是旧的监控清单,仍然会检查该服务进程,当检测发现服务停止,则执行启动指令恢复进程运行,从而启动了非预期的服务进程,发生误拉起的情况,出现实例状态不一致的问题(用户预期是停止,但机器上服务进程已经启动)。
另外,因为crontab定时任务进程和包发布平台的指令执行进程是两个不同进程,进程间的交互通信和互斥也带来一定的问题。例如,包发布平台刚好下发指令执行,恰好同一时刻crontab任务进程启动,形成了多个进程同时操作同一实例,如包发布平台下发停止进程指令,但crontab启动进程,此时也会产生不一致的问题。
针对现有的问题,需要解决因监控清单缓存导致的误拉起问题,crontab和包发布平台指令执行进程互斥问题,包发布才能保障实际实例状态和预期状态达到一致。
图2为本发明的服务实例管理方法一个实施例的示意性流程框图。在本发明的一些实施例中,请参阅图2,本发明示例的服务实例管理方法主要包括以下步骤:
步骤S11,接收针对服务实例的指令。其中,针对服务实例的指令包括发布平台指令或自动拉起指令。
其中,发布平台指令是从发布平台接收到的指令。可选的,发布平台指令与服务实例的生命周期相关的指令。
其中,自动拉起指令用于自动拉起服务进程。需注意,该自动拉起指令可以是有误的,执行误拉起指令会拉起启动非预期服务实例。
其中,发布平台指令中包含元信息(metadata)。该元信息用于记录发布平台对服务实例的配置,包括但不限于:用于表示执行发布平台指令后对应的服务实例的预期状态的信息。
步骤S12,在执行针对服务实例的指令之前,判断针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断服务实例的预期状态是否为停止,若预期状态为停止,则不允许执行该自动拉起指令。
步骤S13,若针对服务实例的指令为发布平台指令、或者若预期状态不为停止,则执行针对服务实例的指令。
利用本发明的服务实例管理方法,通过利用元信息机制,能够防止误拉起服务进程,进而实现了发布平台的实例状态一致。
在本发明的一些实施例中,发布平台下发的是由多个指令组成的事务。具体的,事务包括针对一个或多个服务实例待执行的一个或多个指令。发布平台下发的事务包括但不限于部署、升级、回滚、卸载、配置变更、启动、重启、停止等。发布平台所能够下发的操作事务的类似可以是预先配置好的。而指令中包含的元信息中的一些信息是与指令所属的事务对应。例如,下面将提到的操作事务信息(transaction),可以在一个事务所包括多个顺序执行的指令中标识出执行顺序的状况,例如:标识出哪个指令是最后一个执行的指令(end和非end);或者同时标识出第一个执行的指令和最后一个执行的指令(begin、end、以及其他),从而可以利用该信息使得在begin和end之间的指令执行时,不允许执行自拉起指令。
在本发明的一些实施例中,元信息(metadata)包括身份标识信息和操作类型信息(op)。该身份标识信息,也称为唯一标识,用于标识出指令针对的目标服务实例。例如,身份标识信息可具体包括服务包名字段(pack)和服务版本字段(ver)。该操作类型信息(op)表示目标服务实例在执行针对服务实例的指令后的预期状态。进一步的,元信息还可以包括操作事务信息(transaction)。该操作事务信息(transaction)表示在执行针对服务实例的指令的具体处理后目标服务实例是否已完成目标事务。另外,自动拉起指令中包含但不限于:身份标识信息。
作为一个可选实施例,元信息数据结构可定义为
图3为本发明的服务实例管理方法另一个实施例的示意性流程框图。在本发明的一些实施例中,请参阅图3,在前一实施例中的步骤S12之前,本发明的服务实例管理方法还包括:步骤S21,解析针对服务实例的指令,获取或创建与解析出的目标服务实例对应的实例上下文信息(instance_context)。例如,根据解析出的目标服务实例的身份标识信息,来获取或创建对应的实例上下文信息。
其中,前述的实例上下文信息,用于记录服务实例预期运行状态和上下文执行状态,包括但不限于:实例预期状态字段(instance_status)。该实例预期状态字段可用于表示操作执行此指令后预期的实例状态。进一步的,实例上下文信息还可以包括上下文执行状态字段(executing),该上下文执行状态字段可用于标识实例上下文是否正在被执行。可选的,实例上下文信息还可以包括管道字段(channel),该管道字段用于标识指令的存放信息。
需注意,前述的获取或创建意为:如果不存在与目标服务实例对应的上下文信息或第一次对该服务实例执行操作,则创建对应的实例上下文信息;如果已存在对应的实例上下文信息或并非第一次对该服务实例执行操作,则获取对应的实例上下文。
作为一个可选实施例,上下文数据结构可定义为
在本发明的一些实施例中,请参阅图3,前述的步骤S12具体包括:步骤S22,判断针对服务实例的指令是否为自动拉起指令,若是自动拉起指令,则根据实例上下文信息中的实例预期状态字段(instance_status)进行判断,来判断目标服务实例的预期状态,若实例预期状态字段(instance_status)表示目标服务实例的预期运行状态为停止状态,则不允许执行自动拉起指令并结束指令的执行,即不需要监控拉起预期停止的进程。而前述的步骤S13具体包括:步骤S23,若针对服务实例的指令为发布平台指令、或者若实例预期状态字段(instance_status)表示目标服务实例的预期状态不为停止状态而是运行,则更新实例上下文信息;步骤S24,在更新实例上下文信息后,执行针对服务实例的指令的具体处理。
其中,前述步骤S23中的更新实例上下文信息具体包括:若针对服务实例的指令为发布平台指令,则根据元信息(metadata)中的操作类型信息(op)来更新目标服务实例的实例上下文信息中的实例预期状态字段(instance_status)。具体的,若元信息中的操作类型信息(op)为启动状态则更新实例上下文信息的实例预期状态字段(instance_status)为正在执行状态,若操作类型信息(op)为停止状态则更新实例预期状态字段(instance_status)为停止状态。在后续再进行步骤S12时,若为自动拉起指令,则会判断实例上下文信息中的实例预期状态字段(instance_status)的取值,从而能够防止由于监控列表缓存更新不及时、误拉起服务进程、而导致的实例状态不一致的问题。
需注意,如果针对服务实例的指令不是发布平台指令、而是自动拉起指令,则可以不进行前述的根据元信息中的操作类型信息来更新、修改实例预期状态字段。
利用本发明的服务实例管理方法,通过利用发布平台进行服务生命周期管控,在部署服务到接收端设备后,通过利用指令的元信息和对应的实例上下文信息,能够保障服务实例的实际状态与预期状态一致,实现了流程状态闭环。解决用户预期停止的服务实例被误拉起启动的问题,并使得用户预期运行的服务实例,能够在监控识别停止时被自动拉起启动,最终实现实例状态一致。
图4为本发明的服务实例管理方法再一个实施例的示意性流程框图。在本发明的一些实施例中,请参阅图4,本发明示例的服务实例管理方法主要包括以下步骤:
步骤S31,接收针对服务实例的指令。其中,针对服务实例的指令包括发布平台指令或自动拉起指令。其中,发布平台指令中包含元信息。该元信息包括:身份标识信息和操作类型信息。该自动拉起指令中也包含身份标识信息。
步骤S32,解析针对服务实例的指令,获取或创建与解析出的目标服务实例对应的实例上下文信息。其中,实例上下文信息用于记录服务实例预期运行状态和上下文执行状态,包括但不限于:实例预期运行状态字段(instance_status)和上下文执行状态字段(executing)。该上下文执行状态字段用于标记上下文信息是否正在被使用。
步骤S33,根据实例上下文信息中的上下文执行状态字段(executing)进行判断,来检查上下文是否已经在执行中,若上下文信息处于在执行中(true)状态,则不允许执行针对服务实例的指令并结束指令的执行。
步骤S34,判断针对服务实例的指令是否为自动拉起指令,若是自动拉起指令,则根据实例上下文信息中的实例预期运行状态字段(instance_status)进行判断,来判断目标服务实例的预期状态,若目标服务实例的预期运行状态处于停止状态,则不允许执行自动拉起指令并结束指令的后续执行。
步骤S35,若针对服务实例的指令为发布平台指令、或者若目标服务实例的预期状态不为停止状态,则更新实例上下文信息。
其中,更新实例上下文信息具体包括:
(1)根据元信息中的操作类型信息(op)来更新目标服务实例的实例上下文信息中的实例预期状态字段(instance_status),用于表示操作执行此指令,预期的实例状态。具体的,若元信息中的操作类型信息(op)为启动状态则更新实例上下文信息的实例预期状态字段(instance_status)为正在执行状态,若操作类型信息(op)为停止状态则更新实例预期状态字段(instance_status)为停止状态。在后续再进行步骤S34时,若为自动拉起指令(自动拉起指令)就会判断实例上下文信息中的实例预期状态字段(instance_status)的取值,从而能够防止由于监控列表缓存更新不及时、误拉起服务进程、而导致的实例状态不一致的问题。
(2)将目标服务实例的实例上下文信息中的上下文执行状态字段(executing)设置为在执行中状态,用于标记实例上下文为正在执行的状态。可选的,若上下文执行状态字段(executing)设置为在执行中状态,则表明此时对应的服务正在被一个指令执行,进而该服务不允许执行其他指令。可选的,若上下文执行状态字段(executing)设置为在执行中状态,则表明此时开启了指令对应的事务,使得当前实例上下文只为当前事务相关的指令进行服务,直到事务结束为止。在后续再进行步骤S33时,通过判断该上下文执行状态字段(executing)的取值来对针对服务实例的指令的操作进行控制,如果为正在执行状态则结束指令,从而能够实现自动拉起和包发布指令进程互斥,避免交叉执行的问题。
步骤S36,在进行前述的更新实例上下文信息后,执行针对服务实例的指令的具体处理。例如,若该指令为自动拉起指令,则拉起目标服务实例;若该指令为发布平台指令,则执行该发布平台指令的具体操作。
步骤S37,在进行前述的执行针对服务实例的指令之后,将目标服务实例的实例上下文信息中的上下文执行状态字段(executing)设置为未执行(false)状态。
需要说明的是,前述步骤S33仅需在步骤S35中的更新实例上下文信息的过程之前执行即可。例如,在一个可选示例中,可以在步骤S34的判断针对服务实例的指令是否为自动拉起指令的步骤之前,执行该步骤S33;或者,在另一可选示例中,在步骤S34的判断针对服务实例的指令是否为自动拉起指令的步骤之后、且在步骤S35的更新实例上下文信息的步骤之前,执行该步骤S33。
需注意,发布平台指令和自动拉起指令这两者,可能会出现同时达到的情形。利用本发明的服务实例管理方法,通过设置上下文执行状态字段(executing),在每个来源的指令开始(一个指令事务的开启)时,更新上下文执行状态字段executing为执行中(true),直到收到结束事务指令,更新上下文执行状态字段executing为未执行(false),能够避免这两种来源的指令同时执行而带来非预期的操作。例如在用户通过发布平台下发事务或指令时,能够避免自拉起指令的执行。
在本发明的一些实施例中,前述步骤S11或S13中的接收针对服务实例的指令包括:接收发布平台下发的目标事务,该目标事务包括针对一个或多个服务实例的一个或多个发布平台指令。元信息还包括操作事务信息(transaction)。该操作事务信息(transaction)表示:在执行当前的针对服务实例的指令的具体处理之后,该指令对应的服务实例(即,前述的目标服务实例)是否已完成目标事务,即当前指令所属的事务所包括的指令中针对于当前指令对应的服务实例的所有指令是否均已结束。并且,本发明的服务实例管理方法还包括:在前述的执行针对服务实例的指令的步骤之后,根据元信息中的操作事务信息(transaction)进行判断,判断平台下发的目标事务对于目标服务实例的处理是否结束,即判断在平台下发的目标事务所包括的指令中针对于目标服务实例的所有指令是否均已结束,若在执行当前的发布平台指令之后目标事务已完成对于目标服务实例的处理,则释放对应的实例上下文信息。可选的,若在执行当前的发布平台指令之后目标事务已完成对于目标服务实例的处理,则释放对应的实例上下文信息,标记对应的上下文执行状态字段executing为未执行(false)状态,表示该实例上下文可以继续为其他指令服务。
在本发明的一些实施例中,实例上下文信息还包括管道字段(channel)。并且本发明的服务实例管理方法还包括:根据管道字段确定目标管道,并利用与目标管道对应的协程(goroutine)来执行针对服务实例的指令,从而实现了利用多个管道并行处理多个目标服务实例。
在本发明的一些实施例中,实例上下文信息还包括时间戳字段(timestamp)。前述的更新实例上下文信息的步骤还包括:更新时间戳字段。
在本发明的一些实施例中,可以利用时间任务(timed task)每隔预设的第一时间间隔进行自动拉起指令的生成。需注意,对前述第一时间间隔不做具体限制;可选的,可以每分钟生成一次自动拉起指令。作为一个具体实施例,前述步骤S11或步骤S31中的接收针对服务实例的指令中的接收自动拉起指令具体包括:定时地,例如以第二时间间隔为周期,主动向发布平台指令获取进程监控清单(也称为监控实例列表);定时地,例如以前述第一时间间隔为周期,根据进程监控清单,生成自动拉起指令。需注意,对前述第二时间间隔不做具体限制,并且第二时间间隔与第一时间间隔的时长可以一致也可以不一致;可选的,若成功获取进程监控清单,则以十分钟为间隔进行下一次的获取进程监控清单,若未成功获取进程监控清单,则以一分钟为间隔进行下一次的获取进程监控清单。需注意,该进程监控清单可能不是最新的,从而生成的自动拉起指令可能是有误的。
发布端服务器、以及接收端的服务器、个人PC、移动终端等设备的生命周期会经历较多状态,例如上架中、已报修、重装中、已关机、运营中、测试中、已报废等状态。业务层面上,能够运行进程的设备需要是运营中/测试中的状态,即只有处于运营中/测试中状态的机器上的进程,才需要关注。在本发明的一些实施例中,本发明的服务实例管理方法还包括:定时地,例如以第三时间间隔为周期,获取接收端机器状态信息,例如,可以根据CMDB(配置管理数据库)信息得到机器状态信息;在执行指令之前,例如进行前述步骤S11之前、或前述步骤S12之前,或进行前述的获取或创建与解析出的目标服务实例对应的实例上下文信息的步骤之前,检查机器状态信息,如果机器不是运营中/测试中,那么任何指令都不执行。需注意,对前述第三时间间隔不做具体限制;可选的,若成功获取机器状态信息,则以十分钟为间隔进行下一次的获取机器状态信息,若未成功获取机器状态信息,则以一分钟为间隔进行下一次的获取机器状态信息。
在本发明的一些实施例中,本发明的服务实例管理方法还包括:定时地,例如以第四时间间隔为周期,对实例上下文信息进行回收。需注意,对前述第四时间间隔不做具体限制,例如,可以每天定期地根据实例列表来回收对应的上下文信息。随着服务版本迭代,一个机器上的实例上下文会越来越多,通过定时任务回收历史的实例上下文,能够有效释放资源。
本发明的实施例还提供一种服务实例管理方法,主要适用于发布平台端,该方法主要包括以下步骤:发送发布平台指令。其中,发布平台指令中包含元信息,该元信息包括用于表示执行发布平台指令后对应的服务实例的预期状态的信息,以供该发布平台指令的接收端根据前述各种实施例的服务实例管理方法(例如图2、图3或图4的方法)的各种来执行该发布平台指令。
作为一个可选示例,发布平台指令的元信息包括:身份标识信息和操作类型信息,身份标识信息用于标识出指令针对的目标服务实例,操作类型信息表示目标服务实例在执行针对服务实例的指令后的预期状态。
作为一个可选示例,前述的发送发布平台指令具体包括:下发目标事务,目标事务包括针对一个或多个服务实例的一个或多个发布平台指令。并且,发布平台指令的元信息还包括操作事务信息,操作事务信息表示在执行当前的发布平台指令之后目标服务实例是否已完成目标事务。
图5为本发明的服务实例管理方法又一个实施例的示意性流程框图。
在本发明的一些实施例中,以基于Linux的包发布***为例,包发布平台的事务指令和自动拉起指令都统一通过co_agent服务接收和执行。其中,包发布平台的事务,一般是由用户从web页面下发的对服务实例的生命周期相关操作,包括但不限于部署、升级、回滚、卸载、配置变更、启动、重启、停止等事务;而包发布平台的事务包括对于一个或多个服务实例的一个或多个指令,称为包发布平台的事务指令。自动拉起指令是一个定时监控任务,由co_agent管理。具体的:
1、包发布平台下发的每个指令携带元信息(metadata),co_agent接收到指令后解析元信息。
2、co_agent接收到指令后,首先解析指令里携带的元信息,根据元信息里的唯一实例标识,创建或者获取对应的实例上下文(instance_context),并把指令添加到channel管道。
根据清单,生成自动拉起任务。具体的,可以利用时间任务(timed task)每隔预设的时间间隔(例如前述的第一时间间隔),生成一次自动拉起指令。自动拉起指令需要携带唯一实例标识,具体可以是前述的实际服务包名(pack)和实际服务版本(ver)。
3、每个实例上下文的channel管道对应一个协程(goroutine),串行执行channel里的指令。首先会做检查判断,检查通过后才执行指令。
3.1、检查该上下文是否已经在执行中(executing):如果已经在执行中,那么直接返回。
3.2、判断该指令的发起方:如果是自动拉起的指令,那么进一步判断实例的预期状态,如果预期状态是停止,那么该拉起启动指令不允许执行,即不需要监控拉起预期停止的进程;
3.3、更新实例上下文信息:
前面步骤检查通过,标记实例上下文为正在执行(更新executing为true),此时即开启了指令事务,使得当前实例上下文只为当前事务相关的指令服务,直到事务结束为止;后续再进行前述步骤3.1时就会判断该值,即实现自动拉起和包发布指令进程互斥,避免交叉执行的问题。
根据前述步骤1提及的包发布指令的元信息,更新实例上下文的instance_status(如op为start则更新instance_status为running,op为stop则更新instance_status为stop),表示操作执行此指令,预期的实例状态。后续第二步自动拉起指令就会判断该值,即不会因为监控列表缓存更新不及时,误拉起服务进程,导致实例状态不一致的问题。
3.4、执行指令;并判断当前指令事务是否结束(根据元信息transaction为end表示结束事务),如果结束,则释放实例上下文,标记executing为false,表示实例上下文可以继续为其他指令服务。
在本发明的一些实施例中,通过去除crontab机制,把crontab进程和包发布平台事务指令执行进程规整为同一co_agent进程,基于同一进程能够解决不同进程互斥带来的问题。另外,本发明通过在co_agent上维护了每个实例的上下文信息,每个进程对应一个实例上下文,能够解决进程被误拉起问题,最终实现状态一致性。
利用本发明提出的服务实例管理方法,可以解决以下问题:
1、可以解决多实例并行的问题:通过创建实例对应的上下文,把不同实例的并行操作转串行化处理,每个实例有对应的上下文,从而不会交叉。
2、可以解决同一实例自动拉起和包发布指令操作交叉执行的问题:通过把同一实例的相关指令提交channel,以队列形式串行化,每个实例上下文的executing来标识实例上下文是否正在使用,避免多个任务指令交叉嵌入执行。
3、可以解决自动拉起非预期实例,实例状态不一致的问题:实例上下文保存了实例的预期状态(instance_status),自动拉起执行前会检查状态,检查到实例已经是停止状态,则不执行启动操作。最明显的解决问题是:包发布前一步停止进程,后一步自动拉起误拉起进程。
4、可以解决版本迭代多,导致历史实例上下文多的问题:定时检查回收实例上下文,避免遗留历史实例上下文,浪费机器资源。
本发明的实施例还提供一种服务实例管理装置,该装置主要包括:接收模块、判断模块以及执行模块。
其中,该接收模块用于:接收针对服务实例的指令。其中,针对服务实例的指令包括发布平台指令或自动拉起指令。其中,发布平台指令中包含元信息,元信息包括用于表示执行发布平台指令后对应的服务实例的预期状态的信息。
该判断模块用于:判断针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断服务实例的预期状态是否为停止,若预期状态为停止,则不允许执行自动拉起指令。
该执行模块用于:若针对服务实例的指令为发布平台指令、或者若预期状态不为停止,执行针对服务实例的指令的具体处理。
另外,本发明实施例示出的各种服务实例管理装置包括有用于执行前述各个实施例所述方法对应的模块和单元,而其详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
本发明的实施例还提供一种服务实例管理装置,适用于发布端,该装置主要包括:发送模块,用于发送发布平台指令,其中,发布平台指令中包含元信息,元信息包括用于表示执行发布平台指令后对应的服务实例的预期状态的信息,以供发布平台指令的接收端根据前述的服务实例管理方法的各种实施例来执行该发布平台指令。
图6是图示根据本发明的一个实施例的服务实例管理设备的示意性框图。如图6所示,根据本公开实施例的服务实例管理设备100包括存储器101和处理器102。
该存储器101用于存储非暂时性计算机可读指令。具体地,存储器101可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
该处理器102可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制服务实例管理设备100中的其它组件以执行期望的功能。在本公开的一个实施例中,该处理器102用于运行该存储器101中存储的该计算机可读指令,使得该服务实例管理设备100执行前述的本公开各实施例的服务实例管理方法的全部或部分步骤。
有关本实施例的详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
本发明的实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在设备上运行时,使得设备执行上述相关方法步骤实现上述实施例中的服务实例管理方法。
本发明的实施例还提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的服务实例管理方法。
另外,本发明的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的服务实例管理方法。
其中,本发明提供的装置、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
以上所述,仅是本发明的较佳实施例而已,并非对本发明做任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (9)

1.一种服务实例管理方法,其特征在于,所述方法包括以下步骤:
由同一个服务接收针对服务实例的发布平台指令和自动拉起指令;其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息;
在执行所述针对服务实例的指令之前,判断所述针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令;
若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则由接收针对服务实例的服务执行所述针对服务实例的指令;
所述元信息还包括身份标识信息和操作类型信息,所述身份标识信息用于标识出指令针对的目标服务实例,所述操作类型信息表示目标服务实例在执行所述针对服务实例的指令后的所述预期状态;所述自动拉起指令中包含所述身份标识信息;
在所述的判断所述针对服务实例的指令是否为自动拉起指令之前,所述方法还包括:解析所述针对服务实例的指令,获取或创建与解析出的所述目标服务实例对应的实例上下文信息,所述实例上下文信息包括实例预期状态字段;
所述的判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令,包括:根据所述实例上下文信息中的所述实例预期状态字段进行判断,若所述实例预期状态字段表示目标服务实例的预期状态为停止状态,则不允许执行所述自动拉起指令并结束指令的执行;
所述的若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则由接收针对服务实例的服务执行所述针对服务实例的指令,具体包括:若所述针对服务实例的指令为发布平台指令、或者若所述实例预期状态字段表示所述目标服务实例的预期状态不为停止状态,则更新所述实例上下文信息;在更新所述实例上下文信息后,执行所述针对服务实例的指令;
其中,所述的更新所述实例上下文信息具体包括:若所述针对服务实例的指令为发布平台指令,则根据所述元信息中的所述操作类型信息来更新所述目标服务实例的所述实例上下文信息中的所述实例预期状态字段。
2.根据权利要求1所述的服务实例管理方法,其特征在于:
所述实例上下文信息还包括上下文执行状态字段;
在所述更新所述实例上下文信息之前,所述方法还包括:根据所述实例上下文信息中的所述上下文执行状态字段进行判断,若上下文信息处于在执行中状态,则不允许执行所述针对服务实例的指令并结束指令的执行;
所述更新所述实例上下文信息,还包括:将所述目标服务实例的所述实例上下文信息中的所述上下文执行状态字段设置为在执行中状态;
在所述的执行所述针对服务实例的指令之后,所述方法还包括:将所述目标服务实例的所述实例上下文信息中的所述上下文执行状态字段设置为未执行状态。
3.根据权利要求1或2所述的服务实例管理方法,其特征在于,
所述接收针对服务实例的发布平台指令包括:接收发布平台下发的目标事务,所述目标事务包括针对一个或多个服务实例的一个或多个发布平台指令;
所述元信息还包括操作事务信息,所述操作事务信息表示在执行当前的所述发布平台指令之后所述目标服务实例是否已完成所述目标事务;
在所述的执行所述针对服务实例的指令之后,所述方法还包括:根据所述元信息中的所述操作事务信息进行判断,若在执行当前的所述发布平台指令之后所述目标事务已完成对于所述目标服务实例的处理,则释放所述实例上下文信息。
4.根据权利要求1所述的服务实例管理方法,其特征在于,
所述实例上下文信息还包括管道字段;
所述方法还包括:根据所述管道字段确定目标管道,并利用与目标管道对应的协程来执行所述针对服务实例的指令。
5.一种服务实例管理方法,其特征在于,所述方法包括:包括以下步骤:
发送发布平台指令,其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息,以供所述发布平台指令的接收端根据权利要求1至4中任一项所述的服务实例管理方法来执行所述发布平台指令。
6.一种服务实例管理装置,其特征在于,所述装置包括:
接收模块,用于由同一个服务接收针对服务实例的发布平台指令和自动拉起指令;其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息;
判断模块,用于判断所述针对服务实例的指令是否为自动拉起指令,若为自动拉起指令,则判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令;以及,
执行模块,用于若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则由接收针对服务实例的服务执行所述针对服务实例的指令;
所述元信息还包括身份标识信息和操作类型信息,所述身份标识信息用于标识出指令针对的目标服务实例,所述操作类型信息表示目标服务实例在执行所述针对服务实例的指令后的所述预期状态;所述自动拉起指令中包含所述身份标识信息;
在所述的判断所述针对服务实例的指令是否为自动拉起指令之前,所述装置还用于:解析所述针对服务实例的指令,获取或创建与解析出的所述目标服务实例对应的实例上下文信息,所述实例上下文信息包括实例预期状态字段;
所述的判断所述服务实例的所述预期状态是否为停止,若所述预期状态为停止,则不允许执行所述自动拉起指令,包括:根据所述实例上下文信息中的所述实例预期状态字段进行判断,若所述实例预期状态字段表示目标服务实例的预期状态为停止状态,则不允许执行所述自动拉起指令并结束指令的执行;
所述的若所述针对服务实例的指令为发布平台指令、或者若所述预期状态不为停止,则由接收针对服务实例的服务执行所述针对服务实例的指令,具体包括:若所述针对服务实例的指令为发布平台指令、或者若所述实例预期状态字段表示所述目标服务实例的预期状态不为停止状态,则更新所述实例上下文信息;在更新所述实例上下文信息后,执行所述针对服务实例的指令;
其中,所述的更新所述实例上下文信息具体包括:若所述针对服务实例的指令为发布平台指令,则根据所述元信息中的所述操作类型信息来更新所述目标服务实例的所述实例上下文信息中的所述实例预期状态字段。
7.一种服务实例管理装置,其特征在于,所述装置包括:
发送模块,用于发送发布平台指令,其中,所述发布平台指令中包含元信息,所述元信息包括用于表示执行所述发布平台指令后对应的服务实例的预期状态的信息,以供所述发布平台指令的接收端根据权利要求1至4中任一项所述的服务实例管理方法来执行所述发布平台指令。
8.一种服务实例管理设备,包括:
存储器,用于存储非暂时性计算机可读指令;以及
处理器,用于运行所述计算机可读指令,使得所述计算机可读指令被所述处理器执行时实现权利要求1至5中任一项所述的服务实例管理方法。
9.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在设备上运行时,使得所述设备执行如权利要求1至5中任一项所述的服务实例管理方法。
CN202111055797.1A 2021-09-09 2021-09-09 服务实例管理方法、装置、设备及存储介质 Active CN113760409B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111055797.1A CN113760409B (zh) 2021-09-09 2021-09-09 服务实例管理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111055797.1A CN113760409B (zh) 2021-09-09 2021-09-09 服务实例管理方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN113760409A CN113760409A (zh) 2021-12-07
CN113760409B true CN113760409B (zh) 2024-06-18

Family

ID=78794275

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111055797.1A Active CN113760409B (zh) 2021-09-09 2021-09-09 服务实例管理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN113760409B (zh)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737060A (zh) * 2020-08-07 2020-10-02 北京金山云网络技术有限公司 处理组件异常的方法、装置及电子设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101552739A (zh) * 2008-04-03 2009-10-07 北京邮电大学 一种网络服务流程实例生命周期管理的方法及***
CN107515796B (zh) * 2017-07-31 2020-08-25 奇安信科技集团股份有限公司 一种设备异常监控处理方法及装置
CN108595316B (zh) * 2018-04-20 2020-02-21 星环信息科技(上海)有限公司 分布式应用的生命周期管理方法、管理器、设备和介质
CN109660380B (zh) * 2018-09-28 2022-09-06 深圳壹账通智能科技有限公司 服务器运行状态的监控方法、平台、***及可读存储介质
CN109361525B (zh) * 2018-10-25 2021-08-13 珠海派诺科技股份有限公司 重启分布式部署多服务的方法、装置、控制终端及介质
CN111324423B (zh) * 2020-03-03 2022-03-04 腾讯科技(深圳)有限公司 容器内进程的监控方法、装置、存储介质和计算机设备
CN113117339B (zh) * 2021-04-09 2023-03-10 深圳市腾讯网络信息技术有限公司 一种数据处理方法、装置、服务器及存储介质
CN113032054B (zh) * 2021-04-21 2023-07-14 杭州华橙软件技术有限公司 一种服务执行方法、装置、存储介质及电子装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737060A (zh) * 2020-08-07 2020-10-02 北京金山云网络技术有限公司 处理组件异常的方法、装置及电子设备

Also Published As

Publication number Publication date
CN113760409A (zh) 2021-12-07

Similar Documents

Publication Publication Date Title
US9983924B2 (en) Analytics platform for automated diagnosis, remediation, and proactive supportability
CN103885806B (zh) 机顶盒的***软件在线升级的实现方法和装置
CN106708740B (zh) 脚本测试方法及装置
CN107193607B (zh) 用于更新代码文件的方法和装置、存储介质、处理器以及终端
CN107015842B (zh) 一种服务器端程序编译和发布的管理方法及***
CN110225078B (zh) 一种应用服务更新方法、***及终端设备
CN109360029B (zh) 一种远程终端广告机的自我管理方法
CN103530150A (zh) 一种Linux操作***远程更新的方法
CN110895488B (zh) 任务调度方法及装置
CN104657158A (zh) 一种业务***中业务处理的方法和装置
WO2017198156A1 (zh) 业务部署方法、装置和***
CN112099825B (zh) 组件进行升级的方法、装置、设备及存储介质
CN110597545A (zh) 一种基于ota组件的热补丁智能升级方法及***
US20220326927A1 (en) Abort installation of firmware bundles
CN113805925A (zh) 分布式集群管理软件的在线升级方法、装置、设备及介质
CN109445800B (zh) 一种基于分布式***的版本自动部署方法及***
CN107463390B (zh) 一种软件升级方法及升级服务器
CN113760409B (zh) 服务实例管理方法、装置、设备及存储介质
WO2016131294A1 (zh) 版本升级处理方法及装置
CN112764789A (zh) 一种分布式软件升级方法及节点
CN114879977A (zh) 应用部署方法、装置及存储介质
CN108958769A (zh) 一种嵌入式设备软件***修复方法及***
CN109324834A (zh) 一种分布式存储服务器自动重启的***及方法
CN111538738B (zh) 服务升级方法、装置、电子设备及存储介质
CN113992739A (zh) 一种局域网ota固件升级装置、方法及***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant