微服务下线处理方法、装置、计算机设备和存储介质与流程

文档序号:33627866发布日期:2023-03-28 21:50阅读:37来源:国知局
微服务下线处理方法、装置、计算机设备和存储介质与流程

1.本技术涉及云计算技术领域,特别是涉及一种微服务下线处理方法、装置、计算机设备、存储介质和计算机程序产品。


背景技术:

2.随着互联网的发展,单个的应用程序不再能够满足日渐增长的服务需求,微服务架构应运而生。微服务将单个的应用程序分割成多个松散耦合且可独立部署的服务,由服务提供方向服务消费方提供服务。
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.在所述本地服务列表中过滤运行状态为停机状态的服务提供方,得到目标服务列表;
28.根据所述目标服务列表,向对应的服务提供方发送服务调用请求。
29.第三方面,本技术还提供了一种微服务下线处理装置。所述装置包括:
30.状态标记模块,用于在检测到所述服务提供方向注册中心发送服务注销请求的情况下,将所述服务提供方的运行状态标记为停机状态;
31.状态添加模块,用于在检测到服务消费方向所述服务提供方发送服务调用请求的情况下,在所述服务提供方对所述服务调用请求的请求结果中,添加所述服务提供方的运行状态,得到目标请求结果;所述服务消费方与所述服务提供方之间存在订阅关系;
32.结果返回模块,用于将所述目标请求结果返回至所述服务消费方;所述服务消费方用于根据所述目标请求结果,将本地服务列表中的所述服务提供方的运行状态更新为停机状态。
33.第四方面,本技术还提供了一种微服务下线处理装置。所述装置包括:
34.结果接收模块,用于接收停机器发送的目标请求结果;所述目标请求结果通过所
述停机器在检测到与所述停机器对应的服务提供方向注册中心发送服务注销请求的情况下,将所述服务提供方的运行状态标记为停机状态,在检测到服务消费方向所述服务提供方发送服务调用请求的情况下,在所述服务提供方对所述服务调用请求的请求结果中,添加所述服务提供方的运行状态所得到;
35.状态更新模块,用于根据所述目标请求结果,将本地服务列表中的所述服务提供方的运行状态更新为停机状态。
36.第五方面,本技术还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
37.在检测到所述服务提供方向注册中心发送服务注销请求的情况下,将所述服务提供方的运行状态标记为停机状态;
38.在检测到服务消费方向所述服务提供方发送服务调用请求的情况下,在所述服务提供方对所述服务调用请求的请求结果中,添加所述服务提供方的运行状态,得到目标请求结果;所述服务消费方与所述服务提供方之间存在订阅关系;
39.将所述目标请求结果返回至所述服务消费方;所述服务消费方用于根据所述目标请求结果,将本地服务列表中的所述服务提供方的运行状态更新为停机状态。
40.第六方面,本技术还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
41.在检测到所述服务提供方向注册中心发送服务注销请求的情况下,将所述服务提供方的运行状态标记为停机状态;
42.在检测到服务消费方向所述服务提供方发送服务调用请求的情况下,在所述服务提供方对所述服务调用请求的请求结果中,添加所述服务提供方的运行状态,得到目标请求结果;所述服务消费方与所述服务提供方之间存在订阅关系;
43.将所述目标请求结果返回至所述服务消费方;所述服务消费方用于根据所述目标请求结果,将本地服务列表中的所述服务提供方的运行状态更新为停机状态。
44.第七方面,本技术还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
45.在检测到所述服务提供方向注册中心发送服务注销请求的情况下,将所述服务提供方的运行状态标记为停机状态;
46.在检测到服务消费方向所述服务提供方发送服务调用请求的情况下,在所述服务提供方对所述服务调用请求的请求结果中,添加所述服务提供方的运行状态,得到目标请求结果;所述服务消费方与所述服务提供方之间存在订阅关系;
47.将所述目标请求结果返回至所述服务消费方;所述服务消费方用于根据所述目标请求结果,将本地服务列表中的所述服务提供方的运行状态更新为停机状态。
48.上述微服务下线处理方法、装置、计算机设备、存储介质和计算机程序产品,首先在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态;然后在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态,得到目标请求结果;最后将目标请求结果返回至服务消费方;服务消费方用于根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态。这样,停机器通过对服务提供方的运行
状态的标记,以及将运行状态添加至服务提供方的请求结果,能够快速地告知服务消费方此次调用的服务提供方已停机,从而使得服务消费方不再向已停机的服务提供方发送服务调用请求,进而缩短了服务消费方感知服务提供方下线的时间,避免了服务抖动或请求丢失导致的微服务高可用性较低的缺陷,提高了微服务的高可用性。
附图说明
49.图1为一个实施例中微服务下线处理方法的应用环境图;
50.图2为一个实施例中微服务下线处理方法的流程示意图;
51.图3为一个实施例中得到目标请求结果的步骤的流程示意图;
52.图4为另一个实施例中微服务下线处理方法的流程示意图;
53.图5为一个实施例中微服务下线处理装置的结构框图;
54.图6为另一个实施例中微服务下线处理装置的结构框图;
55.图7为一个实施例中计算机设备的内部结构图。
具体实施方式
56.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
57.本技术实施例提供的微服务下线处理方法,可以应用于如图1所示的应用环境中,该应用环境包括服务提供方102、停机器104、注册中心106以及服务消费方108,服务提供方102、停机器104、注册中心106以及服务消费方108之间通过网络进行通信。其中,停机器104可以是置于服务提供方102内部的装置,也可以是独立于服务提供方102的装置,本技术实施例以停机器104置于服务提供方102内部的情况为例进行说明。服务提供方102是提供微服务的应用,服务消费方108是调用微服务的对象;注册中心106作为服务提供方102与服务消费方108之间的桥梁,记录有服务提供方102与服务消费方108之间的订阅关系。其中,服务提供方102通过注册中心106进行服务注册、服务续约以及服务注销等操作,从而生成和更新注册中心106的服务注册列表;服务消费方108定时向注册中心106发送订阅请求,获取服务注册列表,作为存储在服务消费方108的本地服务列表。服务提供方102、注册中心106以及服务消费方108可以用独立的服务器或终端来实现,也可以用多个服务器或终端组成的集群来实现。
58.服务提供方102通过向注册中心106发送服务注册请求,使得注册中心106将服务提供方102添加至服务注册中心106的服务注册列表中;同时,服务提供方102通过定时向注册中心106发送服务续约请求,使得注册中心106维护服务注册列表中与服务提供方102对应的信息;此外,服务提供方102通过向注册中心106发送服务注销请求,进行下线操作。当注册中心106连续多个周期未收到服务提供方102发送的服务续约请求时,注册中心106会认为服务提供方102状态异常,并将与服务提供方102对应的信息从服务注册列表中删除。
59.具体地,停机器104在检测到停机器104关联的服务提供方102向注册中心106发送服务注销请求的情况下,将服务提供方102的运行状态标记为停机状态;在检测到服务消费方108向服务提供方102发送服务调用请求的情况下,在服务提供方102对服务调用请求的
请求结果中,添加服务提供方102的运行状态,得到目标请求结果;服务消费方108与服务提供方102之间存在订阅关系;将目标请求结果返回至服务消费方108;服务消费方108用于根据目标请求结果,将本地服务列表中的服务提供方102的运行状态更新为停机状态。
60.在一示例性实施例中,如图2所示,提供了一种微服务下线处理方法,以该方法应用于图1中的停机器为例进行说明,包括以下步骤:
61.步骤s202,在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态。
62.其中,服务注销请求为服务提供方在下线时,向注册中心发送的请求。需要说明的是,停机器关联有对应的服务提供方,例如,假设停机器置于服务提供方的内部,那么每个服务提供方与其内部的停机器之间存在对应关系;假设停机器独立于服务提供方,那么每个服务提供方都会有一个对应的停机器。
63.具体地,停机器会实时监控对应的服务提供方的运行,当服务提供方准备下线时,停机器会检测到服务提供方向注册中心发送注销服务请求,从而将服务提供方的运行状态标记为停机状态,例如,假设用二进制表示服务提供方的运行状态,正常状态时标记为0,停机状态时标记为1。
64.举例说明,参考图1,当服务提供方p2需要下线进行更新时,会向注册中心发送服务注销请求;而与服务提供方p2对应的停机器t2在检测到服务提供方p2发送的服务注销请求时,会将服务提供方p2的运行状态从正常状态更改为停机状态,从而对服务提供方p2进行标记。
65.步骤s204,在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态,得到目标请求结果。
66.其中,服务消费方与服务提供方之间存在订阅关系,参考图1,服务消费方c2需要通过调用服务提供方p1或服务提供方p2来获得相应的服务,那么服务消费方c2与服务提供方p1之间便存在订阅关系,服务消费方c2和服务提供方p2之间也存在订阅关系。服务调用请求为服务消费方在需要调用服务时,向对应的服务提供方发送的请求。
67.需要说明的是,在服务提供方接收到服务调用请求之后,会根据业务逻辑处理,向发送服务调用请求的服务消费方提供服务,并将提供服务的具体情况作为请求结果,返回给服务消费方。
68.具体地,在停机器检测到有服务消费方向服务提供方发送服务调用请求以调用服务,并在服务提供方按照业务逻辑,针对服务调用请求向服务消费方提供服务之后,停机器将服务提供方的运行状态添加到服务提供方的请求结果中,得到目标请求结果。
69.举例说明,参考图1,假设在服务提供方p2的运行状态已被停机器t2标记为停机状态之后,服务消费方c2需要调用服务提供方p2,那么服务消费方c2会向服务提供方p2发送服务调用请求;服务提供方p2在接收到服务调用请求后,会按照业务逻辑处理服务调用请求,提供服务,并在处理完服务调用请求之后向服务消费方c2发送请求结果;而停机器t2会在检测到服务提供方p2接收到服务调用请求之后,识别服务提供方p2的运行状态,若服务提供方p2的运行状态为停机状态,则将服务提供方p2的运行状态添加至请求结果中,得到目标请求结果。
70.步骤s206,将目标请求结果返回至服务消费方。
71.其中,服务消费方用于根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态,可以理解为,服务消费方在接收到目标请求结果之后,识别目标请求结果中的服务提供方的运行状态,若服务提供方的运行状态为停机状态,那么就在本地服务列表中找到与服务提供方对应的节点,并将该节点的运行状态从正常状态更新为停机状态。本地服务列表是指每个服务消费方从注册中心获取的,缓存在本地的,记录有对应于服务消费方订阅关系的关系表,服务消费方通过本地服务列表,调用服务提供方。
72.具体地,停机器将目标请求结果发送给请求服务的服务消费方,然后服务消费方根据接收到的目标请求结果,解析出有关服务提供方的停机信息,并根据停机信息,在本地服务列表中查询与服务提供方对应的节点,将节点的运行状态从正常状态更新为停机状态。例如,假设用二进制表示服务提供方的运行状态,当目标请求结果中的运行状态为停机状态时,服务消费方将本地服务列表中与停机的服务提供方对应的节点的运行状态从0更新为1。
73.举例说明,参考图1,停机器t2向调用服务提供方p2的服务消费方c2发送目标请求结果;服务消费方c2接收到目标请求结果后,对请求结果进行解析,得到服务提供方p2提供服务的情况,以及服务提供方p2的停机状态;然后服务消费方c2在本地服务列表中查询与服务提供方p2对应的节点,并将与服务提供方p2对应的节点的运行状态从正常状态更新为停机状态。
74.上述微服务下线处理方法,停机器首先在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态;然后停机器在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态,得到目标请求结果;最后,停机器将目标请求结果返回至服务消费方;服务消费方用于根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态。这样,这样,停机器通过对服务提供方的运行状态的标记,以及将运行状态添加至服务提供方的请求结果,能够快速地告知服务消费方此次调用的服务提供方已停机,从而使得服务消费方不再向已停机的服务提供方发送服务调用请求,进而缩短了服务消费方感知服务提供方下线的时间,避免了服务抖动或请求丢失导致的微服务高可用性较低的缺陷,进而提高了微服务的高可用性。
75.在一示例性实施例中,如图3所示,上述步骤s204,服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态,得到目标请求结果,具体包括以下步骤:
76.步骤s302,获取与服务提供方的运行状态对应的状态标识符。
77.步骤s304,确认状态标识符在服务提供方对服务调用请求的请求结果中的添加位置。
78.步骤s306,将状态标识符添加至请求结果中的添加位置,得到目标请求结果。
79.其中,与服务提供方的运行状态对应的状态标识符是指表征服务提供方的运行状态的编码,例如,通过编码000表示服务提供方的运行状态是正常状态,通过编码111表示服务提供方的运行状态是停机状态;也可以是其它能够区分正常状态和停机状态的编码,本技术在此不作具体限定。
80.需要说明的是,状态标识符在服务提供方对服务调用请求的请求结果中的添加位置是指,请求结果中预留有一段用于表征服务提供方的运行状态的内容,例如在请求结果
的http header(消息头)中预留有添加key-value(键值对)的内容,通过添加x-status=shutdown键值对,完成对请求结果添加运行状态的操作。
81.具体地,在停机器检测到服务消费方发送给对应的服务提供方的服务调用请求后,停机器获取服务提供方的运行状态对应的状态标识符以及状态标识符在服务提供方对服务调用请求的请求结果中的添加位置,然后将状态标识符添加到请求结果中的添加位置中,从而生成目标请求结果。
82.举例说明,参考图1,停机器t2在检测到服务消费方c2发送给服务提供方p2的服务调用请求后,查询服务提供方p2的运行状态,然后获取与运行状态对应的状态标识符;接着停机器t2在服务提供方p2的请求结果中确认预留给状态标识符的添加位置,并将状态标识符添加到添加位置中,得到目标请求结果。例如,服务提供方p2的运行状态为停机状态,停机状态对应的状态标识符为111,且停机器t2确认在请求结果中预留给状态标识符的添加位置为消息头,则停机器t2将“111”添加到请求结果的消息头中;再比如,停机状态对应的状态标识符为x-status=shutdown键值对,添加位置为http header,则停机器t2将“x-status=shutdown”添加到http header中。
83.本实施例中,停机器通过确认与运行状态对应的状态标识符,以及与标识符对应的添加位置,能够实现在服务提供方向服务消费方返回的请求结果中添加运行状态,使得服务消费方可以通过添加了运行状态的请求结果,感知到服务消费方已经下线,从而在下一次服务调用时,不再调用已停机的服务提供方,进而保证了微服务的高可用性。
84.在一示例性实施例中,在上述步骤s202,在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态之后,还具体包括以下内容:在检测到服务消费方向服务提供方发送服务调用请求的情况下,生成与服务提供方对应的第一状态更新信息;将第一状态更新信息发送至服务消费方。
85.其中,服务消费方用于根据第一状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态;第一状态更新信息是指表示服务提供方的运行状态从正常状态变为停机状态的信息。
86.具体地,在停机器检测到有服务消费方向与停机器对应的服务提供方发送服务调用请求之后,停机器生成与服务提供方的停机状态对应的第一状态更新信息,并将第一状态更新信息发送给调用服务提供方的服务消费方;而服务消费方在接收到第一状态更新信息后,根据第一状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态。
87.举例说明,参考图1,例如在停机器t2检测到服务消费方c2向服务提供方p2发送了服务调用请求之后,停机器t2根据服务提供方p2的运行状态为停机状态,生成表征服务提供方p2的运行状态的第一状态更新信息;然后停机器t2将第一状态更新信息发送给服务消费方c2;而服务消费方c2在接收到第一状态更新信息之后,会解析第一状态更新信息,得到服务提供方p2的运行状态,并在本地服务列表中查询与服务提供方p2对应的节点,将该节点的运行状态从正常状态更新为停机状态。
88.需要说明的是,本实施例中,停机器生成第一状态更新信息和服务提供方根据业务逻辑处理服务调用请求是并行的;可以理解为两个操作同时进行,从而缩短了服务消费方感知服务提供方下线的时间。
89.本实施例中,停机器在检测到服务调用请求后,直接向服务消费方发送表示服务提供方的停机状态的第一状态更新信息,使得服务消费方尽快感知到服务提供方的下线,从而在下一次服务调用时,不再调用已停机的服务提供方,进而保证了微服务的高可用性。
90.在一示例性实施例中,在上述步骤s202,在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态之后,还具体包括以下内容:确认与服务提供方存在订阅关系的各个服务消费方;将与服务提供方对应的第二状态更新信息,发送至与服务提供方存在订阅关系的各个服务消费方。
91.其中,各个服务消费方分别用于根据第二状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态;第二状态更新信息是指表示服务提供方的运行状态从正常状态变为停机状态的信息。
92.具体地,在停机器检测到对应的服务提供方向注册中心发送服务注销请求,并将服务提供方的运行状态标记为停机状态之后,停机器首先确认与服务提供方存在订阅关系的各个服务消费方,并将与服务提供方存在订阅关系的各个服务消费方确认为目标服务消费方;然后停机器生成与服务提供方的停机状态对应的第二状态更新信息,并将第二状态更新信息发送给各个目标服务消费方;而各个目标服务消费方在接收到第二状态更新信息后,根据第二状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态。
93.举例说明,参考图1,假设与服务提供方p2存在订阅关系的有服务消费方c2和服务消费方c3,那么在停机器t2检测到服务提供方p2向注册中心发送服务注销请求之后,停机器t2首先确认与服务提供方p2存在订阅关系的服务消费方c2和服务消费方c3;然后停机器t2根据服务提供方p2的运行状态为停机状态,生成表征服务提供方p2的运行状态的第二状态更新信息,并将第二状态更新信息分别发送给服务消费方c2和服务消费方c3;而服务消费方c2和服务消费方c3在接收到第二状态更新信息之后,会解析第二状态更新信息,得到服务提供方p2的运行状态,并在本地服务列表中查询与服务提供方p2对应的节点,将该节点的运行状态从正常状态更新为停机状态。
94.需要说明的是,停机器可以通过查询服务提供方的历史服务记录、历史请求结果记录等信息确认与服务提供方存在订阅关系的服务消费方,也可以从注册中心获取与服务提供方相关的订阅关系。
95.还需要说明的是,本实施例中,停机器是在将对应的服务提供方的运行状态标记为停机状态之后,直接生成第二状态更新信息,可以理解为在服务提供方开始下线的时候,停机器就主动通知与服务提供方存在订阅关系的各个服务消费方,从而缩短了服务消费方感知服务提供方下线的时间。
96.本实施例中,停机器能够在服务提供方下线的第一时间,直接将服务提供方的停机状态以第二状态更新信息的形式发送给服务消费方,使得服务消费方尽快感知到服务提供方的下线,从而在下一次服务调用时,不再调用已停机的服务提供方,进而保证了微服务的高可用性。
97.在一示例性实施例中,上述应用于停机器的微服务下线处理方法,还具体包括以下内容:在检测到与服务提供方存在订阅关系的各个服务消费方将本地服务列表中的服务提供方的运行状态更新为停机状态的情况下,生成与服务提供方对应的下线通知信息;将下线通知信息发送至服务提供方。
98.其中,服务提供方用于根据下线通知信息,完成下线;服务提供方完成下线是指,服务提供方彻底停机,不再接收服务调用请求,且不再定时向注册中心发送服务续约请求,使得注册中心在服务注册列表中删除已完成下线的服务提供方的相关信息。
99.具体地,在停机器检测到已经将服务提供方的停机状态发送给与服务提供方存在订阅关系的各个服务消费方,且各个服务消费方已经将本地服务列表中的服务提供方的运行状态更新为停机状态之后,停机器生成与服务提供方对应的下线通知信息;然后停机器将下线通知信息发送给对应的服务提供方;服务提供方接收到下线通知后,彻底完成下线,不再接收服务调用请求,且不再定时向注册中心发送服务续约请求。
100.需要说明的是,将服务提供方的停机状态发送给与服务提供方存在订阅关系的各个服务消费方,可以通过目标请求结果、第一状态更新信息以及第二状态更新信息中的一个或多个完成。
101.举例说明,参考图1,当停机器t2检测到已经向与服务提供方p2存在订阅关系的服务消费方c2和服务消费方c3均发送服务提供方p2的停机状态,且服务消费方c2和服务消费方c3已经将本地服务列表中的服务提供方p2的运行状态更新为停机状态之后,停机器t2生成与服务提供方p2对应的下线通知信息,以指示服务提供方p2完成下线。例如,服务消费方c2和服务消费方c3在5秒内即可都调用服务提供方p2,那么服务提供方p2最多在发送服务注销请求后的5s内,就可以完成整个下线操作;而在实际应用中,服务调用往往是高并发的,因此服务提供方p2能够在很短的时间内完成下线。
102.还需要说明的是,一般情况下,服务消费方每隔90秒向注册中心发起一次订阅请求,以更新服务消费方的本地服务列表;而服务提供方在向注册中心发送服务注销请求之后,不会马上进行停机操作,而是需要等待一段时间,停止发送服务续约请求,直到服务消费方下一次向注册中心发起订阅请求,获取注册中心中的服务注册列表以更新本地服务列表时,才进行停机操作;值得注意的是,若在服务消费方下一次发送订阅请求之前,注册中心已多次未收到服务提供方的服务续约请求,那么服务消费方下一次获取的服务注册列表已经剔除了发送服务注销请求的服务提供方。因此,在本实施例中,停机器通过检测接收到服务提供方的停机状态的各个服务消费方的更新操作,向停机的服务提供方发送下线通知,以指示服务提供方完成下线,能够使得服务提供方不需要等到服务消费方下一次向注册中心发起订阅请求,获取服务注册列表时才完成下线,从而缩短了服务提供方下线的等待时间,进一步提高了微服务的高可用性。
103.在一示例性实施例中,提供了另一种微服务下线处理方法,以该方法应用于图1中的服务消费方为例进行说明,微服务下线处理方法还具体包括以下内容:接收停机器发送的目标请求结果;根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态。
104.其中,目标请求结果通过停机器在检测到与停机器对应的服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态,在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态所得到。
105.具体地,服务消费方在接收到停机器发送的目标请求结果后,从目标请求结果中识别出与服务消费方发送服务调用请求的服务提供方对应的停机状态,并在本地服务列表
中查询与服务提供方对应的节点,然后服务消费方将该节点的运行状态从正常状态更新为停机状态。
106.可以理解的是,若服务消费方接收到的是停机器所发送的第一状态更新信息或第二状态更新信息,也能够将本地服务列表中的服务提供方的运行状态更新为停机状态。
107.举例说明,参考图1,服务消费方c2在接收到停机器t2发送的目标请求结果后,从目标请求结果中识别出有关服务提供方p2的停机状态,然后在本地服务列表中找到与服务提供方p2对应的节点,最后将节点的运行状态更新为停机状态。
108.需要说明的是,关于上述微服务下线处理方法的具体限定,可以参考步骤s202至步骤s206的具体限定,在此不再赘述。
109.本实施例中,服务消费方通过停机器发送的目标请求结果,能够获知调用的服务提供方已经下线,从而更新本地服务列表中的服务提供方的运行状态,从而在下一次服务调用时,不再调用已经下线的服务提供方,从而缩短了服务消费方感知服务下线的时间。此外,相比于将注册中心的服务注册列表发送给服务消费方,通过运行状态标记的方式将服务提供方的下线情况告知服务消费方,还能够减小资源的开销。
110.在一示例性实施例中,上述应用于服务消费方的微服务下线处理方法,还具体包括以下内容:在本地服务列表中过滤运行状态为停机状态的服务提供方,得到目标服务列表;根据目标服务列表,向对应的服务提供方发送服务调用请求。
111.具体地,服务消费方通过以下方式向服务提供方发送服务调用请求:服务消费方在本地服务列表中过滤掉运行状态为停机状态的服务提供方,得到目标服务列表;然后服务提供方基于负载均衡策略,在目标服务列表中确定需要调用的服务提供方,向该服务提供方发送服务调用请求。一般地,负载均衡策略包括轮询、随机、重试、哈希等。
112.举例说明,参考图1,假设与服务消费方c3存在订阅关系的为服务提供方p1、服务提供方p2以及服务提供方p3,而在此次调用之前,本地服务列表中服务提供方p2的运行状态已经更新为停机状态;那么服务消费方c3在需要调用服务时,首先在本地服务列表中过滤掉运行状态为停机状态的服务提供方p2,得到包含了服务提供方p1和服务提供方p3的目标服务列表,然后基于负载均衡策略,服务消费方c3在目标服务列表中确定了服务提供方p3,向服务提供方p3发送服务调用请求。
113.需要说明的是,服务消费方内部还设有状态继承机制。在服务消费方根据停机器发送的目标请求结果和/或第一状态更新信息和/或第二状态更新信息更新本地服务列表的同时,服务消费方依然会定时向注册中心发送订阅请求,获取注册中心的服务注册列表。若在服务消费方下一次向注册中心发送订阅请求之前,注册中心还没有将发送服务注销请求的服务提供方剔除,那么此时的服务注册列表中仍然可能记录有已经发送服务注销请求的服务提供方,但基于状态继承机制,服务消费方在根据服务注册列表更新本地服务列表的时候,会将之前的本地服务列表中运行状态为停机状态的信息保留下来。参考图1,当服务消费方c2将本地服务列表中的服务提供方p2的运行状态更新为停机状态后,服务消费方c2仍然会定时从注册中心获取的服务注册列表,若此时的服务注册列表中的服务提供方p2的运行状态仍为正常状态,那么服务消费方c2在根据服务注册列表更新本地服务列表时,会将服务提供方p2的停机状态继承下来,从而保证服务消费方c2仍然不会调用服务提供方p2。
114.本实施例中,服务消费方通过对本地服务列表中运行状态为停机状态的服务提供方的过滤,能够筛选出没有停机的服务提供方,从而发送服务调用请求;并基于状态继承机制,保证服务消费方即便根据服务注册列表更新本地服务列表,也不会调用已经向注册中心发送服务注销请求的服务提供方,进而实现了提高微服务的高可用性。
115.可以理解的是,基于同样的原理,本技术实施例提供的微服务下线处理方法也可以用于处理微服务的上线。举例说明,当服务提供方向注册中心发送服务注册请求时,停机器可以将服务提供方上线的信息告知服务消费方,从而缩短服务消费方感知服务提供方上线的时间,同样也能够提高微服务的高可用性。
116.在一个实施例中,如图4所示,提供了另一种微服务下线处理方法,以该方法应用于停机器为例进行说明,方法包括以下步骤:
117.步骤s401,在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态。
118.值得注意的是,在停机器将服务提供方的运行状态标记为停机状态之后,有如下三种方案可以进行选择:
119.第一种方案:
120.步骤s402,在检测到服务消费方向服务提供方发送服务调用请求的情况下,获取与服务提供方的运行状态对应的状态标识符。
121.步骤s403,确认状态标识符在服务提供方对服务调用请求的请求结果中的添加位置,并将状态标识符添加至请求结果中的添加位置,得到目标请求结果。
122.步骤s404,将目标请求结果返回至服务消费方。
123.第二种方案:
124.步骤s405,在检测到服务消费方向服务提供方发送服务调用请求的情况下,生成与服务提供方对应的第一状态更新信息。
125.步骤s406,将第一状态更新信息发送至服务消费方。
126.第三种方案:
127.步骤s407,确认与服务提供方存在订阅关系的各个服务消费方。
128.步骤s408,将与服务提供方对应的第二状态更新信息,发送至与服务提供方存在订阅关系的各个服务消费方。
129.需要说明的是,在步骤s404、步骤s406以及步骤s408之后,有相同的步骤s409与步骤s410。
130.步骤s409,在检测到与服务提供方存在订阅关系的各个服务消费方将本地服务列表中的服务提供方的运行状态更新为停机状态的情况下,生成与服务提供方对应的下线通知信息。
131.步骤s410,将下线通知信息发送至服务提供方。
132.需要说明的是,上述方法中的服务消费方用于根据目标请求结果和/或第一状态更新信息和/或第二状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态。
133.本实施例中,停机器通过对服务提供方的运行状态的标记,可以将服务提供方的运行状态记录下来,并将运行状态发送给与服务提供方存在订阅关系的服务消费方,在第
一时间以较少的资源开销,通知服务消费方服务提供方已下线,从而缩短了服务消费方感知服务下线的时间。同时,基于停机器发送的下线通知,服务提供方也可以在较短的时间内完成下线,不必等到服务消费方再次从注册中心获取服务注册列表。此外,服务消费方根据接收到的运行状态,更新本地服务列表,能够保证在下一次调用时,不再向已停机的服务提供方发送服务调用请求,造成服务抖动或请求丢失。基于以上内容的微服务下线处理方法,能够提高微服务的高可用性。
134.为了更清晰阐明本技术实施例提供的微服务下线处理方法,以下以一个具体的实施例对该微服务下线处理方法进行具体说明。在一示例性实施例中,本技术还提供了一种基于eureka的微服务快速停机下线方法;以该方法应用于微服务架构为例进行说明,微服务机构包括用于提供服务的服务提供方、调用微服务的服务消费方、记录服务提供方与服务消费方之间的订阅关系的注册中心,以及用于微服务下线处理的停机器;该方法包括以下内容:
135.步骤1:参考图1,提供相同服务(服务名为p)的3个服务提供方p1、p2、p3启动,向eureka注册中心发送服务注册请求,完成服务注册,并与注册中心维持服务续约请求,以续约服务。
136.步骤2:当服务消费方c1、c2、c3启动时,会向eureka注册中心发起全量服务订阅,并将eureka注册中心的服务注册列表缓存在本地。服务消费方内部有一个定时任务,每隔一个固定时间周期t0,服务消费方会向eureka注册中心发起增量服务订阅,以更新服务消费方的本地服务列表。需要注意的是,当服务消费方向服务提供方发起服务调用时,会直接使用本地服务列表,并过滤服务节点状态为停机状态的服务提供方。
137.步骤3:服务提供方p1开始停机流程,向eureka注册中心发起服务注销请求,停机器将服务提供方p1的运行状态标记为停机状态。
138.步骤4:当服务消费方c1、c2、c3向处于停机状态的服务提供方p1发起服务调用时,p1的停机器检测到自身状态处于停机状态,因此在服务提供方正常处理完业务逻辑返回给服务消费方请求结果时,在请求结果的header里带上特殊的标记,以通知服务消费方此服务提供方已处于停机中。
139.步骤5:当服务消费方c1、c2、c3接收到服务提供方p1的请求结果时,通过判断header中是否带有特殊标记,判断出本次服务调用的服务提供方状态;如果处于停机状态,服务消费方则会在本地服务列表中,将服务提供方p1对应的节点状态更新为停机状态。这样,当服务消费方后续调用服务p时,查询本地服务列表的过程中就会剔除处于停机状态的服务提供方p1。
140.步骤6:服务提供方p1等待时间t后关闭服务,完成停机。等待时间t是一个弹性值,与调用频率有关,比如在5s内,服务p的所有服务消费方都调用到了服务提供方p1,那么t就可以是5s;又比如,服务p的所有服务消费方需要10s才会都调用到服务提供方p1,那么t就会是10s。
141.可以理解的是,在生产实际当中,服务的调用往往处于高并发的状态,因此,基于本技术的服务提供方的下线信息能在很短的时间内被该服务提供方的所有的服务消费方所感知到,换言之,等待时间t会很短。
142.特殊地,上述停机器可以是服务提供方内部的一个装置,也可以是独立于服务提
供方的装置。需要说明的是,在header里带上特殊的标记,只是过一些措施和手段来通知服务消费方此服务提供方已处于停机中的实现方式之一,除此以外,也可以通过单独的报文来实现通知。
143.本实施例中,通过停机器对服务提供方进行状态标记,并将停机状态发送给服务消费方,以通知服务消费方该服务提供方已下线,使得服务消费方能够尽快感知到当前服务提供方的下线,以及服务提供方能够尽快完成下线,从而减少对当前正在处理的请求的影响,比如因服务下线造成的服务抖动和请求丢失等,克服了通过延迟等待的方式来完成微服务下线的不足,最终提高了微服务的高可用性。
144.应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
145.基于同样的发明构思,本技术实施例还提供了一种用于实现上述所涉及的微服务下线处理方法的微服务下线处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个微服务下线处理装置实施例中的具体限定可以参见上文中对于微服务下线处理方法的限定,在此不再赘述。
146.在一示例性实施例中,如图5所示,提供了一种微服务下线处理装置,应用于停机器,包括:状态标记模块501、状态添加模块502和结果返回模块503,其中:
147.状态标记模块501,用于在检测到服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态。
148.状态添加模块502,用于在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态,得到目标请求结果;服务消费方与服务提供方之间存在订阅关系。
149.结果返回模块503,用于将目标请求结果返回至服务消费方;服务消费方用于根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态。
150.在一示例性实施例中,状态添加模块502,还用于获取与服务提供方的运行状态对应的状态标识符;确认状态标识符在服务提供方对服务调用请求的请求结果中的添加位置;将状态标识符添加至请求结果中的添加位置,得到目标请求结果。
151.在一示例性实施例中,应用于停机器的微服务下线处理装置还包括第一信息发送模块,用于在检测到服务消费方向服务提供方发送服务调用请求的情况下,生成与服务提供方对应的第一状态更新信息;将第一状态更新信息发送至服务消费方;服务消费方用于根据第一状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机状态。
152.在一示例性实施例中,应用于停机器的微服务下线处理装置还包括第二信息发送模块,用于确认与服务提供方存在订阅关系的各个服务消费方;将与服务提供方对应的第二状态更新信息,发送至与服务提供方存在订阅关系的各个服务消费方;各个服务消费方分别用于根据第二状态更新信息,将本地服务列表中的服务提供方的运行状态更新为停机
状态。
153.在一示例性实施例中,结果返回模块503,还用于在检测到与服务提供方存在订阅关系的各个服务消费方将本地服务列表中的服务提供方的运行状态更新为停机状态的情况下,生成与服务提供方对应的下线通知信息;将下线通知信息发送至服务提供方;服务提供方用于根据下线通知信息,完成下线。
154.在一示例性实施例中,如图6所示,还提供了另一种微服务下线处理装置,应用于服务消费方,包括:结果接收模块601和状态更新模块602,其中:
155.结果接收模块601,用于接收停机器发送的目标请求结果;目标请求结果通过停机器在检测到与停机器对应的服务提供方向注册中心发送服务注销请求的情况下,将服务提供方的运行状态标记为停机状态,在检测到服务消费方向服务提供方发送服务调用请求的情况下,在服务提供方对服务调用请求的请求结果中,添加服务提供方的运行状态所得到。
156.状态更新模块602,用于根据目标请求结果,将本地服务列表中的服务提供方的运行状态更新为停机状态。
157.在一示例性实施例中,应用于服务消费方的微服务下线处理装置还包括服务调用模块,用于在本地服务列表中过滤运行状态为停机状态的服务提供方,得到目标服务列表;根据目标服务列表,向对应的服务提供方发送服务调用请求。
158.上述微服务下线处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
159.在一示例性实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括处理器、存储器、输入/输出接口(input/output,简称i/o)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种微服务下线处理方法。
160.本领域技术人员可以理解,图7中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
161.在一示例性实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
162.在一示例性实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
163.在一示例性实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
164.需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户
授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
165.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,所述计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(reram)、磁变存储器(magnetoresistive random access memory,mram)、铁电存储器(ferroelectric random access memory,fram)、相变存储器(phase change memory,pcm)、石墨烯存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器等。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。本技术所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本技术所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
166.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
167.以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1