适用于微服务的灰度调用方法、装置、设备及存储介质与流程

文档序号:28445629发布日期:2022-01-12 03:15阅读:126来源:国知局
适用于微服务的灰度调用方法、装置、设备及存储介质与流程

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.微服务返回结果确定模块,用于执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果;
50.循环控制模块,用于根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号;
51.目标业务结果确定模块,用于获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果。
52.本技术还提出了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
53.本技术还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
54.本技术的适用于微服务的灰度调用方法、装置、设备及存储介质,其中方法首先获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果,然后当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果,根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号,最后获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境;而且可以不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
附图说明
55.图1为本技术一实施例的适用于微服务的灰度调用方法的流程示意图;
56.图2为本技术一实施例的适用于微服务的灰度调用装置的结构示意框图;
57.图3为本技术一实施例的计算机设备的结构示意框图。
58.本技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
59.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
60.参照图1,本技术实施例中提供一种适用于微服务的灰度调用方法,所述方法包括:
61.s1:获取业务请求;
62.s2:获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果;
63.s3:当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程;
64.s4:采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识;
65.s5:根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程;
66.s6:执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果;
67.s7:根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍
历或获取到流程结束信号;
68.s8:获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果。
69.本实施例首先获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果,然后当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果,根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号,最后获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境;而且可以不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
70.对于s1,可以获取服务网关根据客户端或第三方应用系统的应用调用请求发送的业务请求。
71.业务请求,是调用一个或多个微服务实现业务操作的请求。
72.应用调用请求,可以是客户端或第三方应用系统针对服务端的外部调用请求发送的回调请求,也可以是客户端或第三方应用系统主动发送的调用请求。当应用调用请求是客户端或第三方应用系统针对服务端的外部调用请求发送的回调请求时,当外部调用请求携带有灰度标识时,应用调用请求中可能携带有灰度标识。
73.灰度标识,是标识符,用于标识请求需要调用灰度环境的微服务(灰度微服务)。
74.灰度微服务,是想要升级的版本的微服务。
75.相对灰度微服务有非灰度微服务。非灰度微服务,又称为正式微服务,是当前正在生产环境使用的版本的微服务。
76.微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。
77.可选的,当用户在客户端登录时,客户端根据用户标识发送业务请求。也就是说,业务请求携带有用户标识。
78.可选的,当用户在客户端登录时,客户端根据用户标识和客户端标识发送业务请求。也就是说,业务请求携带有用户标识和客户端标识。
79.用户标识可以是用户名称、用户id等唯一标识一个用户的数据。
80.客户端标识可以是客户端名称、客户端id等唯一标识一个客户端的数据。
81.客户端包括但不限于:移动电子设备的终端、移动电子设备的网页端、电脑的终端、电脑的网页端。
82.可选的,当用户在客户端没有登录时,客户端根据客户端标识发送业务请求。
83.对于s2,可以从业务流程库中获取与所述业务请求携带的请求类型对应的业务流
程。
84.业务流程库包括:请求类型和业务流程,每个请求类型对应一个业务流程。
85.业务流程中包括一个或多个节点,各个节点按业务顺序进行连接,其中,节点也就是步骤。节点是最小的执行单元。节点的类型包括但不限于:入参校验、对象转换、方法调用、发送http(超文本传输协议)请求、发送rpc(远程过程调用)请求。
86.其中,当所述业务请求携带有灰度标识时,则在所述业务流程的请求线程的上下文中添加灰度标识,并确定添加结果为添加,否则,当所述业务请求未携带有灰度标识时,则在所述业务流程的请求线程的上下文中不添加灰度标识,并确定添加结果为不添加。
87.对于s3,当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,从而为通过执行业务流程响应业务请求提供了基础。
88.对于s4,采用遍历的方式,从所述业务流程的根节点开始获取一个节点对应的微服务标识,将获取的微服务标识作为所述目标微服务标识。
89.微服务标识可以是微服务名称、微服务id等唯一标识一个微服务的数据。
90.对于s5,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,以实现将所述当前线程的上下文中的灰度标识和所述目标微服务标识传递到微服务线程;将所述微服务线程作为当前线程,以实现执行所述微服务线程。
91.可选的,采用jdk类库的(new thread()).start()方法,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程。可以理解的是,还可以采用其他方法创建微服务线程,在此不做限定。
92.对于s6,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,获取所述目标微服务标识对应的灰度微服务发送的微服务返回结果。
93.对于s7,根据各个所述微服务返回结果重复执行步骤s4至步骤s7,直至完成所述业务流程的遍历或获取到流程结束信号。其中,完成所述业务流程的遍历,也就是完成所述业务流程的所有节点的执行,此时意味着业务流程执行结束。
94.流程结束信号,也就是业务流程执行结束的信号。流程结束信号,是实现本技术的程序文件根据业务流程的执行状态主动发送的信号。
95.对于s8,获取所述业务流程对应的返回结果,将获取的返回结果作为所述业务请求对应的目标业务结果。
96.将目标业务结果发送给所述业务请求对应的目标应用。目标应用可以是客户端,也可以是第三方应用系统。
97.在一个实施例中,上述获取业务请求的步骤,包括:
98.获取服务网关发送的所述业务请求,其中,所述服务网关用于:
99.s11:获取目标应用发送的应用调用请求;
100.s12:判断所述应用调用请求是否携带有所述灰度标识;
101.s13:当所述应用调用请求携带有所述灰度标识时,根据所述应用调用请求携带的信息发送所述业务请求,其中,将所述灰度标识作为所述业务请求携带的参数;
102.s14:当所述应用调用请求未携带所述灰度标识时,判断所述应用调用请求是否携带有目标用户标识;
103.s15:当携带有所述目标用户标识时,根据所述目标用户标识获取用户信息,得到
目标用户信息,根据所述目标用户信息判断所述目标用户标识对应的目标用户是否为灰度用户,当所述目标用户为所述灰度用户时,根据所述灰度标识和所述应用调用请求携带的信息发送所述业务请求;
104.s16:当未携带有所述目标用户标识时,根据所述应用调用请求携带的应用标识判断所述目标应用是否为灰度应用,当所述目标应用是所述灰度应用时,根据所述灰度标识和所述应用调用请求携带的信息发送所述业务请求,当所述目标应用不是所述灰度应用时,根据所述应用调用请求携带的信息发送所述业务请求。
105.本实施例通过服务网关在应用调用请求携带灰度标识时在业务请求中添加灰度标识,然后在应用调用请求不携带灰度标识时,根据应用调用请求携带的信息确定是否在业务请求中添加灰度标识,从而为后续将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行提供了基础。
106.对于s11,目标应用可以根据用户请求发送应用调用请求,也可以是根据预设条件发送应用调用请求。预设条件是目标应用在实现功能达到的触发调用请求的条件。
107.可选的,服务端向目标应用发送外部调用请求;当外部调用请求中携带有灰度标识时,则根据灰度标识和外部调用请求生成应用调用请求,此时的应用调用请求中携带有灰度标识;当外部调用请求中没有携带灰度标识时,则根据外部调用请求生成应用调用请求,此时的应用调用请求中没有携带灰度标识。
108.可以理解的是,当外部调用请求中携带有灰度标识时,也可以根据外部调用请求生成应用调用请求,此时的应用调用请求中没有携带灰度标识。
109.对于s13,当所述应用调用请求携带有所述灰度标识时,意味着所述应用调用请求的响应需要灰度微服务,因此根据所述应用调用请求携带的信息发送所述业务请求,其中,将所述灰度标识作为所述业务请求携带的参数,从而实现将灰度标识从应用调用请求传递到所述业务请求中。
110.对于s14,当所述应用调用请求未携带所述灰度标识时,意味着需要判断所述应用调用请求是否需要灰度微服务进行响应,因此先判断所述应用调用请求是否携带有目标用户标识。
111.目标用户标识,也就是所述应用调用请求对应的用户标识。
112.可选的,所述当所述应用调用请求未携带所述灰度标识时,判断所述应用调用请求是否携带有目标用户标识的步骤,包括:当所述应用调用请求未携带所述灰度标识时,获取请求号与灰度标识列表,将所述应用调用请求携带的与外部调用请求对应的请求号在灰度请求号列表中进行请求号查找;当请求号查找成功时,根据所述应用调用请求携带的信息发送所述业务请求,其中,将所述灰度标识作为所述业务请求携带的参数;当请求号查找失败时,判断所述应用调用请求是否携带有目标用户标识。
113.可以理解是,应用调用请求是回调请求时,应用调用请求一定携带有与外部调用请求对应的请求号。
114.对于s15,当携带有所述目标用户标识时,意味着已经明确了目标用户,为了提高用户体验,需要根据目标用户对应的用户信息确定是否采用灰度微服务提供服务,因此,获取所述目标用户标识对应的用户信息作为目标用户信息,采用预设灰度用户判断规则,根据所述目标用户信息判断所述目标用户标识对应的目标用户是否为灰度用户;当所述目标
用户信息符合预设灰度用户判断规则的要求时,确定所述目标用户为所述灰度用户,否则,确定所述目标用户为非灰度用户;当所述目标用户为所述灰度用户时,意味着所述目标用户需要灰度微服务提供给服务,因此,根据所述灰度标识和所述应用调用请求携带的信息发送所述业务请求,以实现将所述灰度标识添加到所述业务请求中。
115.对于s16,当未携带有所述目标用户标识时,意味着没有明确目标用户,因此可以根据发送所述应用调用请求的应用标识确定是否采用灰度微服务提供服务;采用预设灰度应用判断规则,根据所述应用调用请求携带的应用标识判断所述目标应用是否为灰度应用,当所述应用调用请求携带的应用标识满足预设灰度应用判断规则的要求时,确定所述目标应用是所述灰度应用,否则,确定所述目标应用是非灰度应用;当所述目标应用是所述灰度应用时,根据所述灰度标识和所述应用调用请求携带的信息发送所述业务请求,以实现将所述灰度标识添加到所述业务请求中;当所述目标应用不是所述灰度应用时,根据所述应用调用请求携带的信息发送所述业务请求,以实现不在所述业务请求中添加灰度标识。
116.在一个实施例中,上述根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果的步骤,包括:
117.s21:判断所述业务请求是否携带所述灰度标识;
118.s22:当所述业务请求携带有所述灰度标识时,则在所述业务流程的所述请求线程的上下文中添加所述灰度标识,确定所述添加结果为添加;
119.s23:当所述业务请求未携带所述灰度标识时,则确定所述添加结果为未添加。
120.本实施例实现根据所述业务请求是否携带所述灰度标识,确定是否在所述业务流程的请求线程的上下文中添加灰度标识,从而实现了将灰度标识从业务请求传递到请求线程,为后续将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行提供了基础。
121.对于s21,判断所述业务请求携带的参数中是否包括所述灰度标识,当包括所述灰度标识时确定所述业务请求携带有所述灰度标识,否则,确定所述业务请求没有携带所述灰度标识。
122.对于s22,当所述业务请求携带有所述灰度标识时,意味着所述业务请求需要灰度微服务提供服务,则在所述业务流程的所述请求线程的上下文中添加所述灰度标识,并且确定所述添加结果为添加。从而实现了将灰度标识从业务请求传递到请求线程。
123.对于s23,当所述业务请求未携带所述灰度标识时,意味着所述业务请求不需要灰度微服务提供服务,直接确定所述添加结果为未添加。
124.在一个实施例中,上述根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程的步骤,包括:
125.s51:从所述业务流程中获取与所述目标微服务标识对应的线程创建类型;
126.s52:根据与所述目标微服务标识对应的所述线程创建类型、所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成所述微服务线程。
127.本实施例根据与所述目标微服务标识对应的所述线程创建类型、所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成所述微服务线程,实现了针对不同线程创建类型都可以将所述当前线程的上下文中的所述灰度标识传递到新生成的微服务线
程中,从而将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境。
128.对于s51,从所述目标微服务标识在所述业务流程中对应的节点中获取与所述目标微服务标识对应的线程创建类型。
129.线程创建类型包括:当前线程创建和线程池创建。
130.对于s52,采用与所述目标微服务标识对应的线程创建类型对应的线程创建方法,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成所述微服务线程。
131.在一个实施例中,上述根据与所述目标微服务标识对应的所述线程创建类型、所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成所述微服务线程的步骤,包括:
132.s521:当所述线程创建类型为当前线程创建时,执行所述当前线程创建所述微服务线程,其中,在创建所述微服务线程时,将所述当前线程的上下文中的所述灰度标识和所述目标微服务标识作为所述微服务线程携带的参数;
133.s522:当所述线程创建类型为线程池创建时,执行所述当前线程,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成线程创建任务;
134.s523:将所述线程创建任务发送给线程池;
135.s524:在所述线程池中,根据所述线程创建任务携带的所述灰度标识和所述目标微服务标识生成所述微服务线程。
136.本实施例在所述线程创建类型为当前线程创建时,直接将灰度标识传递给新生成的微服务线程,在线程创建类型为线程池创建时,先将灰度标识封装到线程创建任务中,从而将灰度标识传递到线程池,线程池将线程创建任务中的灰度标识传递到新生成的微服务线程,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境。
137.对于s521,当所述线程创建类型为当前线程创建时,意味着所述目标微服务标识对应的微服务的线程是采用当前线程直接创建的,因此执行所述当前线程创建所述微服务线程,将所述当前线程的上下文中的所述灰度标识和所述目标微服务标识作为新创建的所述微服务线程携带的参数。
138.对于s522,当所述线程创建类型为当前线程创建时,意味着所述目标微服务标识对应的微服务的线程是采用线程池创建的,因此执行所述当前线程,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成线程创建任务,从而将灰度标识和目标微服务标识封装到线程创建任务中。
139.对于s523,执行所述当前线程,将所述线程创建任务发送给线程池。
140.对于s524,在所述线程池中,对所述线程创建任务进行所述灰度标识和所述目标微服务标识的解析,根据解析得到的所述灰度标识和所述目标微服务标识生成所述微服务线程。
141.在一个实施例中,上述执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果的步骤,包括:
142.s611:执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的所
述灰度微服务;
143.s612:获取所述目标微服务标识对应的所述灰度微服务发送的所述微服务返回结果,其中,所述目标微服务标识对应的所述灰度微服务用于:
144.s6121:根据微服务数据库和所述业务请求进行业务实现,得到业务实现数据;
145.s6122:将所述灰度标识和所述业务实现数据作为关联数据更新所述微服务数据库;
146.s6123:根据所述业务实现数据发送所述微服务返回结果。
147.本实施例调用所述目标微服务标识对应的灰度微服务提供给为服务,并且将所述灰度标识和所述业务实现数据作为关联数据更新所述微服务数据库中,从而实现了将所述当前线程中的灰度标识传递到所述微服务数据库中。
148.对于s611,执行所述当前线程,根据所述业务请求携带的参数调用所述目标微服务标识对应的所述灰度微服务。
149.对于s612,所述目标微服务标识对应的所述灰度微服务,根据所述业务请求携带的参数完成业务实现后,根据业务实现得到的结果发送所述微服务返回结果。
150.对于s6121,所述目标微服务标识对应的所述灰度微服务,根据微服务数据库和所述业务请求进行业务实现,将业务实现得到的数据作为业务实现数据。
151.对于s6122,所述目标微服务标识对应的所述灰度微服务,将所述灰度标识和所述业务实现数据作为关联数据更新所述微服务数据库,从而将微服务数据库中的数据采用灰度标识标识出灰度微服务产生的数据,实现了不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
152.所述微服务数据库中存储的是微服务执行产生的数据。
153.可以理解的是,所述微服务数据库中的数据不带灰度标识时,意味着该数据不是灰度微服务产生的数据。
154.对于s6123,根据所述业务实现数据确定需要返回的数据,将确定的需要返回的数据作为所述微服务返回结果进行发送。
155.在一个实施例中,上述执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果的步骤,还包括:
156.s621:当所述目标微服务标识对应的所述灰度微服务是定时任务微服务时,所述目标微服务标识对应的所述灰度微服务用于根据所述灰度标识、微服务数据库和所述业务请求进行定时任务创建,得到目标定时任务;
157.s622:根据所述目标定时任务发送所述微服务返回结果。
158.本实施例将当前线程中的灰度标识传递到目标定时任务,使需要灰度微服务的目标定时任务可以在后续执行时调用带有灰度标识的数据和/或灰度微服务,从而实现了将当前线程的灰度标识传递到定时任务中,避免灰度流量逃逸到非灰度环境。
159.对于s621,当所述目标微服务标识对应的所述灰度微服务是定时任务微服务时,所述目标微服务标识对应的所述灰度微服务根据所述灰度标识、微服务数据库和所述业务请求进行定时任务创建,在创建定时任务时,将灰度标识作为定时任务的参数,并且将创建的定时任务作为目标定时任务。
160.对于s622,目标定时任务根据自己携带的灰度标识,从微服务数据库中获取带灰
度标识的数据,然后根据所述业务请求的参数和获取的带灰度标识的数据进行任务执行,将执行完成得到的数据作为所述微服务返回结果。
161.参照图2,本技术还提出了一种适用于微服务的灰度调用装置,所述装置包括:
162.请求获取模块100,用于获取业务请求;
163.添加结果确定模块200,用于获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果;
164.业务流程启动模块300,用于当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程;
165.目标微服务标识确定模块400,用于采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识;
166.微服务线程确定模块500,用于根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程;
167.微服务返回结果确定模块600,用于执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果;
168.循环控制模块700,用于根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号;
169.目标业务结果确定模块800,用于获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果。
170.本实施例首先获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果,然后当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果,根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号,最后获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境;而且可以不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
171.参照图3,本技术实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于储存适用于微服务的灰度调用方法等数据。该计算机设备的网络
接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种适用于微服务的灰度调用方法。所述适用于微服务的灰度调用方法,包括:获取业务请求;获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果;当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程;采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识;根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程;执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果;根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号;获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果。
172.本实施例首先获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果,然后当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果,根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号,最后获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境;而且可以不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
173.本技术一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种适用于微服务的灰度调用方法,包括步骤:获取业务请求;获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加灰度标识,得到添加结果;当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程;采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识;根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程;执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果;根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号;获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果。
174.上述执行的适用于微服务的灰度调用方法,首先获取与所述业务请求对应的业务流程,根据所述业务请求携带的信息确定是否在所述业务流程的请求线程的上下文中添加
灰度标识,得到添加结果,然后当所述添加结果为添加时,将所述请求线程作为当前线程,执行所述当前线程启动所述业务流程,采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识,根据所述当前线程的上下文中的所述灰度标识和所述目标微服务标识生成微服务线程,将所述微服务线程作为所述当前线程,执行所述当前线程,根据所述业务请求调用所述目标微服务标识对应的灰度微服务,得到微服务返回结果,根据所述微服务返回结果重复执行所述采用遍历的方式,从所述业务流程中获取一个节点对应的微服务标识作为目标微服务标识的步骤,直至完成所述业务流程的遍历或获取到流程结束信号,最后获取所述业务流程的执行结果作为所述业务请求对应的目标业务结果,从而实现了将灰度标识在各个线程中传递,使灰度流量始终采用灰度微服务进行执行,避免灰度流量逃逸到非灰度环境;而且可以不需添加新的硬件,在非灰度环境的硬件上,采用逻辑分隔的形式创建灰度环境,降低了灰度发布的成本。
175.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
176.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
177.以上所述仅为本技术的优选实施例,并非因此限制本技术的专利范围,凡是利用本技术说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本技术的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1