CN113467953B - 服务状态的切换方法、装置、服务器及存储介质 - Google Patents
服务状态的切换方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN113467953B CN113467953B CN202110805415.6A CN202110805415A CN113467953B CN 113467953 B CN113467953 B CN 113467953B CN 202110805415 A CN202110805415 A CN 202110805415A CN 113467953 B CN113467953 B CN 113467953B
- Authority
- CN
- China
- Prior art keywords
- service
- instance
- service instance
- lease
- database
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例公开了一种服务状态的切换方法、装置、服务器及存储介质,属于互联网技术领域。所述方法包括:第一服务实例周期性地更新数据库中自己的租约;租约的有效期是基于租约时间戳和持续有效时长确定的;响应于检测到在持续有效时长内未接收到来自数据库的更新成功通知,将自己的服务状态从主服务实例切换为备服务实例。本申请实施例提供的技术方案通过主服务实例自动检测自己的租约是否失效,在租约失效的情况下,自动切换自己的服务状态,实现了在由于主服务实例与代理服务器失联而导致的租约失效的情况下,主服务实例自动切换自己的服务状态,而无需人工干涉,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
Description
技术领域
本申请实施例涉及互联网技术领域,特别涉及一种服务状态的切换方法、装置、服务器及存储介质。
背景技术
随着互联网技术的不断发展,针对一个服务,可以部署多个服务实例。
在相关技术中,针对目标服务部署有第一服务实例和第二服务实例。其中,第一服务实例的服务状态为目标服务的主服务实例,其可用于为服务消费者提供服务,第二服务实例的服务状态为目标服务的备服务实例,其可用于在第一服务实例运行异常的情况下,升级为目标服务的主服务实例,以替换第一服务实例继续为服务消费者提供服务。
然而,相关技术需要人工或检测进程发现主服务实例运行异常,以及通过人工进行第一服务实例和第二服务实例的主备切换,相关技术中的服务实例切换不够及时。
发明内容
本申请实施例提供了一种服务状态的切换方法、装置、服务器及存储介质,能够在由主服务实例与代理服务器失联而导致的租约失效的情况下,实现主服务实例的服务状态的自动切换,从而提高服务实例切换的及时性。技术方案如下:
根据本申请实施例的一个方面,提供了一种服务状态的切换方法,所述方法包括:
按照第一间隔时间向代理服务器发送第一心跳通知,以通过所述代理服务器将所述第一心跳通知转发至第二服务实例;其中,所述第一心跳通知用于告知所述第二服务实例第一服务实例的存活状况,所述第一服务实例为目标服务的主服务实例,所述第二服务实例为所述目标服务的备服务实例;
按照第二间隔时间向所述代理服务器发送租约更新指令,以通过所述代理服务器将所述租约更新指令转发至数据库;所述租约更新指令用于更新所述第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述第二间隔时间的设定值;
响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为备服务实例。
根据本申请实施例的一个方面,提供了一种服务状态的切换方法,所述方法包括:
按照第一间隔时间向代理服务器发送租约查询指令,以通过所述代理服务器将所述租约查询指令转发至数据库;其中,所述租约查询指令用于查询第一服务实例的租约,所述租约用于标识所述第一服务实例为目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述租约的更新周期的设定值;
接收来自所述数据库的所述第一服务实例的租约;
响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,所述主实例切换指令中包括第二服务实例的标识信息和所述第二服务实例的租约时间戳;
响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从备服务实例切换为所述主服务实例。
根据本申请实施例的一个方面,提供了一种服务状态的切换装置,所述装置包括:
心跳通知发送模块,用于按照第一间隔时间向代理服务器发送第一心跳通知,以通过所述代理服务器将所述第一心跳通知转发至第二服务实例;其中,所述第一心跳通知用于告知所述第二服务实例第一服务实例的存活状况,所述第一服务实例为目标服务的主服务实例,所述第二服务实例为所述目标服务的备服务实例;
更新指令发送模块,用于按照第二间隔时间向所述代理服务器发送租约更新指令,以通过所述代理服务器将所述租约更新指令转发至数据库;所述租约更新指令用于更新所述第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述第二间隔时间的设定值;
服务状态切换模块,用于响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为备服务实例。
根据本申请实施例的一个方面,提供了一种服务状态的切换装置,所述装置包括:
查询指令发送模块,用于按照第一间隔时间向代理服务器发送租约查询指令,以通过所述代理服务器将所述租约查询指令转发至数据库;其中,所述租约查询指令用于查询第一服务实例的租约,所述租约用于标识所述第一服务实例为目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述租约的更新周期的设定值;
信息接收模块,用于接收来自所述数据库的所述第一服务实例的租约;
切换指令发送模块,用于响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,所述主实例切换指令中包括第二服务实例的标识信息和所述第二服务实例的租约时间戳;
服务状态切换模块,用于响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从备服务实例切换为所述主服务实例。
根据本申请实施例的一个方面,提供了一种服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述服务状态的切换方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,所述可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述服务状态的切换方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该服务器执行上述服务状态的切换方法。
本申请实施例提供的技术方案可以带来如下有益效果:
通过主服务实例自动检测自己的租约是否失效,在租约失效的情况下,主服务实例自动切换自己的服务状态(即降为备服务实例),实现了在由于主服务实例与代理服务器失联而导致的租约失效的情况下,主服务实例自动切换自己的服务状态,而无需通过额外的检测进程进行监控,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的计算机***的示意图;
图2是本申请一个实施例提供的服务状态的注册方法的流程图;
图3是本申请另一个实施例提供的服务状态的注册方法的流程图;
图4是本申请一个实施例提供的服务状态的切换方法的流程图;
图5是本申请另一个实施例提供的服务状态的切换方法的流程图;
图6是本申请另一个实施例提供的服务状态的注册方法的流程图;
图7是本申请另一个实施例提供的服务状态的切换方法的流程图;
图8是本申请一个实施例提供的服务状态的切换装置的框图;
图9是本申请另一个实施例提供的服务状态的切换装置的框图;
图10是本申请另一个实施例提供的服务状态的切换装置的框图;
图11是本申请另一个实施例提供的服务状态的切换装置的框图;
图12是本申请一个实施例提供的服务器的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1示出了本申请一个实施例提供的计算机***的示意图。该计算机***可以实现成为一个服务***,该计算机***可以包括:服务提供服务器10、代理服务器20和数据库服务器30。
服务提供服务器10可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。服务提供服务器10可用于为服务消费者提供服务,诸如传输、调度、修改、检测等服务。示例性地,服务提供服务器10通过目标服务开启服务实例,以通过服务实例对服务消费者提供服务。可选地,该计算机***可以包括一个或多个服务提供服务器10。
代理服务器20可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。代理服务器20可用于为服务提供服务器10和数据库服务器30之间收发的数据、通知、指令等进行中转。例如,服务提供服务器10发送的指令可以由代理服务器20转发给数据库服务器30,数据库服务器30发送的数据也可以由代理服务器20转发给服务提供服务器10。可选地,代理服务器20还可以向服务实例发送心跳通知,以供服务实例检测与代理服务器20之间的网络状况。
数据库服务器30可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。可选地,数据库服务器30中设置有数据库,数据库可用于为服务实例提供数据存储或读取服务,该数据可以是诸如下文中的租约、服务注册信息、服务实例的标识信息、目标服务的标识信息等数据。
可选地,服务提供服务器10和代理服务器20之间可以通过网络进行通信,代理服务器20和数据库服务器30之间可以通过网络进行通信。
示例性地,在多人在线角色扮演游戏中,存在提供代码调动服务、活动数据传输服务、公会信息提供服务等单点服务实例。单点服务实例是指目标服务因同时只能通过一个服务实例对服务消费者提供服务而设置的主服务实例,在该单点服务实例出现异常的情况下,目标服务实例的备服务实例会替换该单点服务实例继续对服务消费者提供服务,以确保玩家的游戏体验。
可选地,上述服务是指一种具有特定功能的应用程序,其可以通过开启服务实例,以为其他程序提供服务,也可以为自己提供服务。其中,服务实例也可以称为服务程序、服务进程等,服务实例是服务实现特定功能的具体表现。
在本申请实施例中,上述目标服务可以是指具有任意特定功能的服务,目标服务的部署模式可以为一主一备模式,即目标服务同时开启两个服务实例,两个服务实例互为主备关系。例如,目标服务开启第一服务实例和第二服务实例,第一服务实例和第二服务实例可以被部署在不同的服务提供服务器10中,第一服务实例和第二服务实例之间的交互数据通过代理服务器20进行中转。在第一服务实例和第二服务实例被刚开启的情况下,第一服务实例和第二服务实例的服务状态未定义,需要第一服务实例和第二服务实例共同去确定两者之间的主备关系。其中,服务状态用于表示服务实例的状态,也即表示该服务实例是目标服务的主服务实例还是备服务实例。示例性地,在服务实例为目标服务的主服务实例的情况下,服务实例用于实现目标服务的特定功能以提供服务;在服务实例为目标服务的备服务实例的情况下,服务实例处于空闲状态,不提供服务,并且该服务实例通过自动检测主服务实例的状况,在主服务实例出现异常的情况下,替换主服务实例去实现目标服务的特定功能以提供服务。
下文将以目标服务开启第一服务实例和第二服务实例为例,对服务状态的注册过程、服务状态的维持过程以及服务状态的切换过程进行详细说明。
在服务状态的注册过程中,第一服务实例和第二服务实例的注册方法相同。注册结果可以如下:第一服务实例注册为目标服务的主服务实例、第二服务实例注册为目标服务的备服务实例,或者第二服务实例注册为目标服务的主服务实例、第一服务实例注册为目标服务的备服务实例。下文将以第一服务实例注册为目标服务的主服务实例、第二服务实例注册为目标服务的备服务实例为例进行说明。
在一个示例性实施例中,图2示出了本申请一个实施例提供的服务状态的注册方法的流程图,该方法各步骤的执行主体可以是上文介绍的第一服务实例,该方法可以包括如下几个步骤(201~204):
步骤201:响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过代理服务器将信息获取指令转发至数据库;其中,信息获取指令用于获取目标服务在数据库中的服务注册信息,服务注册信息用于标识目标服务的主服务实例。
在本申请实施例中,目标服务可以是指具有任意特定功能的服务,代理服务器可以是上述的代理服务器20,数据库可以是指上述数据库服务器30中的数据库,关于目标服务和代理服务器的内容,这里不再赘述。其中,该数据库可以是指一种分布式非关系型数据库,其可以进行KV(Key-Value,键值)式数据存储。示例性地,可以将该数据库设置为TCAPLUSDB数据库(一种分布式非关系型数据库)。可选地,该数据库设置有乐观锁机制,也即服务版本号检测与服务版本号自增机制,通过该乐观锁机制可以实现本申请实施例提供的服务状态的注册方法,下文将做详细说明。
可选地,该启动指令用于开启第一服务实例,在第一服务实例开启之后,开始执行服务状态注册流程,以确定自己的服务状态,该过程需要先获取数据库中目标服务的服务注册信息,以确定目标服务是否已有主服务实例。可选地,可以通过将信息获取指令发送至数据库,以获取数据库中的服务注册信息,该信息获取指令中包括有目标服务的标识信息,基于该标识信息,可以从数据库中检索到目标服务的服务注册信息。例如,以多人在线角色扮演游戏为例,基于游戏大区的标识信息和目标服务的标识信息,可以从数据库中检索出该游戏大区下的目标服务的服务注册信息。
其中,服务注册信息中包括目标服务的主服务实例的注册数据,也即若服务注册信息中不包括注册数据,则表明还没有服务实例注册为目标服务的主服务实例。可选地,在第一服务实例和第二服务实例关闭之后,目标服务在数据库中的服务注册信息、下文中的租约等数据并不会被清除。则在服务状态的注册过程中,若服务注册信息中有注册数据,该注册数据可以为目标服务在上一次服务实例关闭时留下的注册数据,下文中的租约可以为目标服务在上一次服务实例关闭时留下的租约。若服务注册信息中包括第一服务实例的标识信息,则可判断在上一次服务实例关闭时,第一服务实例为目标服务的主服务实例,若服务注册信息中包括第二服务实例的标识信息,则可判断在上一次服务关闭时,第二服务实例为目标服务的主服务实例。第一服务实例和第二服务实例的标识信息并不会在每次开启过程中被修改。
可选地,在服务数据交互的过程中,需要代理服务器进行数据的中转,也即诸如数据、通知、指令等都需要先发给代理服务器,再由代理服务器进行转发。
可选地,第一服务实例的信息获取指令的发送时间可以被设置为早于第二服务室实例的信息获取指令的发送时间,以确保第一服务实例能够注册为目标服务的主服务实例,第二服务实例注册为目标服务的备服务实例。
步骤202:接收来自数据库的服务注册信息和服务版本号,该服务版本号用于表示目标服务的主服务实例的修改次数。
可选地,服务版本号可以与目标服务的主服务实例的修改次数相同。例如,若目标服务的服务版本号为1,则表示目标服务的主服务实例的修改次数为1。当目标服务的主服务实例被修改时,目标服务的服务版本号的值会自增。例如,在第一服务实例注册为目标服务的主服务实例之前,目标服务的服务版本号的值为0,当第一服务实例成功注册为目标服务的主服务实例时,目标服务的服务版本号的值会加1更新为1。
上述服务版本号可以为数据库接收到信息获取指令时的目标服务的服务版本号。上述服务注册信息可以为数据库接收到信息获取指令时的目标服务的服务注册信息。
步骤203:响应于服务注册信息中无注册数据,或者服务注册信息中有注册数据,但服务注册信息中不包括第一服务实例的标识信息,向代理服务器发送主实例注册指令,以通过代理服务器将主实例注册指令转发至数据库,主实例注册指令中包括第一服务实例的标识信息、服务版本号和初始租约时间戳。
在服务状态的注册过程中,若检测到服务注册信息中无注册数据,则表明第二服务实例还未成功注册为目标服务的主服务实例,第一服务实例可争取注册为目标服务的主服务实例;若检测到服务注册信息中有注册数据,但服务注册信息中不包括第一服务实例的标识信息,则表明第二服务实例在上一次服务实例关闭时为目标服务的主服务实例,数据库中的租约为第二服务实例的,第一服务实例无法直接对该租约进行更新,需要争取注册为目标服务的主服务实例,重新生成第一服务实例自己的租约。
可选地,主实例注册指令用于在服务注册信息中***服务实例的标识信息,以标识该服务实例为目标服务的主服务实例。例如,若成功在目标服务的服务注册信息中***第一服务实例的标识信息,则可判断第一服务实例为目标服务的主服务实例。其中,第一服务实例的标识信息用于唯一标识第一服务实例。例如,以多人在线角色扮演游戏为例,目标服务的服务注册信息的Key(键)为游戏大区的标识信息和目标服务的标识信息,目标服务的服务注册信息的Value(值)为服务实例的标识信息,将Value更新为第一服务实例的标识信息,则可完成服务注册信息的更新。
可选地,租约时间戳可以是指第一服务实例发送主实例注册指令时的时间戳,也可以是数据库成功更新服务注册信息时的时间戳。该租约时间戳可用于表示第一服务实例为目标服务的主服务实例的起效时间,初始租约时间戳可用于表示第一服务实例成功注册为目标服务的主服务实例的起效时间。示例性地,若租约时间戳为13时12分10秒,则从13时12分10秒开始,第一服务实例可作为目标服务的主服务实例提供服务。在第一服务实例成功注册为目标服务的主服务实例之后,第一服务实例可以周期性地更新该租约时间戳,以维持自己为主服务实例的状态。
可选地,若第一服务实例检测到服务注册信息中包括自己的标识信息,则可判断数据库中还存在自己的历史租约,在这种情况下,第一服务实例可以直接修改租约中的租约时间戳,以更新租约的有效期,直接重新激活自己为目标服务的主服务实例。
步骤204:响应于接收到来自数据库的注册成功通知,将第一服务实例的服务状态设置为主服务实例,注册成功通知是数据库在接收到主实例注册指令时检测到主实例注册指令中的服务版本号与数据库中的服务版本号相同而生成的。
注册成功通知用于告知第一服务实例服务注册信息已经更新成功。在接收到注册成功通知之后,第一服务实例可以将自己的服务状态设置为目标服务的主服务实例,并可代表目标服务开始对服务消费者提供服务。
可选地,数据库通过乐观锁机制基于主实例注册请求中的服务版本号,确定服务实例是否可以注册为目标服务的主服务实例。示例性地,第一服务实例的主实例注册指令中包括第一服务版本号,当接收到该主实例注册请求时,数据库通过乐观锁机制检测到该第一服务版本号,并将其与自身当前所包括的目标服务的服务版本号进行比对,若检测到该第一服务版本号与自身当前所包括的目标服务的服务版本号相同,则执行服务注册信息更新的操作以及在更新成功过之后生成注册成功通知。可选地,若检测到该第一服务版本号与自身当前所包括的目标服务的服务版本号不相同,则表明第二服务实例抢先注册为目标服务的主服务实例,数据库不执行服务注册信息更新的操作,并生成注册失败通知。
可选地,在数据库生成注册成功通知的同时,还生成第一服务实例的租约,该租约用于标识第一服务实例为目标服务的主服务实例的有效期,具体地,该租约标识了第一服务实例为目标服务的主服务实例的起效时刻和失效时刻。示例性地,假设租约的有效期为13时12分12秒至13时13分12秒,则在13时12分12秒至13时13分12秒这个时间段内,第一服务实例都可以作为目标服务的主服务实例而运行。
其中,有效期是基于租约时间戳和持续有效时长确定的,租约时间戳可表示有效期的起效时刻,租约时间戳与持续有效时长的和值可表示有效期的失效时刻。示例性地,上述的13时12分12秒为租约时间戳,60s为持续有效时长。其中,持续有效时长为大于租约的更新周期的固定值,其可由开发者根据实际需求进行设定,也即随着租约时间戳的变更,基于持续有效时长,有效期的失效时刻也更随变更。
在一个示例中,在第一服务实例将自己的服务状态设置为为目标服务的主服务实例之后,还需向代理服务器发送服务状态通知,该服务状态通知用于告知代理服务器第一服务实例为目标服务的主服务实例。代理服务器在接收到该服务状态通知后,会将来至服务消费者的需求直接转发给第一服务实施,第一服务实进而为服务消费者提供服务。
在一个示例中,第一服务实例注册为目标服务的主服务实例的过程还可以如下:响应于服务注册信息中有注册数据,且服务注册信息中包括第一服务实例的标识信息,向代理服务器发送租约更新指令,以通过代理服务器将租约更新指令转发至数据库;响应于接收到来自数据库的更新成功通知,将第一服务实例的服务状态设置为主服务实例。
可选地,租约更新指令用于更新租约中的租约时间戳。在本申请实施例中,该租约更新指令可以用于更新第一服务实例的历史租约。该租约更新指令中包括第一服务实例的标识信息、服务版本号和租约时间戳。响应于检测到租约更新指令中的服务版本号与数据库中的服务版本号相同,数据库进行租约的更新,进而生成更新成功通知。更新成功通知用于告知第一服务实例,历史租约中的租约时间戳更新成功,第一服务实例可重新激活为目标服务的主服务实例。
综上所述,本申请实施例提供的技术方案,通过在数据库中设置乐观锁机制,第一个发送主实例注册指令的服务实例,可成功将自己的标识信息更新进服务注册信息,而剩余的服务实例由于所发送的服务版本号与更新后的服务版本号不同,无法将自己的标识信息更新进服务注册信息。且只有在成功将自己的标识信息更新进服务注册信息的情况下,才可将自己的服务状态设置为目标服务的主服务实例。因此,在服务状态的注册过程中,不存在两个服务实例同时成功将自己的标识信息更新进服务注册信息,从而不会出现双主服务实例的情况,进而确保了服务状态注册的有序性。
在一个示例性实施例中,图3示出了本申请另一个实施例提供的服务状态的注册方法的流程图,该方法各步骤的执行主体可以是上文介绍的第二服务实例,该方法可以包括如下几个步骤(301~306):
步骤301:响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过代理服务器将信息获取指令转发至数据库;其中,信息获取指令用于获取目标服务在数据库中的服务注册信息,服务注册信息用于标识目标服务的主服务实例。
在本申请实施例中,该启动指令用于开启第二服务实例。目标服务、代理服务器、数据库、信息获取指令和服务注册信息与上述实施例介绍相同,这里不再赘述。
步骤302:接收来自数据库的第一服务注册信息和服务版本号,该服务版本号用于表示目标服务的主服务实例的修改次数。
可选地,在服务状态的注册过程中,第一服务注册信息可以是指数据库在第一次接收到来自第二服务实例的信息获取指令时所存储的目标服务的服务注册信息,该服务版本号可以是指数据库在第一次接收到来自第二服务实例的信息获取指令时所存储的目标服务的服务版本号。
步骤303:响应于第一服务注册信息中无注册数据,或者第一服务注册信息中有注册数据,但第一服务注册信息中不包括第二服务实例的标识信息,向代理服务器发送主实例注册指令,以通过代理服务器将主实例注册指令发送至数据库,主实例注册指令中包括第二服务实例的标识信息、服务版本号和初始租约时间戳。
在服务状态的注册过程中,若检测到第一服务注册信息中无注册数据,则表明第一服务实例还未成功注册为目标服务的主服务实例,第二服务实例可争取注册为目标服务的主服务实例;若检测到第一服务注册信息中有注册数据,但第二服务注册信息中不包括第二服务实例的标识信息,则表明第二服务实例在上一次服务实例关闭时为目标服务的备服务实例,数据库中的租约为第一服务实例的,第二服务实例无法直接对该租约进行更新,需要争取注册为目标服务的主服务实例,重新生成第二服务实例自己的租约。
可选地,若第二服务实例检测到服务注册信息中包括自己的标识信息,则可判断数据库中还存在自己的历史租约,在这种情况下,第二服务实例可以直接修改租约中的租约时间戳,以更新租约的有效期,直接重新激活自己为目标服务的主服务实例。
第二服务实例的标识信息用于唯一标识第二服务实例,第二服务实例的初始租约时间戳可用于表示在第二服务实例成功注册为目标服务的主服务实例的情况下,租约的起效时间。
步骤304:响应于接收到来自数据库的注册失败通知,再次向代理服务器发送信息获取指令,以通过代理服务器再次将信息获取指令转发至数据库;其中,注册失败通知是数据库在接收到主实例注册指令时检测到主实例注册指令中的服务版本号与数据库中的服务版本号不同而生成的。
注册失败通知用于告知第二服务实例服务注册信息更新失败。若接收到注册失败通知,则表明第一服务实例已抢先成功注册为目标服务的主服务实例,目标服务的服务版本号自增更新,第二服务实例发送的主实例注册指令中的服务版本号与数据库中的服务版本号不匹配,使得第二服务实例更新服务注册信息失败,第二服务实例需要再次确定服务注册信息中的注册信息,以确定第一服务实例成功注册为目标服务的主服务实例。
步骤305:接收来自数据库的第二服务注册信息,第二服务注册信息是数据库更新第一服务注册信息得到的。
可选地,第二服务注册信息可以是指数据库在第二次接收到来自第二服务实例的信息获取指令时所存储的目标服务的服务注册信息,该服务注册信息中包括第一服务实例的标识信息。
步骤306:响应于第二服务注册信息中有注册数据,且第二服务注册信息中不包括第二服务实例的标识信息,将第二服务实例的服务状态设置为备服务实例。
再次确定服务注册信息中包括第一服务实例的标识信息,则可判定目标服务已具有主服务实例,可将自己设置为目标服务的备服务实例。
在一个示例中,第二服务实例注册为目标服务的备服务实例的过程还可以如下:响应于服务注册信息中有注册数据,且服务注册信息中包括第二服务实例的标识信息,向代理服务器发送租约更新指令,以通过代理服务器将租约更新指令转发至数据库;在接收到来自数据库的更新失败通知的情况下,则表明第一服务实例已抢先注册为目标服务的主服务实例,将自己设置为目标服务的备服务实例。可选地,在接收到来自数据库的更新成功通知的情况下,将自己设置为目标服务的主服务实例。
综上所述,本申请实施例提供的技术方案,通过在数据库中设置乐观锁机制,第一个发送主实例注册指令的服务实例,可成功将自己的标识信息更新进服务注册信息,而剩余的服务实例由于所发送的服务版本号与更新后的服务版本号不同,无法将自己的标识信息更新进服务注册信息。且只有在成功将自己的标识信息更新进服务注册信息的情况下,才可将自己的服务状态设置为目标服务的主服务实例。因此,在服务状态的注册过程中,不存在两个服务实例同时成功将自己的标识信息更新进服务注册信息,从而不会出现双主服务实例的情况,进而实现了服务状态注册的有序性。
在一个示例性实施例中,在服务状态的切换过程中,以第一服务实例的服务状态从主服务实例切换至备服务实例,第二服务实例的服务状态从备服务实例切换为主服务实例为例进行介绍。可选地,服务状态的维持过程也在该实施例中说明。
图4示出了本申请一个实施例提供的服务状态的切换方法的流程图,该方法各步骤的执行主体可以是目标服务的主服务实例,例如上文介绍的第一服务实例,该方法可以包括如下几个步骤(401~403):
步骤401:按照第一间隔时间向代理服务器发送第一心跳通知,以通过代理服务器将第一心跳通知转发至第二服务实例;其中,第一心跳通知用于告知第二服务实例第一服务实例的存活状况,第一服务实例为目标服务的主服务实例,第二服务实例为目标服务的备服务实例。
可选地,第一服务实例通过向第二服务实例发送心跳通知,以向第二服务实例提供存活证明。其中,第一间隔时间可以由开发者根据实际需求而设定,诸如2秒、3秒等。若第二服务实例在第二间隔时间内收到第一心跳通知,则表明第一服务实例没有出现异常(或通信网络正常)。若第二服务实例在第二间隔时间内未收到第一心跳通知,则表明第一服务实例出现异常(或通信网络异常),第二服务实例可进一步通过检测第一服务实例的租约,以确定是否需要代替第一服务实例继续提供服务,该方法下文将做详细说明。
第一服务实例、第二服务实例、代理服务器、目标服务、以及下文的租约更新指令、数据库、租约、有效期、租约时间戳和持续有效时长与上述实施例介绍相同,这里不再赘述。
步骤402:按照第二间隔时间向代理服务器发送租约更新指令,以通过代理服务器将租约更新指令转发至数据库;租约更新指令用于更新第一服务实例的租约,租约用于标识第一服务实例为目标服务的主服务实例的有效期,有效期是基于租约时间戳和持续有效时长确定的,租约时间戳用于表示有效期的起效时刻,持续有效时长为大于第二间隔时间的设定值。
可选地,第二间隔时间被设置为小于持续有效时长,以确保第一服务实例能够在租约失效之前更新租约。例如,假设持续有效时长为60秒,则第二间隔时间可以设置为10秒,也即第一服务实例每隔10秒向代理服务器发送租约更新指令。示例性地,若租约的原始租约时间戳为13时12分12秒,持续有效时长为60s,则第一代租约的有效期为13时12分12秒至13时13分12秒,10秒之后接收到第一次租约更新指令,则租约的有效期更新为13时12分22秒至13时13分22秒。
可选地,本申请允许租约在阈值次数内更新失败。例如,若上述租约在第一次更新过程中更新失败,则在13时12分22秒至13时12分32秒之间,租约的有效期还是为13时12分12秒至13时13分12秒,但在这个时间段,租约不会失效。若上述租约在第二次更新过程中更新成功,则在13时12分32秒至13时12分42之间,租约的有效期更新为13时12分32秒至13时13分32秒。若在第一次至第六次的更新过程中,租约都更新失败了,则可判断第一服务实例的租约失效,也即在13时12分12秒至13时13分12秒内(包括两端点时间),租约未更新,则租约将在过13时13分12秒时失效。
步骤403:响应于租约在持续有效时长内未更新,将第一服务实例的服务状态从主服务实例切换为备服务实例。
若检测到租约在持续有效时长内未更新,则表明租约的租约时间戳未及时更新,从而造成租约的失效时刻未更新,进而导致租约失效。
可选地,至少有如下二种情况可以导致租约时间戳在持续有效时长内未更新:第一服务实例出现异常(如阻塞、崩溃、宕机等),未能及时在持续有效时长内发出租约更新指令;第一服务实例与代理服务器之间的网络出现异常,也即第一服务实例与代理服务器未能及时在持续有效时长内恢复连接,以及时更新租约时间戳。
在第一服务实例出现异常的情况下,需要额外的检测进程拉起第一服务实例(第一服务实例异常无法自行拉起)。例如,检测进程检测到第一服务实例阻塞超过持续有效时长,直接拉起第一服务实例,第一服务实例停止对服务消费者提供服务。
在第一服务实例与代理服务器未能及时在持续有效时长内恢复连接的情况下,第一服务实例可自动将自己的服务状态从主服务实例切换为备服务实例。如此可在第一服务实例所对应的网络异常的情况下,实现服务状态的自动切换。
在一个示例中,租约在持续有效时长内未更新的检测方法可以如下:响应于在持续有效时长内未接收到来自数据库的更新成功通知,将第一服务实例的服务状态从主服务实例切换为备服务实例;其中,更新成功通知是数据库响应于租约更新成功生成的。
示例性地,获取检测时间戳,该检测时间戳是指基于更新成功通知的接收时刻进行更新的时间戳且检测时间戳的初始值为第一服务实例第一次接收到更新成功通知时的时间戳;响应于检测时间戳与服务器时间之间的差值大于持续有效时长,将第一服务实例的服务状态从主服务实例切换为备服务实例。
在第一服务实例的运行过程中,第一服务实例每接收到一次更新成功通知,会将接收到该更新成功通知时的时间戳更新进检测时间戳,基于该检测时间戳和服务器时间之间的差值确定未收到成功更新通知的时长。例如,第一次收到更新成功通知时的时间戳为13时12分12秒,若在13时13分12秒还未收到其他更新成功通知,则可判断未收到成功更新通知的时长为60秒,假设续有效时长未60秒,则可判断在持续有效时长内未接收到更新成功通知,从而可判断租约在持续有效时长内未更新。
在另一个示例中,租约在持续有效时长内未更新的检测方法又可以如下:响应于在第一阈值时间内未接收到来自代理服务器的第二心跳通知,将第一服务实例的服务状态从主服务实例切换为备服务实例;其中,第二心跳通知是代理服务器按照第三间隔时间发送的,第一阈值时间大于第三间隔时间和持续有效时长的和值。
第二心跳通知可用于第一服务实例检测自己与代理服务器之间的网络连接状况,第一心跳通知的发送周期(也即第三间隔时间)可以根据实际需求进行适应性设置和调整。若在第一阈值时间内未接收到来自代理服务器的第二心跳通知,则表明第一服务实例与代理服务器失联之后,还失联了持续有效时长(或者大于这个时间),在这种情况下,第一服务实例的租约更新指令是无法到达数据库的,也即租约在持续有效时长内未更新。
在另一个示例中,租约在持续有效时长内未更新的检测方法还可以如下:根据租约更新指令的发送次数来检测租约是否在持续有效时长内未更新。例如,若第一服务实例周期性连续发送了A次租约更新指令,但都未收到对应的更新成功通知,在A等于上述阈值次数的情况下,则可判断租约在持续有效时长内未更新。
可选地,由于是在检测到租约在持续有效时长内未更新的情况下,进行第一服务实例的服务状态的切换,如此可以允许第一服务实例出现短暂的阻塞、第一服务实例与代理服务器短暂的失联等,只要在持续有效时长内及时恢复,以及时完成租约的更新,即可确保第一服务实例为主服务实例的状态,该前提是不影响服务消费者的需求。
可选地,在第一服务实例把自己的服务状态从主服务实例切换为备服务实例之后,第一服务实例还需要响应于接收到来自终端的数据清除指令,清除第一服务实例对应的服务数据;以及响应于接收到来自终端的重新启动指令,重新启动第一服务实例,以及将第一服务实例的服务状态设置为备服务实例。如此,在后续的过程中,第一服务实例可以作为已经成为目标服务的主服务实例的第二服务实例的备用服务实例运行,以防止第二服务实例出现异常。
综上所述,本申请实施例提供的技术方案,通过主服务实例自动检测自己的租约是否失效,在租约失效的情况下,主服务实例自动切换自己的服务状态(即降为备服务实例),实现了在由于主服务实例与代理服务器失联而导致的租约失效的情况下,主服务实例自动切换自己的服务状态,而无需通过额外的检测进程进行监控,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
另外,由于是在检测到租约在持续有效时长内未更新的情况下,进行第一服务实例的服务状态的切换,如此在不影响服务消费者的需求的前提下,可以允许第一服务实例与代理服务器短暂的失联,只要在持续有效时长内及时恢复连接,以及时完成租约的更新,即可确保第一服务实例为主服务实例的服务状态,提高了服务提供的持续性。
图5示出了本申请另一个实施例提供的服务状态的切换方法的流程图,该方法各步骤的执行主体可以是目标服务的备服务实例,例如上文介绍的第二服务实例,该方法可以包括如下几个步骤(501~504):
步骤501:按照第一间隔时间向代理服务器发送租约查询指令,以通过代理服务器将租约查询指令转发至数据库。
其中,租约查询指令用于查询第一服务实例的租约,租约用于标识第一服务实例为目标服务的主服务实例的有效期,有效期是基于租约时间戳和持续有效时长确定的,租约时间戳用于表示有效期的起效时刻,持续有效时长为大于租约的更新周期的设定值。
在本申请实施例中,该第一间隔时间可以由开发者根据实际需求进行适应性设置,以保证第二服务实例能够及时检测到第一服务实例的租约已失效。例如,该第一间隔时间可以与第一服务实例发送租约更新指令的间隔时间相同,租约查询指令的发送时间稍晚于第一服务实例的租约更新指令的发送时间,以便实时监控第一服务实例的租约的更新情况。代理服务器、数据库、租约、目标服务、有效期、租约时间戳和持续有效时长与上述实施例介绍相同,这里不再赘述。
可选地,第二服务实例还会接收到来自第一服务实例的第一心跳通知,该第一心跳通知用于告知第二服务实例第一服务实例的存活状况。如此还可以在检测到在阈值时间内未接收到第一心跳通知的情况下,再按照第一间隔时间向代理服务器发送租约查询指令,以确定第一服务实例的租约的更新情况,从而可以减少租约查询指令的发送次数,降低第二服务实例的数据处理压力。
步骤502:接收来自数据库的第一服务实例的租约。
可选地,该租约可以是数据库接收到租约查询请求时的租约。
步骤503:响应于第一服务实例的租约在持续有效时长内未更新,向代理服务器发送主实例切换指令,以通过代理服务器将主实例切换指令转发至数据库,主实例切换指令中包括第二服务实例的标识信息和第二服务实例的租约时间戳。
若检测到第一服务实例的租约在持续有效时长内未更新,则可判断出第一服务实例的租约失效,从而判断出第一服务实例出现异常,或第一服务实例与代理服务器之间的网络出现异常等,进而可判定第一服务实例无法正常为服务消费者提供服务,在这种情况下,第二服务实例需要替换第一服务实例继续为服务消费者提供服务,第二服务实例可直接对目标服务的服务注册信息进行修改。例如,通过发送主实例切换指令,以完成服务注册信息的修改。与注册过程不同的是,主实例切换指令可用于将服务注册信息中的第一服务实例的标识信息更换为第二服务实例的标识信息,而无需通过数据库的乐观锁机制的检测。例如,以多人在线角色扮演游戏为例,目标服务的服务注册信息的Key为游戏大区的标识信息和目标服务的标识信息,目标服务的服务注册信息的Value为服务实例的标识信息,对于第一服务实例和第二服务实例,Key是一样的,直接进行Value的更新即可。
在一个示例中,第一服务实例的租约在持续有效时长内未更新的检测方法可以如下:响应于第一服务实例的租约中的租约时间戳与服务器时间之间的差值大于持续有效时长,向代理服务器发送主实例切换指令,以通过代理服务器将主实例切换指令转发至所述数据库。
第二服务实例可以根据第一服务实例的租约中的租约时间戳确定出第一服务实例的租约的更新情况。例如,将第一服务实例的租约中的租约时间戳与第二服务实例收到该租约时的服务器时间进行比对,若两者之间的差值小于或等于持续有效时长,则可判定该租约还未失效;若两者之间的差值大于持续有效时长,则可判定该租约已失效。可选地,还可以基于由租约时间戳和持续有效时长的和值确定的租约的失效时刻,来判定该租约是否失效。例如,若该失效时刻大于或等于第二服务实例收到该租约时的服务器时间,则可判定该租约还未失效;若该失效时刻小于第二服务实例收到该租约时的服务器时间,则可判定该租约已失效。可选地,第二服务实例还可获取数据库接收到租约查询指令时的服务器时间,以将第一服务实例的租约中的租约时间戳与数据库接收到租约查询指令时的服务器时间进行比对,以提高判断的准确性。
可选地,数据库在接收到主实例切换指令之后,可以基于第二服务实例的租约时间戳生成第二服务实例的租约,以替换第一服务实例的租约。
步骤504:响应于接收到来自数据库的切换成功通知,将第二服务实例的服务状态从备服务实例切换为主服务实例。
切换成功通知是在数据库将服务注册信息中的第一服务实例的标识信息成功切换为第二服务实例的标识信息时生成的,切换成功通知的生成则表明第二服务实例已成功替换了第一服务实例,第二服务实例可以以目标服务的主服务实例对服务消费者提供服务,第二服务实例将自己的服务状态从备服务实例切换为主服务实例,以正式运行提供服务。
可选地,第二服务实例还会接收到来自代理服务器的第二心跳通知,第二心跳通知用于检测第二服务实例与代理服务之间的网络连接状况。在第二服务实例检测到与代理服务器之间的网络正常的情况下,响应于接收到来自数据库的切换成功通知,将第二服务实例的服务状态从备服务实例切换为主服务实例。
可选地,在第二服务实例将自己的服务状态从备服务实例切换为主服务实例之后,还可以向代理服务器发送服务状态通知,该服务状态通知用于告知代理服务器第二服务实例切换为目标服务的主服务实例;以及调用警告组件向代理服务器发送警告通知,以通过代理服务器将警告通知转发至终端,警告通知用于告知开发者第一服务实例运行异常。开发者基于警告通知对第一服务实例中的无效服务数据进行清除。
综上所述,本申请实施例提供的技术方案,通过备服务实例自动检测主服务实例的租约是否失效,在主服务实例的租约失效的情况下,备服务实例自动切换自己的服务状态(即升级为主服务实例),实现了在主服务实例出现异常(如主服务实例阻塞、崩溃、宕机,或主服务实例与代理服务器失联)的情况下,备服务实例自动切换自己的服务状态,而无需依靠于人工或检测进程进行通知,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
另外,由于是在检测到主服务实例的租约在持续有效时长内未更新的情况下,进行备服务实例的服务状态的切换,可明确主服务实例无法继续提供服务,如此可以避免备服务实例错误地进行服务状态的切换,提高了服务状态切换的准确性。
图6示出了本申请另一个实施例提供的服务状态的注册方法的流程图,该方法可以应用于上文介绍的服务***中,该方法可以包括如下内容:
第一服务实例601向代理服务器603发送信息获取指令,以通过代理服务器603将信息获取指令转发至数据库,以获取数据库中目标服务的服务注册信息和服务版本号。其中,服务注册信息用于标识目标服务的主服务实例,服务版本号用于表示目标服务的主服务实例的修改次数。在设定阈值时间(如2秒)后,第二服务实例602向代理服务器603发送信息获取指令,以通过代理服务器603将信息获取指令转发至数据库,以获取数据库中目标服务的服务注册信息和服务版本号。
代理服务器603将目标服务的服务注册信息和服务版本号发送给第一服务实例601。由于第二服务实例602是在设定阈值时间之后才向代理服务器603发送信息获取指令,则第二服务实例602晚于第一服务实例601接收到目标服务的服务注册信息和服务版本号。
第一服务实例601检测到服务注册信息中无注册数据,判断出目标服务还没有主服务实例,则向代理服务器603发送主实例注册指令,以通过代理服务器603将主实例注册指令转发至数据库,实现服务注册信息的更新,也即将第一服务实例601的标识信息***服务注册信息中。在第一服务实例601的标识信息被成功***服务注册信息之后,目标服务的服务版本号自增更新,生成更新后的服务版本号。同时,数据库中生成第一服务实例的租约,该租约用于表示第一服务实例601为目标服务的主服务实例的有效期,有效期的起效时刻为主实例注册指令中的租约时间戳,该租约时间戳可以为第一服务实例601发送主实例注册指令时的时间戳。
可选地,在第一服务实例601检测到服务注册信息中有注册数据,但不包括自己的标识信息的情况下,也进行主实例注册指令发送步骤。在第一服务实例601检测到服务注册信息中有注册数据,且包括自己的标识信息的情况下,也即代表数据库中还有服务实例上一次关闭时自己作为主服务实例运行而生成的租约,则可直接发送租约更新指令,以尝试更新租约中的租约时间戳,重新激活自己为目标服务的主服务实例。
过了设置阈值时间后,第二服务实例602也接收到服务注册信息和服务版本号。第二服务实例602检测到服务注册信息中无注册数据,判断出目标服务还没有主服务实例,则向代理服务器603发送主实例注册指令,以通过代理服务器603将主实例注册指令转发至数据库。由于在这个过程中第一服务实例601抢先注册为目标服务的主服务实例,生成更新后的服务版本号,数据库基于乐观锁机制检测到来自第二服务实例602的主实例注册指令中的服务版本号与更新后的服务版本号不同,则生成注册失败通知,并由代理服务器603转发至第二服务实例602。
可选地,在第二服务实例602检测到服务注册信息中有注册数据,但不包括自己的标识信息的情况下,也进行主实例注册指令发送步骤。在第二服务实例602检测到服务注册信息中有注册数据,且包括自己的标识信息的情况下,可发送租约更新指令,以尝试更新数据库中的租约,重新激活自己为目标服务的主服务实例。
第一服务实例601在接收到来自数据库的服务注册成功通知之后,将自己的服务状态设置为目标服务的主服务实例,可以开始为服务消费者提供服务。同时,第一服务实例601向代理服务器603发送服务状态通知,以告知服务代理服务器603自己注册为目标服务的主服务实例;第一服务实例601周期性地向代理服务器603发送租约更新指令,以通过代理服务器603将租约更新指令转发至数据库,以及时完成租约的更新;第一服务实例601周期性地向代理服务器603发送心跳通知,以通过代理服务器603将该心跳通知转发至第二服务实例602,以告知第二服务实例602自己的存活状况。在运行的过程中,第一服务实例601自动检测自己的租约是否失效,若租约未失效,则维持自己的服务状态。
第二服务实例602在接收到注册失败通知后,再次向代理服务器603发送信息获取请求,以确定第一服务时刻是否成功注册为目标服务的主服务实例,响应于检测到服务注册信息中没有自己的标识信息(有第一服务实例的标识信息),将自己的服务状态设置为目标服务的备服务实例。同时,周期性地向代理服务器603发送租约查询指令,以通过代理服务器603将该租约查询指令转发至数据库,以从数据库中获取第一服务实例601的租约,自动检测该租约是否失效,若租约未失效,则维持自己的服务状态。
参考图7,在第一服务实例601成为目标服务的主服务实例,第二服务实例602成为目标服务的备服务实例之后,服务状态的切换过程可以如下:
第一服务实例601周期性地向代理服务器603发送租约更新指令,以通过代理服务器603将租约更新指令转发至数据库,以更新数据库中第一服务实例601的租约。
第一服务实例601周期性地向代理服务器603发送心跳通知,以通过代理服务器603将心跳通知转发至第二服务实例602,以通知第二服务实例602自己的存活状况。可选地,第一服务实例601在持续有效时长内接收到来自数据库的更新成功通知,继续对服务消费者提供服务。
第二服务实例602周期性地向代理服务器603发送租约查询指令,以通过代理服务器603将租约查询指令转发至数据库,以获取第一服务实例601的租约。然后检测第一服务实例601的租约是否失效,响应于检测到第一服务实例601的租约在持续有效时长内更新,继续保持自己的备服务实例的状态。
第一服务实例601在持续有效时长内未接收到来自数据库的更新成功通知,将自己的服务状态从主服务实例切换为备服务实例,停止对服务消费者提供服务。
第二服务实例602检测到第一服务实例601的租约在持续有效时长内未更新,且自己与代理服务器未失联,向代理服务器603发送主实例切换指令,以通过代理服务器603将主实例切换指令转发至数据库,以更新注册服务信息中的标识信息,将其修改为自己的标识信息,以及生成第二服务实例602的租约。
第二服务实例602接收到来自数据库的切换成功通知,将自己的服务状态从备服务实例切换为主服务实例,开始替换第一服务实例601继续对服务消费者提供服务。
可选地,第二服务实例602还需向代理服务器603发送警告通知,以通过代理服务器603将警告通知转发至终端,以通知开发者第一服务实例601出现异常。可选地,开发者发现第一服务实例601出现异常,对其进行人工修复。例如,在第一服务实例601与代理服务器603失联的情况下,开发者可人工进行第一服务实例601与代理服务器603的重连接。
第一服务实例601接收来自终端的数据清除指令之后,清除自己内存中无效服务数据。第一服务实例601接收来自终端的重新启动指令之后,重新启动自己,并将自己的服务状态设置为备服务实例。
在一个示例中,目标服务的部署模式还可以为一主多备模式,备服务实例的数量可以根据实际需求而适应性地设置。在主服务实例异常的情况下,多个备服务实例采用本申请的服务状态的注册方法来确定出主服务实例。
综上所述,本申请实施例提供的技术方案,通过主服务实例自动检测自己的租约是否失效,在租约失效的情况下,主服务实例自动切换自己的服务状态(即降为备服务实例),实现了在由于主服务实例与代理服务器失联而导致的租约失效的情况下,主服务实例自动切换自己的服务状态,而无需通过额外的检测进程进行监控,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
另外,通过备服务实例自动检测主服务实例的租约是否失效,在主服务实例的租约失效的情况下,备服务实例自动切换自己的服务状态(即升级为主服务实例),实现了在主服务实例出现异常(如主服务实例阻塞、崩溃、宕机,或主服务实例与代理服务器失联)的情况下,备服务实例自动切换自己的服务状态,而无需依靠于人工或检测进程进行通知,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图8示出了本申请一个实施例提供的服务状态的切换装置的框图。该装置具有实现上述方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是上述的服务提供服务器10,也可以设置在上述的服务提供服务器10中。该装置800可以包括:心跳通知发送模块801、更新指令发送模块802和服务状态切换模块803。
心跳通知发送模块801,用于按照第一间隔时间向代理服务器发送第一心跳通知,以通过所述代理服务器将所述第一心跳通知转发至第二服务实例;其中,所述第一心跳通知用于告知所述第二服务实例第一服务实例的存活状况,所述第一服务实例为目标服务的主服务实例,所述第二服务实例为所述目标服务的备服务实例。
更新指令发送模块802,用于按照第二间隔时间向所述代理服务器发送租约更新指令,以通过所述代理服务器将所述租约更新指令转发至数据库;所述租约更新指令用于更新所述第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述第二间隔时间的设定值。
服务状态切换模块803,用于响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为备服务实例。
在一个示例性实施例中,所述服务状态切换模块803用于响应于在所述持续有效时长内未接收到来自所述数据库的更新成功通知,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例;其中,所述更新成功通知是所述数据库响应于所述租约更新成功生成的。
在一个示例性实施例中,所述服务状态切换模块803,还用于:
获取检测时间戳,所述检测时间戳是指基于所述更新成功通知的接收时刻进行更新的时间戳且所述检测时间戳的初始值为所述第一服务实例第一次接收到所述更新成功通知时的时间戳;
响应于所述检测时间戳与服务器时间之间的差值大于所述持续有效时长,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例。
在一个示例性实施例中,所述服务状态切换模块803还用于响应于在第一阈值时间内未接收到来自所述代理服务器的第二心跳通知,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例;其中,所述第二心跳通知是所述代理服务器按照第三间隔时间发送的,所述第一阈值时间大于所述第三间隔时间和所述持续有效时长的和值。
在一个示例性实施例中,如图9所示,所述装置800还包括:服务数据清除模块804和服务状态设置模块805。
服务数据清除模块804,用于响应于接收到来自终端的数据清除指令,清除所述第一服务实例对应的服务数据。
服务状态设置模块805,用于响应于接收到来自所述终端的重新启动指令,重新启动所述第一服务实例,以及将所述第一服务实例的服务状态设置为所述备服务实例。
在一个示例性实施例中,如图9所示,所述装置800还包括:信息指令发送模块806、信息获取模块807和注册指令发送模块808。
信息指令发送模块806,用于响应于接收到来自所述目标服务的启动指令,向所述代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至所述数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例。
信息获取模块807,用于接收来自所述数据库的所述服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数。
注册指令发送模块808,用于响应于所述服务注册信息中无注册数据,或者所述服务注册信息中有注册数据,但所述服务注册信息中不包括所述第一服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第一服务实例的标识信息、所述服务版本号和初始租约时间戳。
所述服务状态设置模块805,还用于响应于接收到来自所述数据库的注册成功通知,将所述第一服务实例的服务状态设置为所述主服务实例,所述注册成功通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号相同而生成的。
在一个示例性实施例中,所述更新指令发送模块802,还用于响应于所述服务注册信息中有注册数据,且所述服务注册信息中包括所述第一服务实例的标识信息,向所述代理服务器发送所述租约更新指令,以通过所述代理服务器将所述租约更新指令转发至所述数据库。
所述服务状态设置模块805,还用于响应于接收到来自所述数据库的更新成功通知,将所述第一服务实例的服务状态设置为所述主服务实例。
在一个示例性实施例中,如图9所示,所述装置800还包括:状态通知发送模块809。
状态通知发送模块809,用于向所述代理服务器发送服务状态通知,所述服务状态通知用于告知所述代理服务器所述第一服务实例为所述目标服务的主服务实例。
综上所述,本申请实施例提供的技术方案,通过主服务实例自动检测自己的租约是否失效,在租约失效的情况下,主服务实例自动切换自己的服务状态(即降为备服务实例),实现了在由于主服务实例与代理服务器失联而导致的租约失效的情况下,主服务实例自动切换自己的服务状态,而无需通过额外的检测进程进行监控,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
图10示出了本申请另一个实施例提供的服务状态的切换装置的框图。该装置具有实现上述方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是上述的服务提供服务器10,也可以设置在上述的服务提供服务器10中。该装置1000可以包括:查询指令发送模块1001、信息接收模块1002、切换指令发送模块1003和服务状态切换模块1004。
查询指令发送模块1001,用于按照第一间隔时间向代理服务器发送租约查询指令,以通过所述代理服务器将所述租约查询指令转发至数据库;其中,所述租约查询指令用于查询第一服务实例的租约,所述租约用于标识所述第一服务实例为目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述租约的更新周期的设定值。
信息接收模块1002,用于接收来自所述数据库的所述第一服务实例的租约。
切换指令发送模块1003,用于响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,所述主实例切换指令中包括第二服务实例的标识信息和所述第二服务实例的租约时间戳。
服务状态切换模块1004,用于响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从备服务实例切换为所述主服务实例。
在一个示例性实施例中,所述切换指令发送模块1003用于响应于所述第一服务实例的租约中的租约时间戳与服务器时间之间的差值大于所述持续有效时长,向所述代理服务器发送所述主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库。
在一个示例性实施例中,如图11所示,所述装置1000还包括:状态通知发送模块1005和警告通知发送模块1006。
状态通知发送模块1005,用于向所述代理服务器发送服务状态通知,所述服务状态通知用于告知所述代理服务器所述第二服务实例切换为所述目标服务的主服务实例。
警告通知发送模块1006,用于调用警告组件向所述代理服务器发送警告通知,以通过所述代理服务器将所述警告通知转发至终端,所述警告通知用于告知开发者所述第一服务实例运行异常。
在一个示例性实施例中,如图11所示,所述装置1000还包括:心跳通知接收模块1007。
心跳通知接收模块1007,用于接收来自所述第一服务实例的第一心跳通知,所述第一心跳通知用于告知所述第二服务实例所述第一服务实例的存活状况。
心跳通知接收模块1007,还用于接收来自所述代理服务器的第二心跳通知,所述第二心跳用于检测所述第二服务实例与所述代理服务之间的网络连接状况。
在一个示例性实施例中,如图11所示,所述装置1000还包括:信息指令发送模块1008、注册指令发送模块1009和服务状态设置模块1010。
信息指令发送模块1008,用于响应于接收到来自所述目标服务的启动指令,向所述代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至所述数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例。
所述信息接收模块1002,还用于接收来自所述数据库的第一服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数。
注册指令发送模块1009,用于响应于所述第一服务注册信息中无注册数据,或者所述第一服务注册信息中有注册数据,但所述第一服务注册信息中不包括所述第二服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第二服务实例的标识信息、所述服务版本号和初始租约时间戳。
信息指令发送模块1008,还用于响应于接收到来自所述数据库的注册失败通知,再次向所述代理服务器发送所述信息获取指令,以通过所述代理服务器再次将所述信息获取指令转发至所述数据库;其中,所述注册失败通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号不同而生成的。
所述信息接收模块1002,还用于接收来自所述数据库的第二服务注册信息,所述第二服务注册信息是所述数据库更新所述第一服务注册信息得到的。
服务状态设置模块1010,用于响应于所述第二服务注册信息中有注册数据,且所述第二服务注册信息中不包括所述第二服务实例的标识信息,将所述第二服务实例的服务状态设置为所述备服务实例。
综上所述,本申请实施例提供的技术方案,通过备服务实例自动检测主服务实例的租约是否失效,在主服务实例的租约失效的情况下,备服务实例自动切换自己的服务状态(即升级为主服务实例),实现了在主服务实例出现异常(如主服务实例阻塞、崩溃、宕机,或主服务实例与代理服务器失联)的情况下,备服务实例自动切换自己的服务状态,而无需依靠于人工或检测进程进行通知,可降低服务状态的切换周期,从而提高了服务状态切换的及时性,进而提高了服务实例切换的及时性。
另外,由于切换过程无需人工干涉以进行服务状态的切换,可避免人为的错误,以及降低服务状态切换的周期,从而提高了服务状态切换的可靠性和及时性,进而提高了服务实例切换的可靠性和及时性。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内容结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图12示出了本申请一个实施例提供的服务器的结构框图。该服务器可以是上述的服务提供服务器10,其可用于实施上述实施例中提供的服务状态的切换方法。具体来讲:
该服务器1200包括中央处理单元(如CPU(Central Processing Unit,中央处理器)、GPU(Graphics Processing Unit,图形处理器)和FPGA(Field Programmable GateArray,现场可编程逻辑门阵列)等)1201、包括RAM(Random-Access Memory,随机存取存储器)1202和ROM(Read-Only Memory,只读存储器)1203的***存储器1204,以及连接***存储器1204和中央处理单元1201的***总线1205。该服务器1200还包括帮助服务器内的各个器件之间传输信息的基本输入/输出***(Input Output System,I/O***)1206,和用于存储操作***1213、应用程序1214和其他程序模块1215的大容量存储设备1207。
该基本输入/输出***1206包括有用于显示信息的显示器1208和用于用户输入信息的诸如鼠标、键盘之类的输入设备1209。其中,该显示器1208和输入设备1209都通过连接到***总线1205的输入输出控制器1210连接到中央处理单元1201。该基本输入/输出***1206还可以包括输入输出控制器1210以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1210还提供输出到显示屏、打印机或其他类型的输出设备。
该大容量存储设备1207通过连接到***总线1205的大容量存储控制器(未示出)连接到中央处理单元1201。该大容量存储设备1207及其相关联的计算机可读介质为服务器1200提供非易失性存储。也就是说,该大容量存储设备1207可以包括诸如硬盘或者CD-ROM(Compact Disc Read-Only Memory,只读光盘)驱动器之类的计算机可读介质(未示出)。
不失一般性,该计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦写可编程只读存储器)、闪存或其他固态存储技术,CD-ROM、DVD(Digital Video Disc,高密度数字视频光盘)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知该计算机存储介质不局限于上述几种。上述的***存储器1204和大容量存储设备1207可以统称为存储器。
根据本申请实施例,该服务器1200还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器1200可以通过连接在该***总线1205上的网络接口单元1211连接到网络1212,或者说,也可以使用网络接口单元1211来连接到其他类型的网络或远程计算机***(未示出)。
该存储器还包括计算机程序,该计算机程序存储于存储器中,且经配置以由一个或者一个以上处理器执行,以实现上述服务状态的切换方法。
在一个示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集在被服务器的处理器执行时以实现上述服务状态的切换方法。
可选地,该计算机可读存储介质可以包括:ROM(Read-Only Memory,只读存储器)、RAM(Random-Access Memory,随机存储器)、SSD(Solid State Drives,固态硬盘)或光盘等。其中,随机存取记忆体可以包括ReRAM(Resistance Random Access Memory,电阻式随机存取记忆体)和DRAM(Dynamic Random Access Memory,动态随机存取存储器)。
在一个示例性实施例中,还提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中。服务器的处理器从所述计算机可读存储介质中读取所述计算机指令,所述服务器的处理器执行所述计算机指令,使得所述服务器执行上述服务状态的切换方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,本文中描述的步骤编号,仅示例性示出了步骤间的一种可能的执行先后顺序,在一些其它实施例中,上述步骤也可以不按照编号顺序来执行,如两个不同编号的步骤同时执行,或者两个不同编号的步骤按照与图示相反的顺序执行,本申请实施例对此不作限定。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种服务状态的切换方法,其特征在于,所述方法包括:
响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例;
接收来自所述数据库的所述服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数;
响应于所述服务注册信息中无注册数据,或者所述服务注册信息中有注册数据,但所述服务注册信息中不包括第一服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第一服务实例的标识信息、所述服务版本号和初始租约时间戳;
响应于接收到来自所述数据库的注册成功通知,将所述第一服务实例的服务状态设置为所述主服务实例,所述注册成功通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号相同而生成的;
按照第一间隔时间向所述代理服务器发送第一心跳通知,以通过所述代理服务器将所述第一心跳通知转发至第二服务实例;其中,所述第一心跳通知用于告知所述第二服务实例所述第一服务实例的存活状况,所述第二服务实例为所述目标服务的备服务实例;
按照第二间隔时间向所述代理服务器发送租约更新指令,以通过所述代理服务器将所述租约更新指令转发至所述数据库;所述租约更新指令用于更新所述第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述第二间隔时间的设定值;
响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例。
2.根据权利要求1所述的方法,其特征在于,所述响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例,包括:
响应于在所述持续有效时长内未接收到来自所述数据库的更新成功通知,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例;其中,所述更新成功通知是所述数据库响应于所述租约更新成功生成的。
3.根据权利要求2所述的方法,其特征在于,所述响应于在所述持续有效时长内未接收到来自所述数据库的更新成功通知,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例,包括:
获取检测时间戳,所述检测时间戳是指基于所述更新成功通知的接收时刻进行更新的时间戳且所述检测时间戳的初始值为所述第一服务实例第一次接收到所述更新成功通知时的时间戳;
响应于所述检测时间戳与服务器时间之间的差值大于所述持续有效时长,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例。
4.根据权利要求1至3任一所述的方法,其特征在于,所述响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例,包括:
响应于在第一阈值时间内未接收到来自所述代理服务器的第二心跳通知,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例;其中,所述第二心跳通知是所述代理服务器按照第三间隔时间发送的,所述第一阈值时间大于所述第三间隔时间和所述持续有效时长的和值。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述服务注册信息中有注册数据,且所述服务注册信息中包括所述第一服务实例的标识信息,向所述代理服务器发送所述租约更新指令,以通过所述代理服务器将所述租约更新指令转发至所述数据库;
响应于接收到来自所述数据库的更新成功通知,将所述第一服务实例的服务状态设置为所述主服务实例。
6.一种服务状态的切换方法,其特征在于,所述方法包括:
响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例;
接收来自所述数据库的第一服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数;
响应于所述第一服务注册信息中无注册数据,或者所述第一服务注册信息中有注册数据,但所述第一服务注册信息中不包括第二服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第二服务实例的标识信息、所述服务版本号和初始租约时间戳;
响应于接收到来自所述数据库的注册失败通知,再次向所述代理服务器发送所述信息获取指令,以通过所述代理服务器再次将所述信息获取指令转发至所述数据库;其中,所述注册失败通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号不同而生成的;
接收来自所述数据库的第二服务注册信息,所述第二服务注册信息是所述数据库更新所述第一服务注册信息得到的;
响应于所述第二服务注册信息中有注册数据,且所述第二服务注册信息中不包括所述第二服务实例的标识信息,将所述第二服务实例的服务状态设置为备服务实例;
按照第一间隔时间向所述代理服务器发送租约查询指令,以通过所述代理服务器将所述租约查询指令转发至所述数据库;其中,所述租约查询指令用于查询第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述租约的更新周期的设定值;
接收来自所述数据库的所述第一服务实例的租约;
响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,所述主实例切换指令中包括所述第二服务实例的标识信息和所述第二服务实例的租约时间戳;
响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从所述备服务实例切换为所述主服务实例。
7.根据权利要求6所述的方法,其特征在于,所述响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,包括:
响应于所述第一服务实例的租约中的租约时间戳与服务器时间之间的差值大于所述持续有效时长,向所述代理服务器发送所述主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库。
8.根据权利要求6所述的方法,其特征在于,所述响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从所述备服务实例切换为所述主服务实例之后,还包括:
向所述代理服务器发送服务状态通知,所述服务状态通知用于告知所述代理服务器所述第二服务实例切换为所述目标服务的主服务实例;
调用警告组件向所述代理服务器发送警告通知,以通过所述代理服务器将所述警告通知转发至终端,所述警告通知用于告知开发者所述第一服务实例运行异常。
9.根据权利要求6所述的方法,其特征在于,所述响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从所述备服务实例切换为所述主服务实例之前,还包括:
接收来自所述第一服务实例的第一心跳通知,所述第一心跳通知用于告知所述第二服务实例所述第一服务实例的存活状况;
接收来自所述代理服务器的第二心跳通知,所述第二心跳用于检测所述第二服务实例与所述代理服务之间的网络连接状况。
10.一种服务状态的切换装置,其特征在于,所述装置包括:
信息指令发送模块,用于响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例;
信息获取模块,用于接收来自所述数据库的所述服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数;
注册指令发送模块,用于响应于所述服务注册信息中无注册数据,或者所述服务注册信息中有注册数据,但所述服务注册信息中不包括第一服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第一服务实例的标识信息、所述服务版本号和初始租约时间戳;
服务状态设置模块,用于响应于接收到来自所述数据库的注册成功通知,将所述第一服务实例的服务状态设置为所述主服务实例,所述注册成功通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号相同而生成的;
心跳通知发送模块,用于按照第一间隔时间向所述代理服务器发送第一心跳通知,以通过所述代理服务器将所述第一心跳通知转发至第二服务实例;其中,所述第一心跳通知用于告知所述第二服务实例所述第一服务实例的存活状况,所述第二服务实例为所述目标服务的备服务实例;
更新指令发送模块,用于按照第二间隔时间向所述代理服务器发送租约更新指令,以通过所述代理服务器将所述租约更新指令转发至所述数据库;所述租约更新指令用于更新所述第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述第二间隔时间的设定值;
服务状态切换模块,用于响应于所述租约在所述持续有效时长内未更新,将所述第一服务实例的服务状态从所述主服务实例切换为所述备服务实例。
11.一种服务状态的切换装置,其特征在于,所述装置包括:
信息指令发送模块,用于响应于接收到来自目标服务的启动指令,向代理服务器发送信息获取指令,以通过所述代理服务器将所述信息获取指令转发至数据库;其中,所述信息获取指令用于获取所述目标服务在所述数据库中的服务注册信息,所述服务注册信息用于标识所述目标服务的主服务实例;
信息接收模块,用于接收来自所述数据库的第一服务注册信息和服务版本号,所述服务版本号用于表示所述目标服务的主服务实例的修改次数;
注册指令发送模块,用于响应于所述第一服务注册信息中无注册数据,或者所述第一服务注册信息中有注册数据,但所述第一服务注册信息中不包括第二服务实例的标识信息,向所述代理服务器发送主实例注册指令,以通过所述代理服务器将所述主实例注册指令转发至所述数据库,所述主实例注册指令中包括所述第二服务实例的标识信息、所述服务版本号和初始租约时间戳;
所述信息指令发送模块,还用于响应于接收到来自所述数据库的注册失败通知,再次向所述代理服务器发送所述信息获取指令,以通过所述代理服务器再次将所述信息获取指令转发至所述数据库;其中,所述注册失败通知是所述数据库在接收到所述主实例注册指令时检测到所述主实例注册指令中的所述服务版本号与所述数据库中的服务版本号不同而生成的;
所述信息接收模块,还用于接收来自所述数据库的第二服务注册信息,所述第二服务注册信息是所述数据库更新所述第一服务注册信息得到的;
服务状态设置模块,用于响应于所述第二服务注册信息中有注册数据,且所述第二服务注册信息中不包括所述第二服务实例的标识信息,将所述第二服务实例的服务状态设置为备服务实例;
查询指令发送模块,用于按照第一间隔时间向所述代理服务器发送租约查询指令,以通过所述代理服务器将所述租约查询指令转发至所述数据库;其中,所述租约查询指令用于查询第一服务实例的租约,所述租约用于标识所述第一服务实例为所述目标服务的主服务实例的有效期,所述有效期是基于租约时间戳和持续有效时长确定的,所述租约时间戳用于表示所述有效期的起效时刻,所述持续有效时长为大于所述租约的更新周期的设定值;
所述信息接收模块,还用于接收来自所述数据库的所述第一服务实例的租约;
切换指令发送模块,用于响应于所述第一服务实例的租约在所述持续有效时长内未更新,向所述代理服务器发送主实例切换指令,以通过所述代理服务器将所述主实例切换指令转发至所述数据库,所述主实例切换指令中包括所述第二服务实例的标识信息和所述第二服务实例的租约时间戳;
服务状态切换模块,用于响应于接收到来自所述数据库的切换成功通知,将所述第二服务实例的服务状态从所述备服务实例切换为所述主服务实例。
12.一种服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器中存储有至少一段程序,所述至少一段程序由所述处理器加载并执行以实现如权利要求1至5任一项所述的服务状态的切换方法,或如权利要求6至9任一项所述的服务状态的切换方法。
13.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一段程序,所述至少一段程序由处理器加载并执行以实现如权利要求1至5任一项所述的服务状态的切换方法,或如权利要求6至9任一项所述的服务状态的切换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110805415.6A CN113467953B (zh) | 2021-07-16 | 2021-07-16 | 服务状态的切换方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110805415.6A CN113467953B (zh) | 2021-07-16 | 2021-07-16 | 服务状态的切换方法、装置、服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113467953A CN113467953A (zh) | 2021-10-01 |
CN113467953B true CN113467953B (zh) | 2023-08-04 |
Family
ID=77880714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110805415.6A Active CN113467953B (zh) | 2021-07-16 | 2021-07-16 | 服务状态的切换方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113467953B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115373904B (zh) * | 2022-10-24 | 2023-02-03 | 北京奥星贝斯科技有限公司 | 一种分布式***中的租约动态延续方法、装置以及设备 |
CN115766389A (zh) * | 2022-11-08 | 2023-03-07 | 奇安信网神信息技术(北京)股份有限公司 | 信息告警方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102064951A (zh) * | 2009-11-18 | 2011-05-18 | 中兴通讯股份有限公司 | 一种实现dhcp服务器主备的方法 |
CN106453471A (zh) * | 2016-07-08 | 2017-02-22 | 合网络技术(北京)有限公司 | 一种基于分布式应用的租约数据的发送及获取方法、装置 |
CN107819556A (zh) * | 2016-09-12 | 2018-03-20 | 北京金山云网络技术有限公司 | 一种服务状态切换方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2823932B1 (fr) * | 2001-04-23 | 2003-06-27 | Intaan Technology | Systeme et procede pour la distribution dynamique de donnees et/ou de services |
KR100800848B1 (ko) * | 2006-07-28 | 2008-02-04 | 삼성전자주식회사 | 디지털 방송 서비스 제공 시 주 서비스와 관련된 복수개의서브 서비스를 동시 제공하기 위한 디지털 비디오 방송시스템 및 디지털 비디오 방송 방법 |
-
2021
- 2021-07-16 CN CN202110805415.6A patent/CN113467953B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102064951A (zh) * | 2009-11-18 | 2011-05-18 | 中兴通讯股份有限公司 | 一种实现dhcp服务器主备的方法 |
CN106453471A (zh) * | 2016-07-08 | 2017-02-22 | 合网络技术(北京)有限公司 | 一种基于分布式应用的租约数据的发送及获取方法、装置 |
CN107819556A (zh) * | 2016-09-12 | 2018-03-20 | 北京金山云网络技术有限公司 | 一种服务状态切换方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113467953A (zh) | 2021-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10491671B2 (en) | Method and apparatus for switching between servers in server cluster | |
CN113467953B (zh) | 服务状态的切换方法、装置、服务器及存储介质 | |
US8700760B2 (en) | Method and systems for redundant server automatic failover | |
US6622261B1 (en) | Process pair protection for complex applications | |
CN110535692B (zh) | 故障处理方法、装置、计算机设备、存储介质及存储*** | |
CN110830283B (zh) | 故障检测方法、装置、设备和*** | |
CN112506702B (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
US20100064165A1 (en) | Failover method and computer system | |
CN112955874A (zh) | 在使用区块链的机器学习的去中心化模型构建中进行自修复的***及方法 | |
CN108744504B (zh) | 游戏数据的处理方法及装置、游戏服务器、游戏*** | |
GB2418040A (en) | Monitoring a high availability cluster using a smart card | |
JP7508703B2 (ja) | 車両におけるecuの管理方法、ecuおよび可読記憶媒体 | |
CN108600284B (zh) | 一种基于Ceph的虚拟机高可用实现方法及*** | |
JP2014191816A (ja) | 情報処理装置、制御方法、プログラム、及び情報処理システム | |
CN114764380A (zh) | 一种基于etcd的分布式集群控制方法和装置 | |
CN108243031B (zh) | 一种双机热备的实现方法及装置 | |
CN111917576B (zh) | 存储集群的控制方法、装置、计算机可读存储介质、处理器 | |
CN111880947B (zh) | 一种数据传输方法及装置 | |
US8074109B1 (en) | Third-party voting to select a master processor within a multi-processor computer | |
CN116346588A (zh) | 一种管理节点切换方法、装置、设备及介质 | |
CN110502460B (zh) | 数据处理的方法和节点 | |
CN113961402A (zh) | 一种虚拟化集群的管理方法、装置、设备及介质 | |
CN113568710B (zh) | 一种虚拟机高可用实现方法、装置和设备 | |
CN116382850B (zh) | 一种利用多存储心跳检测的虚拟机高可用管理装置及*** | |
KR101103237B1 (ko) | 서비스 프로세스 관리방법 및 시스템, 및 이를 위한 기록매체 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40053920 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |