一种服务的重启方法和装置与流程

文档序号:11154618阅读:632来源:国知局
一种服务的重启方法和装置与制造工艺

本发明涉及计算机技术领域,特别是涉及一种服务的重启方法和一种服务的重启装置。



背景技术:

Thrift是一套不同语言之间通信的RPC(Remote Procedure Call Protocol,远程进程调用协议)框架。本领域技术人员在采用Thrift在进行开发时发现,Thrift是使用多个服务互相备份的方式部署和更新服务service。

例如,一服务service运行在一台服务器A上,如果想对该服务进行升级,就需要使用另外一台部署同样服务的备份服务器B替换。即将该服务的所有线上请求全都移交到服务器B上,然后停掉服务器A上服务,更新A上的服务并重新启动,再将服务从B替换回A上,从而实现对服务的升级。

但是,Thrift采用上述备份的方式部署和更新服务service,每次更新服务操作繁琐,升级部署不便捷。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的服务的重启方法和相应的服务的重启装置。

依据本发明实施例的一个方面,提供了一种服务的重启方法,包括:服务进程依据重启指令,获取与目标接口绑定的套接字socket;创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket;判断所述服务进程不存在请求后,关闭所述服务进程;针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

可选的,其中,还包括:预先变更库代码,以使进程支持传入socket,其中,所述进程包括服务进程和服务子进程;封装变更的库代码,得到对应支持进程热重启的库文件。

可选的,其中,还包括:依据所述支持进程热重启的库文件创建服务进程。

可选的,获取与目标接口绑定的socket之后,还包括:将所述绑定的socket添加到环境变量中。

可选的,对所述服务子进程传入所述绑定的socket,包括:向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

可选的,针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket,包括:在所述目标接口处,判断所述服务子进程的环境变量中是否存在所述绑定的socket;若存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket。

可选的,其中,还包括:依据接口请求创建与目标接口绑定的socket。

根据本发明实施例的另一个方面,提供了一种服务的重启装置,包括:获取模块,用于服务进程依据重启指令,获取与目标接口绑定的套接字socket;传入模块,用于创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket;关闭模块,用于判断所述服务进程不存在请求后,关闭所述服务进程;服务模块,用于针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

可选的,其中,还包括:库变更模块,用于预先变更库代码,以使进程支持传入socket,其中,所述进程包括服务进程和服务子进程;封装变更的库代码,得到对应支持进程热重启的库文件。

可选的,其中,还包括:创建模块,用于依据所述支持进程热重启的库文件创建服务进程。

可选的,其中,还包括:变量添加模块,用于将所述绑定的socket添加到环境变量中。

可选的,所述传入模块,用于向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

可选的,所述服务模块,用于在所述目标接口处,判断所述服务子进程的环境变量中是否存在所述绑定的socket;若存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket。

可选的,其中,还包括:创建模块,用于依据接口请求创建与目标接口绑定的socket。

服务进程依据重启指令,获取与目标接口绑定的socket,然后创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket,通过服务子进程接替服务进程提供对目标接口的服务,在判断所述服务进程不存在请求后,关闭所述服务进程,采用服务子进程调用所述绑定的socket提供针对目标接口的服务,从而实现对服务的热重启,能够在不中断服务的情况下重启服务,操作简单,无需使用备份服务器,服务升级便捷。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的一种服务的重启方法实施例的步骤流程图;

图2示出了根据本发明另一个实施例的一种服务的重启方法实施例的步骤流程图;

图3示出了根据本发明一个实施例的一种服务的重启装置实施例的结构框图;以及

图4示出了根据本发明另一个实施例的一种服务的重启装置实施例的结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

为了解决采用备份的方式部署和更新服务service时,每次更新服务操作繁琐,升级部署不便捷等至少一个问题,本发明实施例对服务进行热重启,即在不中断服务的情况下重启服务,无需部署备份服务器,操作简单,升级便捷。

参照图1,示出了根据本发明一个实施例的一种服务的重启方法实施例的步骤流程图,具体可以包括如下步骤:

步骤102,服务进程依据重启指令,获取与目标接口绑定的套接字socket。

本实施例中,启动一服务进程service,建立socket与目标接口绑定,提供针对该目标接口的服务。设置服务进程service能够响应特定信号然后执行热重启,其中,特定信号包括重启指令,在发出重启指令后,服务进程service依据该重启指令,获取该服务进程service对应与目标接口绑定的socket。其中,socket用于描述IP地址和端口,是一个通信链的句柄。

步骤104,创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket。

依据重启指令进行热重启的过程中,为保证服务不中断,可以建立一个与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket,即在该服务子进程传入socket,从而能够提供与目标接口绑定的socket,提供支持该目标接口的服务。从而服务进程上正在执行的请求继续执行,而之后对于该目标接口的请求,由传入的socket提供给服务子进程执行。

步骤106,判断所述服务进程不存在请求后,关闭所述服务进程。

步骤108,针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

服务进程然后对于服务进程上的请求进行监听,当监听到服务进程不存在请求后,可以关闭该服务进程,服务进程不再提供服务,针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket,即由传入的socket提供给服务子进程,采用服务子进程进行处理,继续提供对于目标接口的服务,完成对于服务的热重启。

