一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种高可用的服务发现系统和方法与流程

2022-12-19 20:46:54 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种高可用的服务发现系统和方法。


背景技术:

2.在互联网领域,用户所使用的各种app、访问的web网站服务,底层技术都是通过多个不同的服务协作来共同实现的。为了确保产品功能可以连续无间断的提供给用户、即便出现部分服务器的宕机也不受影响,各服务会采用在多台服务器部署多个副本的方式,如果一台服务器宕机,其它正常服务器上的副本程序依然能够保证用户的使用不会中断。然而现有技术中存在的问题是当服务器出现故障时,没有自动屏蔽故障机器和自动恢复其功能的有效方法,往往还需要人工介入进行故障处理,导致故障处理不及时,效率低下,严重的甚至影响到了用户对产品的正常使用。


技术实现要素:

3.为此本发明提供了一种高可用的服务发现系统和方法,如果服务的某个实例发生故障,可以快速识别到故障,并及时把故障的实例进行屏蔽;当服务有新的实例上线时,可以感知到实例的状态变化,并进行解屏蔽或挂载新实例,通过本发明,很好的解决了现有技术中存在的问题。
4.为实现本发明之目的,采用以下技术方案予以实现:
5.一种高可用的服务发现系统,包括服务控制器,元数据中心,操作终端和多个服务器,其中:
6.所述服务器用于部署服务实例;
7.所述操作终端用于监测服务实例的运行情况,并将监测到的实例状态信息发送给元数据中心;
8.所述元数据中心用于接收操作终端发来的实例状态信息,将该状态信息记录在元数据中并进行保存;
9.所述服务控制器用于根据元数据中心中实例状态信息的变化情况维护服务清单。
10.所述的高可用的服务发现系统,其中:所述服务清单包括服务名与服务实例的映射记录。
11.所述的高可用的服务发现系统,其中:所述服务清单保存在服务控制器所在的服务器或其他分布式数据库中。
12.所述的高可用的服务发现系统,其中:当服务器上的实例发生故障,操作终端检测到该故障,将实例的异常状态信息发送给元数据中心,元数据中心存储接收到的该信息;
13.服务控制器监测到元数据中心发生了实例状态变化事件,感知到实例出现了异常,屏蔽异常实例所属的服务器。
14.所述的高可用的服务发现系统,其中服务控制器屏蔽异常实例所属的服务器按如下方式进行:
15.在服务清单中将相关实例的运行状态信息设为异常,同时屏蔽服务名与服务实例的映射记录。
16.所述的高可用的服务发现系统,其中:
17.当异常实例恢复正常时,服务控制器解除对异常实例所属的服务器的屏蔽。
18.所述的高可用的服务发现系统,其中:
19.当实例所在服务器发生硬件故障,操作终端在预定时间内未向元数据中心发送实例状态信息,元数据中心将该实例所在服务器标记为故障状态,该服务器上的所有实例的随之改变为异常状态。
20.所述的高可用的服务发现系统,其中:
21.服务控制器屏蔽异常实例所在的服务器。
22.所述的高可用的服务发现系统,其中:
23.实例启动后,如果处于正常运行状态,则操作终端向数据中心上报实例的正常状态信息。
24.所述的高可用的服务发现系统,其中:
25.操作终端实时监测服务实例的运行情况,并将监测到的实例运行情况周期性的发送给元数据中心。
26.一种高可用的服务发现方法,包括:
27.步骤1.当实例所在服务器发生硬件故障,检测到在预定时间内未向元数据中心发送实例状态信息;
28.步骤2.元数据中心将该实例所在服务器标记为故障状态,该服务器上的所有实例随之改变为异常状态。
29.所述的方法,还包括:
30.步骤3.实例启动后,如果处于正常运行状态,则向数据中心上报实例的正常状态信息。
31.所述的方法,应用于如上所述的高可用的服务发现系统中。
32.一种计算机可读存储器,其中,存储有处理器可执行指令,当所述指令被处理器执行时,使处理器执行上述的方法。
附图说明
33.图1为本发明高可用的服务发现系统架构示意图。
具体实施方式
34.下面结合附图1,对本发明的具体实施方式进行详细说明。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。所述实施方式是示例性地,仅用于解释本发明,而不能理解为对本发明的限制。
35.在本说明书中描述的“一种实施方式”或“一些实施方式”等意味着在本发明的一个或多个实施方式中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另
外特别强调。
36.如图1所示,本发明的高可用的服务发现系统包括服务控制器(bns),元数据中心(apiserver),操作终端(kubelet),多个服务器。
37.优选的,本专利的高可用的服务发现系统遵循k8s(kubernetes)结构,k8s可以提供服务部署,服务监控,应用扩容和故障处理等容器管理的解决方案。
38.图1中示出了三个服务器a、b、c,但在实际中,服务器的数量可更多或更少,所述服务器用于部署服务,可供用户通过互联网进行服务的访问,为用户提供某些可用的功能,例如查询信息等。所述服务以实例的形式运行在服务器上,所述实例以pod作为运行载体。
39.如图1所示,一个服务器可以运行多个不同的pod(例如pod1、pod2),一个服务的同一个实例也可以以多副本的形式运行在多个服务器上(例如,pod1和pod2的三个副本分别运行在服务器a,b,c上)。
40.所述操作终端用于实时监测服务实例的运行情况,并将监测到的实例运行情况周期性的发送给元数据中心(apiserver),即将pod的状态信息发送给apiserver。由于k8s系统中服务实例都通过pod方式启动运行,因此,如果实例出现软件故障导致无法运行,pod状态会出现异常;如果实例所在服务器出现硬件故障,pod状态也会出现异常,因此通过对pod状态是否异常的检测就可以判断出实例/服务是否正常。当kubelet(操作终端)感知到pod异常后,会将pod状态信息发送给apiserver。
41.元数据中心用于接收apiserver发来的pod状态信息,将该pod状态信息记录在元数据中,并将元数据存储在元数据中心。
42.所述服务控制器用于维护服务清单,所述服务控制器周期性的对元数据中心进行监测,通过读取元数据获得实例的运行情况,并根据pod的运行情况、状态信息等维护服务清单。
43.所述服务清单包括服务名与服务运行实例的映射记录,所述映射记录包括服务名称,以及与该服务对应的该服务下运行实例的信息列表,包括pod、主机名、ip、端口、pod运行状态等信息。当用户访问某个服务时,先向元数据中心发送访问该服务的请求,元数据中心通过查询服务清单中相应的映射记录,获得用户所请求的服务所在的主机名、ip地址、端口、pod运行状态等信息,并将该信息反馈给用户,用户根据该信息可访问相应的服务。例如,通过ip地址即可访问运行该服务的服务器,从而实现对所述服务的访问等。
44.所述服务清单保存在服务控制器所在的服务器或其他分布式数据库中。
45.下面对本发明的高可用的服务发现系统的工作过程进行说明。
46.(1)实例故障处理
47.服务实例的故障主要分为两个场景:
48.1)由服务实例的软件问题导致的故障
49.当服务器上的实例发生软件故障,操作终端检测到该故障,将pod的异常状态信息发送给元数据中心,元数据中心存储接收到的该信息。服务控制器监测到元数据中心发生了pod状态变化事件,实时感知到pod出现了异常,bns控制器在监听到pod的异常后,会通过bns的api接口,查询该pod所属的服务器是否已经屏蔽,如已屏蔽则不做任何处理;如未屏蔽,则会调用api执行屏蔽操作,将服务器设为不可用,避免用户流量继续访问故障实例所在服务器。
50.执行屏蔽操作可按如下方式进行:
51.在服务清单中将相关pod的运行状态信息设为异常,同时屏蔽与该pod所对应的服务名的映射记录信息,屏蔽完成后,当用户试图访问该服务时,将不会被引导到发生故障的服务器,而会被引导到正常的服务器。
52.同理,当一个异常的pod恢复正常时,服务控制器也可以通过相同方式感知到pod已经恢复正常,可以重新承接用户流量,此时服务控制器解除服务清单中关于该pod所对应的服务名的映射记录信息的屏蔽,则用户访问该服务时,可被引导到相应的服务器。
53.2)另一个场景是硬件故障,例如pod所在的机器(服务器)因故障退出,此时kubelet(操作终端)也会被故障影响,无法及时向元数据中心上报pod状态信息。当元数据中心apiserver在预定时间内持续未接收到操作终端上报的pod状态信息后,会将该机器标记为故障状态,此时机器上所有pod的状态也会随之改变为异常状态。bns控制器感知到该情况后,可进行如下两种方式的处理:
54.①
按上述1)中的方式进行服务屏蔽操作;
55.②
服务控制器在服务清单中查询近期是否有用户(或其他服务)访问过故障服务所在服务器,如果有,则向用户机器或其他服务发送询问消息,询问其对所述服务器的访问是否正常,如果正常,则不进行服务器屏蔽操作,如果不正常,则执行服务器屏蔽操作。
56.该处理操作的目的是用于确认在较长时间未收到操作终端所发送的pod状态信息的原因是确实是由kubelet(操作终端)和pod所在的服务器硬件故障导致,还是由于kubelet(操作终端)本身软件故障导致,避免错误的将工作正常的服务器进行屏蔽的问题的发生。
57.(2)实例启动处理
58.服务通过k8s启动实例时,主要有两种场景,一种是启动的实例是全新的,另一种是启动的实例之前已经存在,只是因为故障或其他原因处于关闭状态。
59.无论是哪种方式启动的实例,bns控制器都可以采用相同的处理流程:
60.1)实例启动后,对应的pod会处于正常运行状态,并通过kubelet向apiserver汇报状态。
61.2)apiserver收到信息后,会在元数据中记录pod状态信息。此时,bns控制器通过监听apiserver的元数据变化,感知到pod状态发生变化,且目前的状态是正常运行。
62.3)bns控制器获得这个pod状态正常信息后,会通过bns的api接口,查询该pod所属的服务器是否已经挂载到对应的bns下。如果未挂载,bns控制器会通过bns的api接口执行挂载操作。也即将该pod信息写入服务清单,生成一条映射记录。
63.4)当确定pod所在服务器已经挂载到bns上后,bns控制器会继续检查该服务器在服务清单上的状态,如果状态是屏蔽,bns控制器会将状态改为未屏蔽,使服务器可用,确保用户流量可以访问到这台服务器的pod。
64.经过上述流程,无论是新启动的pod,还是故障pod重启,都可以确保pod被正确挂载到bns,且处于未屏蔽状态,能够正常承接用户流量。
65.基于相同的发明构思,本发明还提供了一种高可用的服务发现方法,该方法用于上述高可用的服务发现系统中,下面,对该方法进行说明。
66.所述高可用的服务发现方法包括:(1)实例故障处理,(2)实例启动处理。其中:
67.(1)实例故障处理
68.服务实例的故障主要分为两个场景:
69.1)由服务实例的软件问题导致的故障
70.当服务器上的实例发生软件故障,操作终端检测到该故障,将pod的异常状态信息发送给元数据中心,元数据中心存储接收到的该信息。服务控制器监测到元数据中心发生了pod状态变化事件,实时感知到pod出现了异常,bns控制器在监听到pod的异常后,会通过bns的api接口,查询该pod所属的服务器是否已经屏蔽,如已屏蔽则不做任何处理;如未屏蔽,则会调用api执行屏蔽操作,将服务器设为不可用,避免用户流量继续访问故障实例所在服务器。
71.执行屏蔽操作可按如下方式进行:
72.在服务清单中将相关pod的运行状态信息设为异常,同时屏蔽与该pod所对应的服务名的映射记录信息,屏蔽完成后,当用户试图访问该服务时,将不会被引导到发生故障的服务器,而会被引导到正常的服务器。
73.同理,当一个异常的pod恢复正常时,服务控制器也可以通过相同方式感知到pod已经恢复正常,可以重新承接用户流量,此时服务控制器解除服务清单中关于该pod所对应的服务名的映射记录信息的屏蔽,则用户访问该服务时,可被引导到相应的服务器。
74.2)另一个场景是硬件故障,例如pod所在的机器(服务器)因故障退出,此时kubelet(操作终端)也会被故障影响,无法及时向元数据中心上报pod状态信息。当元数据中心apiserver在预定时间内持续未接收到操作终端上报的pod状态信息后,会将该机器标记为故障状态,此时机器上所有pod的状态也会随之改变为异常状态。bns控制器感知到该情况后,可进行如下两种方式的处理:
75.①
按上述1)中的方式进行服务屏蔽操作;
76.②
服务控制器在服务清单中查询近期是否有用户(或其他服务)访问过故障服务所在服务器,如果有,则向用户机器或其他服务发送询问消息,询问其对所述服务器的访问是否正常,如果正常,则不进行服务器屏蔽操作,如果不正常,则执行服务器屏蔽操作。
77.(2)实例启动处理
78.服务通过k8s启动实例时,主要有两种场景,一种是启动的实例是全新的,另一种是启动的实例之前已经存在,只是因为故障或其他原因处于关闭状态。
79.无论是哪种方式启动的实例,bns控制器都可以采用相同的处理流程:
80.1)实例启动后,对应的pod会处于正常运行状态,并通过kubelet向apiserver汇报状态。
81.2)apiserver收到信息后,会在元数据中记录pod状态信息。此时,bns控制器通过监听apiserver的元数据变化,感知到pod状态发生变化,且目前的状态是正常运行。
82.3)bns控制器获得这个pod状态正常信息后,会通过bns的api接口,查询该pod所属的服务器是否已经挂载到对应的bns下。如果未挂载,bns控制器会通过bns的api接口执行挂载操作。也即将该pod信息写入服务清单,生成一条映射记录。
83.4)当确定pod所在服务器已经挂载到bns上后,bns控制器会继续检查该服务器在服务清单上的状态,如果状态是屏蔽,bns控制器会将状态改为未屏蔽,使服务器可用,确保用户流量可以访问到这台服务器的pod。
84.根据本发明的一个实施方式,提供了一种计算机可读存储介质。本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本技术实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本技术实施例所提供的高可用的服务发现方法步骤。
85.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等,更具体来说,可包括静态随机存取存储器(static random-access memory,sram)和动态随机存取存储器(dynamic random access memory,dram)等具体类别。
86.由于该存储介质中所存储的指令,可以执行本发明的高可用的服务发现方法,因此,可以实现本发明实施例所能实现的有益效果,详见前面的实施例,在此不再赘述。
87.在本发明中,bns控制器使用k8s的operator架构实现,可以实现多副本的能力,常态下只有一个主实例正常工作,其它从实例启动但不承担任何工作。如果bns控制器主实例挂掉,则在剩余的正常从实例中会选举出新的主实例;如果从实例挂掉,不影响bns控制器主实例正常工作。
88.本发明通过bns控制器实现对服务实例的挂载、屏蔽、解屏蔽等操作,实现了在实例故障场景下,无需人工介入就可以自动将故障实例屏蔽止损,避免用户流量持续访问故障实例;在故障实例恢复后,可以将屏蔽的实例自动解开屏蔽,保证服务可以及时恢复,整个过程无需人工介入,节省了人力维护成本。
89.以上,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何本领域技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简介修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献