综上,服务进程依据重启指令,获取与目标接口绑定的socket,然后创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket,通过服务子进程接替服务进程提供对目标接口的服务,在判断所述服务进程不存在请求后,关闭所述服务进程,采用服务子进程调用所述绑定的socket提供针对目标接口的服务,从而实现对服务的热重启,能够在不中断服务的情况下重启服务,操作简单,无需使用备份服务器,服务升级便捷。

本发明实施例中以Thrift为了进行论述。其中,thrift是一个软件框架,可用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Go,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,and OCaml这些编程语言间无缝结合的、高效的服务。Thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。基于Thrift配置服务热重启,具体如下:

参照图2,示出了根据本发明另一个实施例的一种服务的重启方法实施例的步骤流程图,具体可以包括如下步骤:

步骤202,预先变更库代码,以使进程支持传入socket。

步骤204,封装变更的库代码,得到对应支持进程热重启的库文件。

本实施例中,服务的软件框架不只是传入socket直接使用,即通常仅支持建立socket后使用,而不能将已经建立的socket传入来使用。因此本实施例更改软件框架的库代码,使得该软件框架的进程能够支持传入socket直接使用。在变更库代码后重新封装变更的库代码,得到支持传入socket直接使用的库代码,从而能够实现通过进程传入socket来支持进程热重启的库文件。其中,所述进程包括服务进程和服务子进程。

例如,thrift server不支持传入一个socket直接使用,假设服务是使用C++来完成的,则使用的是thrift的C++库。由于thrift server不支持传入一个socket直接使用,因此可以改造thrift库代码使其支持传入socket直接使用。再将改造的库代码进行封装,得到一个能够支持热重启库文件。本实施例中,热重启可保持端口能持续不断的提供服务,且进程能够响应特定信号然后执行热重启过程。

步骤206,依据所述支持进程热重启的库文件创建服务进程。

步骤208,依据接口请求创建与目标接口绑定的socket。

在变更库代码重新封装库文件后,基于该库文件创建服务进程,服务进程能够提供接口服务,因此对于目标接口的接口请求,服务进程可以创建socket,将该socket与目标接口绑定。

步骤210,服务进程依据重启指令,将所述绑定的socket添加到环境变量中。

步骤212,创建与所述服务进程相同的服务子进程。

步骤214,向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

在需要重启服务时,发送重启指令,服务进程依据重启指令确定与目标接口绑定的socket,将所述绑定的socket添加到环境变量中,环境变量(environment variables)即系统、进程的相关参数。并且依据重启指令创建与所述服务进程相同的服务子进程,例如可以通过fork函数创建一个与所述服务进程相同的服务子进程。然后向该服务子进程传入所述环境变量,即向服务子进程传入所述绑定的socket,以提供针对目标接口的服务。

其中,一个进程可包括代码、数据及分配给进程的资源等,fork函数可通过系统调用创建一个与原来进程几乎完全相同的进程,从而两个进程可执行相同的操作,当然若初始参数或者传入的变量不同,两个进程也可执行不同的操作。本实施例中通过fork函数创建服务子进程,在服务子进程中装载该服务的二进制并传入包含socket的环境变量,从而使得服务子进程能够执行与服务进程相同的操作,均基于绑定的socket提供针对目标接口的服务。

例如对于thrift的服务进程,获取当前服务的socket,保存到环境变量中,然后执行fork创建一个服务子进程,在服务子进程中执行execve装载服务程序的二进制,同时传入环境变量,使得服务子进程能够执行与服务进程相同的操作,均基于绑定的socket提供针对目标接口的服务。

步骤216,判断所述服务进程是否存在请求。

在服务子进程传入包含socket的环境变量,能够提供针对目标接口的服务后,对于该目标接口的新请求由服务子进程提供服务,而服务进程已在执行的请求继续执行,直到服务进程的请求执行完毕才能关闭该服务进程,完全由服务子进程提供服务。因此要判断所述服务进程是否存在请求;若服务进程存在请求,则返回步骤216继续判断;若服务进程不存在请求,执行步骤218。

步骤218,关闭所述服务进程。

判断所述服务进程不存在请求后,关闭所述服务进程,即退出该服务进程。

步骤220,在所述目标接口处,判断是否存在所述绑定的socket。

对于接口请求,确定接口请求对应目标接口,在目标接口处先判断是否存在该目标接口绑定给的socket,如果存在则使用该socket对应服务进程提供服务;若不存在则执行步骤208创建与目标接口绑定的socket。

因此对于服务子进程通过传入环境变量以传入socket,则可以在目标接口处判断所述服务子进程的环境变量中是否存在所述绑定的socket;若服务子进程的环境变量中存在所述绑定的socket,则执行步骤222;若不存在与该目标接口绑定的socket,则执行步骤208创建与目标接口绑定的socket。

步骤222,采用所述服务子进程调用所述绑定的socket。

若服务子进程的环境变量中存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket,即由服务子进程采用绑定的socket提供目标接口的服务。

可见,在服务进程没有请求后退出该服务进程,由服务子进程提供目标接口的服务,实现对于服务的热重启。因此可在执行入口(如目标接口)处判断环境变量中是否有socket,如果有则直接使用这个socket进行服务,从而服务子进程在执行时,进入入口就能使用父进程传入的socket,实现了服务的不间断。

从而实现了thrift服务的热重启,保证服务在更新的时候也不会中断服务,简化了部署与运维thrift服务。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

在上述实施例的基础上,本实施例还提供了一种服务的重启装置。

参照图3,示出了根据本发明一个实施例的一种服务的重启装置实施例的结构框图,具体可以包括如下模块:

获取模块302,用于服务进程依据重启指令,获取与目标接口绑定的套接字socket。

传入模块304,用于创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket。

关闭模块306,用于判断所述服务进程不存在请求后,关闭所述服务进程。

服务模块308,用于针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

综上,服务进程依据重启指令,获取与目标接口绑定的socket,然后创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket,通过服务子进程接替服务进程提供对目标接口的服务,在判断所述服务进程不存在请求后,关闭所述服务进程,采用服务子进程调用所述绑定的socket提供针对目标接口的服务,从而实现对服务的热重启,能够在不中断服务的情况下重启服务,操作简单,无需使用备份服务器,服务升级便捷。

参照图4,示出了根据本发明另一个实施例的一种服务的重启装置实施例的结构框图,具体可以包括如下模块:

库变更模块310,用于预先变更库代码,以使进程支持传入socket,其中,所述进程包括服务进程和服务子进程;封装变更的库代码,得到对应支持进程热重启的库文件。

创建模块312,用于依据所述支持进程热重启的库文件创建服务进程;依据接口请求创建与目标接口绑定的socket。

获取模块302,用于服务进程依据重启指令,获取与目标接口绑定的套接字socket。

变量添加模块314,用于将所述绑定的socket添加到环境变量中。

传入模块304,用于创建与所述服务进程相同的服务子进程;向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

关闭模块306,用于判断所述服务进程不存在请求后,关闭所述服务进程。

服务模块308,用于针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

其中,所述服务模块,用于在所述目标接口处,判断所述服务子进程的环境变量中是否存在所述绑定的socket;若存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket。

可见,在服务进程没有请求后退出该服务进程,由服务子进程提供目标接口的服务,实现对于服务的热重启。因此可在执行入口(如目标接口)处判断环境变量中是否有socket,如果有则直接使用这个socket进行服务,从而服务子进程在执行时,进入入口就能使用父进程传入的socket,实现了服务的不间断。

从而实现了thrift服务的热重启,保证服务在更新的时候也不会中断服务,简化了部署与运维thrift服务。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的服务的重启方法和装置设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了A1、一种服务的重启方法,包括:

服务进程依据重启指令,获取与目标接口绑定的套接字socket;

创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket;

判断所述服务进程不存在请求后,关闭所述服务进程;

针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

A2、如A1所述的方法,其中,还包括:

预先变更库代码,以使进程支持传入socket,其中,所述进程包括服务进程和服务子进程;

封装变更的库代码,得到对应支持进程热重启的库文件。

A3、如A2所述的方法,其中,还包括:

依据所述支持进程热重启的库文件创建服务进程。

A4、如A1所述的方法,其中,获取与目标接口绑定的socket之后,还包括:

将所述绑定的socket添加到环境变量中。

A5、如A4所述的方法,其中,对所述服务子进程传入所述绑定的socket,包括:

向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

A6、如A5所述的方法,其中,针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket,包括:

在所述目标接口处,判断所述服务子进程的环境变量中是否存在所述绑定的socket;

若存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket。

A7、如A1所述的方法,其中,还包括:

依据接口请求创建与目标接口绑定的socket。

本发明实施例还提供了B8、一种服务的重启装置,包括:

获取模块,用于服务进程依据重启指令,获取与目标接口绑定的套接字socket;

传入模块,用于创建与所述服务进程相同的服务子进程,对所述服务子进程传入所述绑定的socket;

关闭模块,用于判断所述服务进程不存在请求后,关闭所述服务进程;

服务模块,用于针对所述目标接口的数据,采用所述服务子进程调用所述绑定的socket。

B9、如B8所述的装置,其中,还包括:

库变更模块,用于预先变更库代码,以使进程支持传入socket,其中,所述进程包括服务进程和服务子进程;封装变更的库代码,得到对应支持进程热重启的库文件。

B10、如B9所述的装置,其中,还包括:

创建模块,用于依据所述支持进程热重启的库文件创建服务进程。

B11、如B8所述的装置,其中,还包括:

变量添加模块,用于将所述绑定的socket添加到环境变量中。

B12、如B11所述的装置,其中,

所述传入模块,用于向所述服务子进程传入所述环境变量,以传入所述绑定的socket。

B13、如B12所述的装置,其中,

所述服务模块,用于在所述目标接口处,判断所述服务子进程的环境变量中是否存在所述绑定的socket;若存在所述绑定的socket,采用所述服务子进程调用所述绑定的socket。

B14、如B8所述的装置,其中,还包括:

创建模块,用于依据接口请求创建与目标接口绑定的socket。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1