CN117201572A - 远程服务调用方法、装置、设备及存储介质 - Google Patents

远程服务调用方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN117201572A
CN117201572A CN202311156374.8A CN202311156374A CN117201572A CN 117201572 A CN117201572 A CN 117201572A CN 202311156374 A CN202311156374 A CN 202311156374A CN 117201572 A CN117201572 A CN 117201572A
Authority
CN
China
Prior art keywords
service
instance
http
http protocol
request
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.)
Pending
Application number
CN202311156374.8A
Other languages
English (en)
Inventor
孙振宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311156374.8A priority Critical patent/CN117201572A/zh
Publication of CN117201572A publication Critical patent/CN117201572A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本申请公开了一种远程服务调用方法、装置、设备及存储介质,涉及计算机技术领域,该方法在HTTP协议实例初始化时执行HTTP传输对象实例注入,当发起远程调用时,可以调用服务调用端上的HTTP协议实例创建第一HTTP协议请求,则HTTP传输对象实例会拦截请求并进行服务地址解析相关处理,使得HTTP协议实例基于处理后的第二HTTP协议请求,来向第二服务发起服务调用。在此过程中,只需要初始化时注入HTTP传输对象实例即可,不需要重复显式调用相关的解析函数,从而无需在项目或者业务文件中增加显式调用相关的代码,这不但降低了代码冗余量,进一步地,也降低了冗余代码带来的工作量以及占用的存储资源。

Description

远程服务调用方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,提供一种远程服务调用方法、装置、设备及存储介质。
背景技术
服务发现(Service discovery)是微服务架构中关键的组成部分,它指的是在分布式系统中动态地发现和识别可用的服务实例的过程,在提供网络服务的过程中,服务调用端和服务提供端通信的前提条件就是,服务调用端需要知道服务提供端的互联网协议地址(Internet Protocol Address,IP地址)和端口(port)号,因此,服务发现更为直观的解释就是“服务调用端如何找到服务提供端的地址(如,IP地址和端口号)”。
Golang语言(Go语言)是一种静态强类型、编译型、并发型并具有垃圾回收功能的编程语言,目前在基于Golang语言的网络服务中,通常包括net/http[是Go语言标准库中的一个包,提供了基于超文本传输协议(Hypertext Transfer Protocol,HTTP)的服务调用端和服务提供端实现]和go-resty(一个基于Golang编写的HTTP/REST客户端库)两种。
实际应用中,采用上述两种方式均需要在发送HTTP协议请求前,采用显式调用方式进行函数调用来进行服务地址解析,并在通过函数调用结果获得相应的IP地址和端口号后,发起网络请求。
但是,采用显式调用方式,意味着需要在每个项目或者每个业务代码文件中增加方法调用的冗余代码,不仅需要增加程序开发的工作量,降低开发效率以及消耗更多的时间进行完维护,同时冗余代码会增加代码库的大小,占用更多的存储资源。
发明内容
本申请实施例提供一种远程服务调用方法、装置、设备及存储介质,用于降低程序开发时的冗余代码,以降低冗余代码带来的工作量以及占用的存储资源。
一方面,提供一种远程服务调用方法,应用于服务调用端,所述服务调用端上部署有第一服务,以及所述服务调用端还包括超文本传输协议HTTP协议实例,以及在所述HTTP协议实例初始化时,注入到所述HTTP协议实例的HTTP传输对象实例;该方法包括:
响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求;其中,所述第一HTTP协议请求携带所述服务调用指令指示的第二服务的目标服务标识;
调用所述HTTP传输对象实例,拦截所述第一HTTP协议请求,并基于所述目标服务标识对应的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得携带所述目标服务实例地址的第二HTTP协议请求;
调用所述HTTP协议实例,基于所述HTTP协议实例返回的所述第二HTTP协议请求向所述第二服务发起服务调用。
一方面,提供一种远程服务调用装置,应用于服务调用端,所述服务调用端上部署有第一服务,以及所述服务调用端还包括超文本传输协议HTTP协议实例,以及在所述HTTP协议实例初始化时,注入到所述HTTP协议实例的HTTP传输对象实例;该装置包括:
请求创建单元,用于响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求;其中,所述第一HTTP协议请求携带所述服务调用指令指示的第二服务的目标服务标识;
服务地址解析单元,用于调用所述HTTP传输对象实例,拦截所述第一HTTP协议请求,并基于所述目标服务标识对应的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得携带所述目标服务实例地址的第二HTTP协议请求;
服务调用单元,用于调用所述HTTP协议实例,基于所述HTTP协议实例返回的所述第二HTTP协议请求向所述第二服务发起服务调用。
在一种可能的实施方式中,所述服务地址解析单元,具体用于:
对所述目标服务标识进行基于协议方式的识别处理,获得所述目标服务标识对应的目标协议方式;
对所述目标协议方式对应的服务发现缓存信息进行缓存检测,获得所述缓存检测结果;
在缓存检测结果指示已存储了所述目标服务标识对应的目标服务实例地址时,对所述目标服务实例地址进行基于HTTP协议的转换处理,获得对应的统一资源定位符URL,并基于所述URL获得所述第二HTTP协议请求。
在一种可能的实施方式中,所述服务地址解析单元,具体用于:
对所述目标服务标识进行基于协议方式的识别处理,获得所述目标服务标识对应的目标协议方式;
调用所述目标协议方式对应的服务发现组件,从所述目标协议方式对应的服务注册中心,获取所述服务实例集合。
在一种可能的实施方式中,所述服务地址解析单元,具体用于:
采用如下方式中的任一个,基于预设的实例选取策略,从所述服务实例集合中选取出目标服务实例:
轮询所述服务实例集合包括的各个服务实例,从所述服务实例集合中选取出满足预设轮询条件的目标服务实例;
从所述服务实例集合中,选取出连接数量最少的目标服务实例;
基于所述HTTP协议实例的客户端信息,生成目标服务调用标识,并基于服务调用标识与所述各个服务实例之间的映射关系,从所述各个服务实例中选取出与所述目标服务调用标识对应的目标服务实例。
在一种可能的实施方式中,所述服务地址解析单元,还用于:
基于所述目标服务实例的目标服务实例地址,对所述服务发现缓存信息进行更新处理,以将所述目标服务标识与所述目标服务实例地址之间的映射关系添加至所述服务发现缓存信息中;
在基于目标服务实例关联的截止使用时间信息,检测到所述目标服务实例的调用已过期时,从所述服务发现缓存信息中删除所述映射关系;或者,
在检测到所述目标服务实例的目标服务实例地址发生变化时,以变化后的目标服务实例地址,对所述服务发现缓存信息进行更新处理。
在一种可能的实施方式中,所述装置还包括传输对象注入单元,用于:
响应于网络客户端创建指令,创建所述HTTP协议实例;
对所述HTTP协议实例进行基于传输对象属性的配置处理,将所述HTTP协议实例的传输对象属性参数配置为所述HTTP传输对象实例,以将所述HTTP传输对象实例注入所述HTTP协议实例。
在一种可能的实施方式中,请求创建单元,具体用于:
调用述HTTP协议实例的请求对象创建函数,基于所述目标服务标识,创建HTTP协议请求对象;
调用与所述HTTP协议实例的类型对应的请求处理函数集合,按照预设的函数处理顺序,依次对所述HTTP协议请求对象进行函数处理,获得所述第一HTTP协议请求;
则调服务调用单元,具体用于调用所述HTTP协议实例的发送函数,将所述第二HTTP协议请求发送至所述第二服务对应的目标服务实例,并接收所述目标服务实例返回的服务响应。
一方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一种方法的步骤。
一方面,提供一种计算机存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一种方法的步骤。
一方面,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述任一种方法的步骤。
本申请实施例中,在HTTP协议实例初始化时,就将HTTP传输对象实例注入到HTTP协议实例中,这样,当第一服务发起远程调用第二服务时,则可以调用第一服务所在的服务调用端上的HTTP协议实例创建第一HTTP协议请求,同时,由于HTTP协议实例注入有HTTP传输对象实例,则其HTTP传输对象实例会拦截第一HTTP协议请求并进行服务地址解析相关处理,以及将处理后的第二HTTP协议请求返回给HTTP协议实例,来向第二服务发起服务调用。在此过程中,只需要初始化时注入HTTP传输对象实例即可实现后续网络请求时的自动地址解析,不需要重复显式调用相关的解析函数,从而无需在项目或者业务文件中增加显式调用相关的代码,这不但降低了代码冗余量,进一步地,也降低了冗余代码带来的工作量以及占用的存储资源。
另一方面,HTTP传输对象实例属于用于服务地址解析的技术逻辑,而服务发现属于业务层面的业务逻辑,通过本申请实施例的方案,能够使得急速逻辑与业务逻辑分离,在实现业务时只需要关系业务层面的相互调用即可,降低了业务与技术逻辑之间的耦合性,为后续的代码维护、测试等均提供了便利基础,同时,后续进行逻辑性扩展也无需修改所有项目或者业务文件,只需针对HTTP传输对象实例相关模块进行扩展即可,提升了代码的可扩展性。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为DNS解析原理示意图;
图2为基于DNS实现的服务发现原理示意图;
图3A和图3B为服务发现的具体实现方式的示意图;
图4为本申请实施例提供的应用场景示意图;
图5为本申请实施例提供的工作流系统中远程服务调用的产品架构图;
图6为本申请实施例提供的远程服务调用方法的流程示意图;
图7为本申请实施例提供的传输对象实例注入的示意图;
图8为本申请实施例提供的HTTP传输对象实例实现服务地址解析的流程示意图;
图9A和图9B为本申请实施例提供的缓存检测过程的示意图;
图10为本申请实施例提供的服务发现过程的流程示意图;
图11A和图11B为本申请实施例提供的服务发现的改进实现方式的示意图;
图12为本申请实施例提供的远程服务调用装置的一种结构示意图;
图13为本申请实施例提供的计算机设备的组成结构示意图;
图14为应用本申请实施例的另一种计算机设备的组成结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请的说明书和权利要求书及上述附图中的术语“第一”和“第二”是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请中的“多个”可以表示至少两个,例如可以是两个、三个或者更多个,本申请实施例不做限制。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,在不做特别说明的情况下,一般表示前后关联对象是一种“或”的关系。
为便于理解本申请实施例提供的技术方案,这里先对本申请实施例使用的一些关键名词进行解释:
服务发现:是自动检测一个计算机网络内的设备及其提供的服务的过程。即服务调用端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与IP地址的情况下实现通信。
Golang语言:Golang属于一种静态类型、编译型的编程语言,它的设计目标是提供一种简单、高效、可靠的编程语言,适用于构建大型软件系统,Go语言的设计哲学是简洁、直接、易于理解和使用,Go语言支持并发编程,引入了goroutine和channel的概念,使得并发编程更加简单和高效,无论是用于Web开发、服务器编程、系统编程还是分布式系统,Go语言都有着广泛的应用和发展前景。
服务地址解析:是指获取服务实例的IP地址的过程,对于不同的协议方式可以采用不同的服务地址解析方法,例如协议方式可以包含域名系统(Domain Name System,DNS)、host配置文件、北极星服务等多种协议实现方式。
以DNS为例,其为是互联网中非常重要且常用的系统,它的主要功能是将人们便于记忆的域名(Domain Name)与可由机器识别的IP地址(IP Address)进行转换,这样可以让人们更方便地访问互联网,这个通过域名获取对应IP地址的过程称为域名解析过程,或称为主机名解析过程。
参见图1所示,为DNS解析原理示意图,如图中所示,当客户端需要访问服务器时,则需要通过DNS来实现服务地址解析,从而获得服务器的IP地址。
步骤1:客户端向本地服务器(Local DNS Server,LDNS)发起请求。
步骤2:如果LDNS没有找到对应的条目,则会找到根域名服务器(root nameserver)的DNS地址,然后向其发起请求,根域名服务器主要用来管理互联网的主目录。
步骤3:根域名服务器向LDNS返回主域名服务器(gTLD)地址。
步骤4:LDNS向gTLD服务器发起请求。
步骤5:gTLD服务器查找并返回此域名对应的权威服务器的地址,或者称为(NameServer)域名服务器,这个NameServer通常就是注册所在的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
步骤6:LDNS向权威服务器查询域名对应的IP地址。
步骤7:权威服务器返回域名对应的IP地址。
步骤8:LDNS将客户网站IP地址告知给客户端。
步骤9:客户端则可以依据该IP地址对网站的服务器发起访问。
其中,上述的步骤1~8的过程即为DNS解析获得服务器的IP地址的过程。则在服务发现流程中,也是可以通过DNS来实现的,DNS协议是极为通用的协议之一,几乎所有操作系统都会有DNS客户端实现,所以,其天然具有跨语言特性,这也是快速接入微服务体系最快的一个方式。参见图2所示,为基于DNS实现的服务发现原理示意图。其中,各个服务需要在服务注册中心进行服务注册,服务注册中心则会记录该服务的各个服务实例(instance)的IP地址和端口号,如图2所示的服务B(service B)其包含的3个服务实例(即实例1~3)均对应有自身的IP地址和端口号,并且,要基于DNS做服务发现,服务注册中心的数据应该以DNS的数据格式暴露出来,使得让任何系统的DNS客户端都可以通过DNS协议获取相应实例的服务实例集合。如图2所示当服务A(service A)需要调用(invoke)服务B时,则需要通过DNS协议从服务注册中心获得该服务B的其中一个服务实例的IP地址和端口号,进而发起调用。
下面,对本申请实施例的技术思想进行简述。
目前,基于Golang语言的服务调用,都需要在HTTP协议请求前需要采用显式调用方法来调用相应的服务地址解析方法解析获得IP地址和端口号,然后发起网络请求。通常有如下两种实现方式:
(1)基于net/http的实现方式
net/http是Go语言标准库中的一个包,提供了基于HTTP协议的客户端和服务端实现。它支持处理HTTP协议请求和响应、路由请求、处理Cookie、处理文件上传等功能,是Go语言中最常用的网络编程包之一。在客户端方面,net/http可以与服务器进行HTTP协议请求通信,支持GET、POST、PUT等多种请求方法,支持设置httpheader、timeout、cookie等请求参数,同时也提供了对https的支持。在服务端方面,net/http可以创建HTTP服务器,在指定的地址和端口上检测请求,并将其映射到不同的处理函数,因此可以用来构建RESTAPI以及其他HTTP服务。使用net/http包,开发者可以快速地搭建基于HTTP协议的网络应用程序,并使用其内置的路由和中间件等工具实现更加复杂的功能。同时,由于该包是标准库的一部分,所以无需安装额外的依赖即可使用。
参见图3A所示,为基于net/http实现服务请求的示意图。其中,首先需要初始化网络客户端(http.Client),在初始化过程中可以设置超时(Timeout)、重定向(Redirect)、缓存(Cookie)和传输对象属性(transport)等信息。在每次发起网络请求的开始时,需要先通过业务开发者自主实现的user.TransferURL方法,将不同协议的请求地址解析,获取需要的IP地址和端口号,再拼成通用的HTTP协议的请求统一资源定位符(Uniform ResourceLocator,URL),进而,再创建HTTP协议的请求对象(request),将URL、method、请求参数等信息传递到request中,并调用net/http包中的相关函数进行后续请求处理。
(2)基于go-resty的实现方式
go-resty是一个基于Golang语言编写的HTTP/REST客户端库,它提供了简单易用的应用程序接口(Application Programming Interface,API),可以让开发人员轻松地发送HTTP协议请求、设置请求头、处理响应等操作。go-resty支持GET、POST、PUT、DELETE等HTTP协议请求方法,并且可以自动处理重试、重定向、cookie等问题。除此之外,go-resty还支持高级特性,如连接池、并发请求等。在使用go-resty时,可以通过链式调用API,非常方便和灵活,该库适用于各种规模的项目,包括Web应用程序、API服务等。
参见图3B所示,为基于go-resty实现服务请求的示意图。其中,首先初始化时需要使用go-resty中的resty.New方法创建网络客户端resty.client,在初始化过程中可以设置Auth、Logger等信息。在每次发起网络请求的开始时需要先通过开发者自主实现的user.TransferURL方法,将不同协议的请求地址解析,获取需要的IP地址和端口号,再拼成通用的HTTP协议的请求URL,进而,通过resty.Client的R方法创建基于HTTP协议的request请求对象,将URL、method、请求参数等信息传递到request中,并调用go-resty中的相关函数进行后续请求处理。
可以看到,采用上述两种方式均需要在发送HTTP协议请求前,采用显式调用方式进行函数调用来进行服务地址解析,并在通过函数调用结果获得相应的IP地址和端口号后,发起网络请求。但是,这种显示调用的方式,在每次发起请求前都需要显式调用解析方法,这意味着需要在每个项目或者每个业务代码文件中增加方法调用的冗余代码,不仅需要增加程序开发的工作量,降低开发效率以及消耗更多的时间进行完维护,同时冗余代码会增加代码库的大小,占用更多的存储资源,且重复的代码可能会引起错误,从而导致程序崩溃或产生不必要的错误消息。
其次,这种方式使得业务与技术逻辑耦合度较高,修改一个部分可能会影响其他部分,这使得维护和修改代码变得困难,且紧密耦合的代码很难在其他项目或模块中重用,因为它们的逻辑和实现通常与特定的上下文紧密相关,并且紧密耦合的代码很难进行单元测试,因为它们的组件之间的依赖关系使得难以对单个组件进行隔离测试,这可能导致测试覆盖率低,从而增加潜在的错误和问题。
此外,当需要针对服务地址解析这一功能进行逻辑扩展时,则需要针对所有业务文件进行修改,代码扩展性极差。
而在实际场景中,考虑到通常网络库的客户端只需要初始化一次,每次发起请求可以使用同一个客户端,避免重复初始化,因此,可以考虑将获取IP地址的逻辑封装成新的逻辑单元,在网络库客户端初始化时一次性注入到客户端里,这样每次请求前不需要手动调用函数获取IP地址,而是客户端自动执行内部的逻辑单元获取IP地址。
基于此,本申请实施例提供了一种远程服务调用方法,该方法在HTTP协议实例初始化时,就将HTTP传输对象实例注入到HTTP协议实例中,这样,当第一服务发起远程调用第二服务时,则可以调用第一服务所在的服务调用端上的HTTP协议实例创建第一HTTP协议请求,同时,由于HTTP协议实例注入有HTTP传输对象实例,则其HTTP传输对象实例会拦截第一HTTP协议请求并进行服务地址解析相关处理,以及将处理后的第二HTTP协议请求返回给HTTP协议实例,来向第二服务发起服务调用。在此过程中,只需要初始化时注入HTTP传输对象实例即可实现后续网络请求时的自动地址解析,不需要重复显式调用相关的解析函数,从而无需在项目或者业务文件中增加显式调用相关的代码,这不但降低了代码冗余量,进一步地,也降低了冗余代码带来的工作量以及占用的存储资源。
另一方面,HTTP传输对象实例属于用于服务地址解析的技术逻辑,而服务发现属于业务层面的业务逻辑,通过本申请实施例的方案,能够使得急速逻辑与业务逻辑分离,在实现业务时只需要关系业务层面的相互调用即可,降低了业务与技术逻辑之间的耦合性,为后续的代码维护、测试等均提供了便利基础,同时,后续进行逻辑性扩展也无需修改所有项目或者业务文件,只需针对HTTP传输对象实例相关模块进行扩展即可,提升了代码的可扩展性。
下面对本申请实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本申请实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本申请实施例提供的技术方案。
本申请实施例提供的方案可以适用于涉及到远程服务调用的任意场景中,比如,可以适用于基于微服务架构的服务调用场景中。如图4所示,为本申请实施例提供的一种应用场景示意图,在该场景中,可以包括服务调用端设备101和服务提供端设备102。
服务调用端设备101为发起服务调用的设备,其可以为手机、平板电脑(PAD)、笔记本电脑、台式电脑、智能电视、智能车载设备、智能可穿戴设备、智能电视、飞行器以及服务器等设备。通常而言,终端设备101可以在实现某些业务时需要调用某一项服务,则终端设备101可以具备这一业务的实现能力。
服务提供端设备102为提供服务调用端设备101所需服务的设备,其具备实现服务调用端设备101所需服务的能力,其可以为手机、PAD、笔记本电脑、台式电脑、智能电视、智能车载设备、智能可穿戴设备、智能电视、飞行器以及服务器等设备。
其中,当服务调用端设备101或者服务提供端设备102为服务器时,则服务器例如可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、即内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云端服务器,但并不局限于此。
本申请实施例中的远程服务调用方法可以由服务调用端设备101执行,例如由服务调用端设备101在初始化HTTP协议实例时,将HTTP传输对象实例注入到该HTTP协议实例中,则当服务调用端设备101上的第一服务需要远程调用第二服务时,调用HTTP协议实例创建第一HTTP协议请求,第一HTTP协议请求携带待调用的第二服务的目标服务标识,则注入到HTTP协议实例中的HTTP传输对象实例可以拦截第一HTTP协议请求,并基于第二服务的目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得携带目标服务实例地址的第二HTTP协议请求,最终将第二HTTP协议请求返回给HTTP协议实例,以使得HTTP协议实例基于第二HTTP协议请求向第二服务发起调用。
但需要说明的是,服务调用端设备101和服务提供端设备102实质上是相对的,当其为服务提供方时,则其可以被称为服务提供端设备,也可以称之为服务端设备;而当其为服务调用方时,则其可以被称为服务调用端设备,也可以称之为客户端设备。
服务调用端设备101和服务提供端设备102均可以包括一个或多个处理器、存储器以及与交互I/O接口等。其中,服务调用端设备101的存储器中还可以存储本申请实施例提供的远程服务调用方法中各自所需执行的程序指令,这些程序指令被处理器执行时能够用以实现本申请实施例提供的远程服务调用过程。
本申请实施例中,服务调用端设备101和服务提供端设备102之间可以通过一个或者多个网络103进行直接或间接的通信连接。该网络103可以是有线网络,也可以是无线网络,例如无线网络可以是移动蜂窝网络,或者可以是无线保真(Wireless-Fidelity,WIFI)网络,当然还可以是其他可能的网络,本申请实施例对此不做限制。需要说明的是,图4所示只是举例说明,实际上终端设备和服务器的数量不受限制,在本申请实施例中不做具体限定。
在一种可能的实施方式中,本申请实施例的技术方案可以应用于包含审批流的工作流系统中,比如可以应用于工作流系统中服务A调用服务B的过程中。参见图5所示,为工作流系统中远程服务调用的产品架构图,这里以服务A为工作流(workflow)服务,服务B为activiti-rest服务,activiti-rest是Activiti的rest API,用于处理流程图有关的功能。
在该工作流系统中,向用户提供了流程编排、流程发起、任务审批以及历史流程查看等功能,流程编排是指针对创建新的工作流程时编排其具体工作节点,以及每个工作阶段的内容,可以调用其包含的workflow-admin服务实现流程模板编排和流程模板管理功能,以及调用底层的流程配置库进行工作节点的配置。
其中,workflow服务负责流程发起、任务审批以及历史流程查看等的处理,例如执行任务审批时,若需要涉及到activiti-rest服务,则workflow服务需要通过工作流对外GRPC接口来调用activiti-rest服务,activiti-rest服务通过其activiti自有库实现相应的服务,在调用activiti-rest服务的过程中则涉及到本申请实施例提供的远程服务调用方法的过程。同时,workflow服务还可以通过工作流调用外部接口调用外部服务,比如元数据、用户、即时通讯软件、会议软件以及邮件服务等,则在实现这些服务调用时,同样可以采用本申请实施例提供的远程服务调用方法。
本申请实施例的方法还可以用于云技术中以及AI技术领域中。云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
随着云技术的发展,云技术通常可以结合其他技术来实施,例如常应用于人工智能(Artificial Intelligence)技术领域中。人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算(CloudComputing)、分布式存储、大数据处理技术、预训练模型技术、操作/交互系统、机电一体化等。因此,在AI技术的实施往往伴随着云技术的应用,例如往往依赖于云计算、云存储(Cloud Storage)以及数据库(Database)等技术来实现。
云计算是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
在实际应用时,则云技术或者AI技术中涉及到服务调用时则可以基于本申请实施例所提供的方案来实现。
下面,结合上述描述的应用场景,参考附图来描述本申请示例性实施方式提供的方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。
参见图6所示,为本申请实施例提供的远程服务调用方法的流程示意图,该方法可以由计算机设备执行,该计算机设备可以是图1所示的服务调用端设备,该方法的具体实施流程如下:
步骤601:响应于HTTP协议实例的初始化指令,对所述HTTP协议实例执行注入操作,以在HTTP协议实例中注入HTTP传输对象实例。
本申请实施例中,服务调用端设备为第一服务的部署设备,即第一服务在服务调用端设备上运行,则当第一服务运行至需要远程调用第二服务时,则需要通过网络传输将调用请求传输给第二服务所在的服务提供端设备,此时,则需要经由HTTP协议实例等进行相关的网络传输处理后,发送给服务提供端设备,而在此之前,为了实现服务调用端设备的网络功能,则需要在其上创建相应的HTTP协议实例。
HTTP协议是因特网(Internet)上使用得最多、最重要的协议之一,越来越多的应用程序需要直接通过HTTP协议来访问网络资源,HTTP协议实例是服务调用端中基于HTTP协议所创建的,也可以称为HTTP客户端,简称为Http.Client,Http.Client为一种基于HTTP协议的内置库,主要用于对HTTP协议请求进行处理,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议,使客户端发送HTTP协议请求变得更加容易,而且也方便开发测试接口,大大提高开发的效率。常用HTTP协议客户端包括有:httpclient、restTemplate、okHttp等等。
本申请实施例中,HTTP传输对象实例为针对获取服务地址逻辑所自定义的传输对象实例,其也可以简称为自定义transport,其为基于Go语言的http.Transport机制所创建的。Go语言是一门简洁高效的编程语言,其标准库中包含了一个强大而灵活的网络包,可以方便地进行HTTP协议请求和响应操作。在Go语言的网络包中,http.Transport是一个重要的组件,它可以管理HTTP客户端与服务端之间的网络连接、超时设置以及重试机制等。在Go语言中,http.Transport是一个连接管理器(Connection Manager),它负责创建和管理与HTTP服务器之间的网络连接,http.Transport内部维护了一组空闲的连接(Keep-Alive连接),可以复用已存在的TCP连接,节省了连接的建立和关闭的开销。
在本申请实施例中,参见图7所示,为本申请实施例提供的传输对象注入的示意图。首先,通过自定义Transport创建操作,创建一个自定义http.Transport(即HTTP传输对象实例),并在该自定义http.Transport的内部实现HTTP协议请求拦截以及执行服务地址解析相关的逻辑。从而在检测到存在HTTP协议实例初始化操作指令时,也就是在需要创建一个新的HTTP协议实例时,调用并响应于客户端创建操作指令(即初始化操作指令),创建一个新的HTTP协议实例,并参见图7所示,通过执行注入操作,将自定义Transport注入到HTTP协议实例中。
在一种可能的实施方式中,HTTP协议实例中包含了传输对象属性参数,即Transport参数,进而可以通过对HTTP协议实例进行基于传输对象属性的配置处理,将HTTP协议实例的传输对象属性参数配置为HTTP传输对象实例,也就是上述创建的自定义Transport,以实现将HTTP传输对象实例注入HTTP协议实例的效果。参见图7所示,创建了一个自定义Transport,命名为“Custom transport”,则在执行客户端创建操作时,或者在执行客户端创建之后,可以将HTTP协议实例的Transport参数配置为“Transport:Customtransport”,从而实现注入的效果。
需要说明的是,步骤601的过程并不是每次发起HTTP协议请求都需要执行的,HTTP客户端只需要初始化一次,每次发起请求可以使用同一个HTTP客户端,并且在HTTP客户端初始化时一次性将自定义Transport被注入到HTTP客户端中,这样每次起HTTP协议请求前不需要手动调用函数获取IP地址,而是HTTP客户端自动通过自定义Transport来获取IP地址,对于开发者而言,则无需手动在业务文件代码主撰写手动调用函数获取IP地址相关的代码,从而降低了业务代码中的冗余代码。
步骤602:响应于第一服务发起的服务调用指令,调用HTTP协议实例创建第一HTTP协议请求,其中,第一HTTP协议请求携带服务调用指令指示的第二服务的目标服务标识。
当第一服务需要远程调用第二服务时,则需要通过网络传输将调用请求传输给第二服务所在的服务提供端设备,此时,则需要经由HTTP协议实例等进行相关的网络传输处理后,发送给服务提供端设备。则可以基于第一服务发起的服务调用指令,调用HTTP协议实例创建针对第一HTTP协议请求,第二服务的目标服务标识则可以作为第一HTTP协议请求的参数,被携带于第一HTTP协议请求中。
步骤603:调用HTTP传输对象实例,拦截第一HTTP协议请求,并基于目标服务标识对应的目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得携带目标服务实例地址的第二HTTP协议请求。
进而,当HTTP协议实例创建第一HTTP协议请求时,则可以触发HTTP传输对象实例拦截第一HTTP协议请求,并针对第一HTTP协议请求进行服务地址解析过程,生成对应的第二HTTP协议请求。
具体的,HTTP协议实例发起的第一HTTP协议请求中携带了需调用的第二服务的目标服务标识。其中,目标服务标识用于唯一标识第二服务,其可以依据所采用的协议方式的不同来采用不同的服务标识,例如对于DNS协议方式而言,则服务标识可以为服务的域名,或者,当为北极星协议方式时,则服务标识可以为地域(region)-城市(zone)-园区(campus)组成的标识,而采用其他的协议方式时,则服务标识可以跟随协议方式的变化而相应的不同。
第二HTTP协议请求携带了访问服务实例所需的服务地址,当采用的协议方式不同时,则包含的服务地址的内容也可以不同,通常而言,可以包含IP地址和端口号。例如,对于DNS协议方式而言,通常只需要获得IP地址即可,端口号可采用默认的端口号,因此,第二HTTP协议请求可以携带IP地址,或者,也可以携带IP地址和默认端口号。
本申请实施例中,自定义的HTTP传输对象实例用于实现HTTP协议请求的拦截以及服务地址解析过程,从而实现服务发现功能。
具体的,如图7所示,当将HTTP传输对象实例配置为HTTP协议实例的transport参数时,则当需要使用该功能时,则会自动的调用HTTP传输对象实例来对第一HTTP协议请求进行处理,从而HTTP传输对象实例可以拦截获得第一HTTP协议请求。
在一种可能的实施方式中,HTTP传输对象实例拦截第一HTTP协议请求的方式,可以是通过HTTP协议实例主动的调用HTTP传输对象实例,使得HTTP传输对象实例实现第一HTTP协议请求拦截的功能。
在一种可能的实施方式中,HTTP传输对象实例还可以通过埋点的方式,当HTTP传输对象实例触发某个函数或者方法时,触发HTTP传输对象实例对第一HTTP协议请求进行拦截。
在实际场景中,可以根据实际的需求来选择拦截的实现方式,本申请实施例对此并不进行限制。
本申请实施例中,通过HTTP传输对象实例进行服务地址解析的过程,可以是在HTTP协议请求的处理过程中一并进行的,也就是说,HTTP协议实例对第一HTTP协议请求进行处理的过程中,HTTP传输对象实例可以并行的进行服务地址解析的过程,这样,当HTTP传输对象实例完成服务地址解析时,则可以直接将解析结果应用于HTTP协议实例的处理结果中,使得两个过程并行进行,提升HTTP协议请求的发起效率。
在另一种可能的实施方式中,通过HTTP传输对象实例进行服务地址解析的过程,也可以是在HTTP协议请求的处理过程中的前后进行的。也就是说,HTTP协议实例对HTTP协议请求进行处理的过程之前,可以先通过HTTP传输对象实例进行服务地址解析,获得相应的服务地址,例如IP地址和端口号等,然后拼接形成URL返回给HTTP协议实例,以便于HTTP协议实例继续进行其他HTTP协议请求的处理。或者,HTTP协议实例对HTTP协议请求进行处理的过程之后,将得到的HTTP协议请求,通过HTTP传输对象实例进行服务地址解析,获得相应的服务地址,例如IP地址和端口号等,然后拼接形成URL返回给HTTP协议实例,以便于HTTP协议实例继续进行其他HTTP协议请求的处理,或者基于URL修改HTTP协议请求后,通过HTTP协议实例最终发送HTTP协议请求。
需要说明的是,本申请实施例中,“第一”以及“第二”等均用于区分不同的内容,并不限制实质上的先后顺序,例如“第一HTTP协议请求”和“第二HTTP协议请求”其作用在于区分不同的HTTP协议请求。
步骤604:调用HTTP协议实例,基于HTTP协议实例返回的第二HTTP协议请求向所述第二服务发起服务调用。
其中,第二HTTP协议请求中已包含了目标服务实例地址,则HTTP协议实例可以基于接收到的第二HTTP协议请求来发起后续的网络请求过程,实现第二服务的调用。
本申请实施例中,通过将HTTP传输对象实例注入到HTTP协议实例中,在HTTP协议实例发起HTTP协议请求时,则可以直接通过HTTP传输对象实例进行服务地址解析,实现服务发现的过程,而无需通过显式调用解析函数的方式,避免了过度嵌套,降低了重复调用产生的冗余代码。并且,服务发现逻辑属于技术层面逻辑,而服务调用逻辑属于业务层面逻辑,通过将服务发现逻辑与业务层面逻辑分离,使得代码更易于维护和扩展,提升了代码的灵活性,可以根据需要轻松的更改服务发现策略。并且,通过将服务解析逻辑集成为单独的模块,通过注入的方式进行集成,也便于后续对于代码进行扩展,降低项目整体的维护和重构成本。本申请实施例的HTTP传输对象实例的服务发现过程是透明的,这意味着应用程序的其他部分不需要关心服务发现的具体实现,从而可以便于为自定义的HTTP传输对象实例编写单元测试,以确保服务发现逻辑的正确性。
在一种可能的实施方式中,参见图8所示,自定义的HTTP传输对象实例可以通过如下的步骤实现服务地址解析过程:
步骤6021:基于已存储的服务发现缓存信息,针对目标服务标识进行缓存检测,服务发现缓存信息包括:服务标识与服务实例地址之间的映射关系。
本申请实施例中,为了减少与服务注册中心的交互,提高服务发现性能,HTTP传输对象实例可以实现服务发现结果的缓存,即前述的服务发现缓存信息,在该服务发现缓存信息中,可以存储有服务标识与服务实例地址之间的映射关系,例如域名与IP地址之间的映射关系,这样一来,后续当需要调用某个服务时,则可以直接查询缓存信息,提升服务发现的效率。
具体的,服务发现缓存信息可以是基于历史的服务发现结果缓存的,也可以基于实际场景的需求,选取一些较为常用的服务的服务实例进行缓存。
在实际应用时,服务发现缓存信息可以是缓存在本地的,即服务调用端自身的内存资源可以用于缓存服务发现缓存信息;或者,服务发现缓存信息还可以通过第三方缓存资源来进行缓存,则需要查询时可以通过第三方缓存查询来获知是否缓存有相应的映射关系。
本申请实施例中,针对目标服务标识进行缓存检测,是指在服务发现缓存信息中进行查询,以确定是否存在与目标服务标识相关的映射关系。参见图9A所示,为本申请实施例提供的缓存检测的一种示意图,参见图9A所示,服务发现缓存信息缓存了服务A的两个服务实例A.1和A.3的映射关系,以及服务B的服务实例B.4的映射关系以及其余服务实例的映射关系,则当从第一HTTP协议请求中确定需要调用的第二服务的目标服务标识时,则可以将其作为输入,与服务发现缓存信息中的各个映射关系进行匹配。
其中,匹配的过程可以采用一定的匹配策略来进行,例如轮询策略以及并行匹配策略等,以轮询策略为例,则匹配时可以将目标服务标识逐一与服务发现缓存信息中的各个服务标识进行匹配,确定是否命中,若命中,则表明已经缓存该目标服务标识对应的映射关系,若未命中,则表明尚未缓存该目标服务标识对应的映射关系。
参见图9A所示,示出了一种缓存检测结果的示例,即当输入的目标服务标识为“服务B”时,则可以与“服务B的服务示例B.4”这一服务标识匹配命中,也就是说缓存有服务B的服务地址信息,则可以从服务发现缓存信息获得相应的目标服务实例地址,即IP地址以及端口号等信息。
本申请实施例中,考虑到实际场景中可能存在不同协议方式的情景,则为了兼容不同协议方式的服务地址解析,则可以按照不同的协议方式进行映射关系的存储,进而在获得目标服务标识之后,则可以对目标服务标识进行基于协议方式的识别处理,获得目标服务标识对应的目标协议方式,以便于对目标协议方式对应的服务发现缓存信息进行缓存检测,获得缓存检测结果。
其中,协议方式的识别可以通过目标服务标识自身内容进行识别,例如该目标服务标识被识别为一域名时,则可以确定其采用的目标协议方式为DNS协议;或者,也可以通过存储服务标识与协议方式之间的对应关系的方式来进行识别,则当获得目标服务标识之后,则可以在已存储的对应关系中进行查询,进而获得目标服务标识对应的目标协议方式。
参见图9B所示,为本申请实施例提供的缓存检测的另一种示意图,其中,可以看到,按照协议方式的不同,各自的服务发现缓存信息可以分区域进行存储,属于协议方式1的映射关系存储于协议方式1对应分区中,属于协议方式2的映射关系存储于协议方式2对应分区中,依次类推。并且不同的协议方式,也可以按照各自的存储策略进行存储,如协议方式2无需查询端口号,则在进行存储时只需存储IP地址以及其他必要信息等。
进而,针对输入的目标服务标识“服务C”,通过检测其对应的目标协议方式,确定为“协议方式2”,则可以在协议方式2对应的服务发现缓存信息进行缓存检测,确定是否存在服务C对应的映射关系,图9B中所示为查询命中了两条映射关系,即“服务C的服务实例C.1”和“服务C的服务实例C.3”,则可以从中选择一条的目标服务实例地址作为最终的输出。在实际场景中,可以通过一定的负载均衡策略来选取其中一个服务实例。
步骤6022:基于缓存检测结果,确定是否已缓存目标服务标识对应的目标服务实例地址。
步骤6023:若步骤6022的结果为是,即缓存检测结果指示已存储了目标服务标识对应的目标服务实例地址时,基于目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得第二HTTP协议请求。
具体的,第一HTTP协议请求其携带的为服务标识,但是实际发起网络服务所需的为服务地址,例如IP地址和端口号等信息,因此需要对第一HTTP协议请求中的服务标识进行地址转换处理,将其转换为相对应的服务地址,进而方便后续的正常访问。
在一种可能的实施方式中,可以基于HTTP协议,对目标服务实例地址进行转换处理获得对应的URL,并基于URL获得第二HTTP协议请求。例如,目标服务实例地址包含IP地址和端口号时,则可以将IP地址和端口号按照通用的HTTP协议请求的拼接方式,拼接得到HTTP协议请求URL,再返回给HTTP协议实例。
在实际应用时,HTTP传输对象实例拦截的可以为第一HTTP协议请求本身,则可以将其进行转换后将第二HTTP协议请求返给HTTP协议实例,或者,HTTP传输对象实例拦截的可以为第一HTTP协议请求中的目标服务标识,则可以将转换后的目标服务实例地址发送给HTTP协议实例,例如IP地址和端口号拼接的URL。
本申请实施例中,若是进行缓存检测确定未缓存有相应的服务实例地址时,则还需要通过服务发现过程来重新获取相应的服务实例地址。因此,在基于已存储的服务发现缓存信息,针对目标服务标识进行缓存检测之后,还可以执行如下的步骤:
步骤6024:若步骤6022的结果为否,即缓存检测结果指示未缓存目标服务标识的信息时,则调用服务发现组件,从服务注册中心获取第二服务的服务实例集合。
本申请实施例中,当缓存检测确定未缓存目标服务标识的信息,也就是服务发现缓存信息中并未存储有目标服务标识对应的映射关系时,则需要重新进行服务发现过程,来确定第二服务的服务实例。
在实际场景中,服务实例提供服务时,都需要在服务注册中心进行注册,因此可以调用服务发现组件,从服务注册中心获取第二服务的服务实例集合。其中,服务实例集合可以包含第二服务所有的服务实例,也可以包含当前能够提供服务的服务实例。
在一种可能的实施方式中,考虑到实际场景中可能涉及到多种协议方式,则在进行服务实例集合的获取时,需要按照各自对应的方式来进行。
具体的,可以通过对目标服务标识进行基于协议方式的识别处理,获得目标服务标识对应的目标协议方式,进而可以调用目标协议方式对应的服务发现组件,从目标协议方式对应的服务注册中心,获取服务实例集合。例如,当目标协议方式为DNS协议时,则需要调用DNS服务发现组件,从DNS服务注册中心,获得该目标服务标识所对应的服务实例集合;或者,当目标协议方式为北极星协议时,则需要调用北极星的服务发现组件,从北极星协议的服务注册中心,获得该目标服务标识所对应的服务实例集合。
步骤6025:基于预设的实例选取策略,从服务实例集合中选取出目标服务实例。
本申请实施例中,当返回的服务实例集合中包含一个服务实例时,则该服务实例即为最终选定的目标服务实例,而当返回的服务实例集合包含多个服务实例时,则需要采用一定的实例选取策略,从中选取目标服务实例。其中,实例选取策略通常可以基于负载均衡算法来实现,从而可以在自定义的HTTP传输对象实例中实现负载均衡功能,进而可以实现对服务实例的动态负载均衡,有助于提高系统的性能和可扩展性。
具体的,实例选取策略可以采用如下方式中的任一个:
(1)轮询策略,即可以轮询服务实例集合中包括的各个服务实例,从服务实例集合中选取出满足预设轮询条件的目标服务实例,预设轮询条件可以根据实际场景中的需求进行设定,例如可以为符合服务资源要求、当前负载较低或者连接数量不超过预定阈值等,本申请实施例对此不做限制。
(2)最少连接策略,即可以从服务实例集合中,选取出连接数量最少的目标服务实例。
(3)一致性哈希(Consistent Hashing)策略,即可以基于HTTP协议实例的客户端信息,例如IP地址等可用于标识该客户端(即HTTP协议实例)的信息,来生成目标服务调用标识,并基于服务调用标识与各个服务实例之间的映射关系,从各个服务实例中选取出与目标服务调用标识对应的目标服务实例。也就是说,通过将HTTP协议实例的标识进行哈希计算,并通过一定的映射函数,将其哈希值映射到一个服务实例对应的数值区间上,则将该数值区间对应的服务实例分配给该HTTP协议实例,使得多次服务调用会尽量分配到同一服务实例上。
步骤6026:基于目标服务实例的目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得第二HTTP协议请求。
其中,这里对第一HTTP协议请求进行地址转换的过程,与前述步骤6023的过程类似,因此,可以参见前述的相关描述,这里不再进行赘述。
本申请实施例中,通过将自定义的HTTP传输对象实例可以与服务发现组件进行集成,例如与Consul、Etcd、Zookeeper等组件集成,实现从服务注册中心动态获取服务实例信息,这样可以确保HTTP协议实例始终访问可用的服务实例,提高系统的可用性和稳定性。在实际应用中,也可以需要根据具体的服务注册中心(如Consul、Etcd、Zookeeper等)和负载均衡策略进行相应的调整。
在一种可能的实施方式中,在从服务实例集合中选取出目标服务实例之后,还可以基于目标服务实例的目标服务实例地址,对服务发现缓存信息进行更新处理,以将目标服务标识与目标服务实例地址之间的映射关系添加至服务发现缓存信息中。这样一来,后续若需在再次调用目标服务时,则可以直接从缓存中获得相应的目标服务实例地址,避免频繁的与服务注册中心进行交互,提升服务调用的效率,以及提升系统整体性能。
此外,考虑到实际场景中目标服务实例地址可能会发生变化,例如服务实例重启或者异常重启时,可能为其重新分配地址,则若仍然按照缓存中的目标服务实例地址进行服务调用,则可能会出现无法正常调用的情况,因此通过设计合适的缓存策略对服务发现缓存信息进行维护,可以在保证数据一致性的同时,降低系统的延迟。
在一种可能的实施方式中,针对服务发现缓存信息中缓存的各个服务实例,可以为其配置截止使用时间信息,即表明在此时间之后,则该服务实例的信息即会失效。那么,可以在基于目标服务实例关联的截止使用时间信息,检测到目标服务实例的调用已过期时,从服务发现缓存信息中删除映射关系,或者向服务注册中心重新请求相关信息。
以前述更新后的目标服务实例为例,则将其的目标服务实例地址更新至服务发现缓存信息之后,则可以对其进行持续检测,当确定已过期时,则可以从服务发现缓存信息中删除相关信息,或者向服务注册中心重新请求相关信息。
在一种可能的实施方式中,还可以配置一定的缓存更新策略,例如在检测到目标服务实例的目标服务实例地址发生变化时,以变化后的目标服务实例地址,对服务发现缓存信息进行更新处理。
在实际场景中,当服务发现缓存信息采用第三方缓存方式进行缓存时,则采用多方共同维护的方式来维护服务发现缓存信息。例如,可以由对服务实例地址进行修改的设备主动更新服务发现缓存信息,或者,由检测到服务实例地址改变的设备更新服务发现缓存信息。
下面以一个示例来对本申请实施例的完整技术方案进行介绍。参见图10所示,为本申请实施例提供的服务发现过程的流程示意图,其中,在实现服务发现之前,需要创建自定义Transport,例如基于Go语言中的transport机制实现一个自定义的http.transport,用于拦截HTTP请求并执行服务发现逻辑,以及,初始化HTTP客户端,并设置该HTTP客户端的Transport属性参数,也就是将HTTP客户端的Transport属性参数设置为自定义的http.Transport实例。进而,如图10所示,展示了如何在Go语言中使用自定义http.Transport实现服务发现,包含如下步骤:
步骤1001:HTTP客户端发起HTTP协议请求,该请求中携带了服务标识。
步骤1002:自定义Transport拦截HTTP协议请求。
步骤1003:自定义Transport检查服务发现缓存,以确定是否包含前述服务标识指示的第二服务的实例信息。如果缓存中有服务实例信息,跳到步骤1007,如果没有,继续执行服务发现流程,即继续执行步骤1004。
步骤1004:自定义Transport调用服务发现组件,从服务注册中心获取第二服务的服务实例集合。
步骤1005:自定义Transport获取服务实例集合后,从服务实例集合中选择一个合适的目标服务实例。例如,使用轮询或最少连接等负载均衡策略进行选择。
步骤1006:自定义Transport更新服务发现缓存,将新获取的服务实例信息添加到缓存中,以便后续的使用。
步骤1007:自定义Transport对拦截的HTTP协议请求进行修改,将服务标识修改为服务实例地址,以便于后续针对选定的目标服务实例发起HTTP请求。
步骤1008:自定义Transport将修改后的HTTP协议请求返回给HTTP客户端。
步骤1009:HTTP客户端基于修改后的HTTP协议请求向选定的目标服务实例发起HTTP协议请求。请求完成后,HTTP客户端则会收到响应。
本申请实施例中,除了上述的一些功能之外,还可以更为方便的对自定义的HTTP传输对象实例进行功能扩展,例如可以通过HTTP传输对象实例实现错误处理和重试机制,以便在遇到错误(例如服务发现失败、连接超时以及请求失败等)时自动重试请求,有助于提高系统的可用性和稳定性;或者,还可以对HTTP传输对象实例进行性能优化(例如使用连接池、减少锁的使用等),可以降低性能损失,确保HTTP协议实例的性能不受影响,本申请实施例的自定义HTTP传输对象实例可以与现有系统兼容,不需要修改现有代码即可实现服务发现功能,此外,自定义HTTP传输对象实例的设计可以具有良好的可扩展性,以便在未来支持更多的功能和需求,从而兼容性和可扩展性更高。
本申请实施例中,在HTTP协议实例发起第一HTTP协议请求时,需要调用HTTP协议实例的请求对象创建函数,基于目标服务标识,创建HTTP协议请求对象,并调用与HTTP协议实例的类型对应的请求处理函数集合,按照预设的函数处理顺序,依次对HTTP协议请求对象进行函数处理,获得第一HTTP协议请求。类型可以是指实现HTTP协议实例具体方式,例如当采用net/http和go-resty网络库实现时,则请求处理函数集合包含的内容以及函数处理顺序并不相同。
进而,HTTP协议实例基于第二HTTP协议请求调用第二服务时,则可以调用HTTP协议实例的发送函数,将第二HTTP协议请求发送至第二服务对应的目标服务实例,并接收目标服务实例返回的服务响应。
其中,当采用不同的实现方式时,例如当采用net/http和go-resty网络库时,则上述的请求处理函数集合可以是不同的。基于上述的技术方案,本申请实施例分别对net/http和go-resty网络库的使用过程进行了改造升级,下面则分别进行介绍。
参见图11A所示,为上述技术方案在通用的Golang官方网络库net/http中的使用示意图。
首先需要创建自定义的用户transport,即UserTransport实例。在初始化网络客户端http.Client之后,在初始化过程中将UserTransport实例配置到http.Client的transport属性参数中,以及设置timeout,cookie等必要参数信息。则,在每次发起网络请求时的流程参见图11A中如下:
步骤A1:调用http.NewRequest函数,创建基于HTTP协议的request请求对象,将URL、请求方法(method)以及请求体(body)等信息传递到request中。其中,这里的URL可以表达为第一URL,其可以通过服务标识进行表示,例如可以为域名、Host文件名或者北极星格式的标识等,URL以及请求体等在发起请求之前则可以进行定义。
步骤A2:将request作为参数,调用http.Client的do函数处理请求。其中,图11A中最右侧为函数处理涉及到的信息,如调用do函数时,则涉及到的信息包含URL、方法、请求头(header)以及参数(Param)等,后续以此类推。
步骤A3:调用http.Client的send函数。
步骤A4:调用HTTP协议工具包的send函数。
步骤A5:调用HTTP协议工具包的setRequestCancel函数。
步骤A6:在调用过程中,通过为http.Client配置的UserTransport的RoundTrip方法处理请求。自定义的UserTransport在RoundTrip方法中加入了将不同协议的请求地址解析,获取需要的IP地址和端口后,拼接成为通用的HTTP协议请求的URL的逻辑。
下面,参见图11B所示,为上述技术方案在golang第三方网络库go-resty中的使用示意图。
首先需要自定义的用户transport,即UserTransport实例。在使用resty.New创建网络客户端之后,调用SetTransport方法将UserTransport实例注入到客户端client中,然后设置Auth,Logger等必要参数信息。在每次发起网络请求时的流程如下:
步骤B1:通过resty.Client的R方法创建基于HTTP协议的request请求对象,将URL、method,请求体等信息传递到request中。
步骤B2:调用request请求对象的Send函数(R.send)处理请求。其中,图11B中最右侧为函数处理涉及到的信息,如调用Send函数时,则涉及到的信息包含URL、方法等,后续以此类推。
步骤B3:调用request请求对象的Execute(R.Execute)函数处理请求。
步骤B4:调用resty.client.execute函数。
步骤B5:调用http包的client的do函数,以request作为参数。之后的流程则可以使用HTTP标准库进行处理。
步骤B6:在调用过程中,通过自定义transport的RoundTrip方法处理请求。自定义的UserTransport在RoundTrip方法中加入了将不同协议的请求地址解析,获取需要的IP地址和端口后,拼接成为通用的HTTP协议请求的URL的逻辑。
综上所述,本申请实施例提出了一种基于Golang语言自动解析服务IP地址实现服务发现的方式,能够满足多种业务场景中在域名、host配置文件、北极星服务等多种协议中获取IP地址的需求,同时可以支持任何自定义个性化协议,该方案可以避免传统重复多次显式调用函数的方式服务IP地址,只需要在Golang网络库初始化时,注入自定义的实现函数,在网络库客户端发起请求时,自动调用注入的函数,实现开发者无感的隐式调用。
具体而言,通过设计自定义transport结构体,可以包含服务发现组件、负载均衡策略、缓存策略等相关字段,然后实现http.RoundTripper接口的RoundTrip方法,在该方法中可以实现服务发现逻辑,包含与服务注册中心的交互,动态选择目标服务实例等,也可以实现基础的DNS解析逻辑。最后与HTTP客户端集成,在HTTP网络库初始化时将自定义transport结构体注入到客户端,在后续的业务逻辑中使用http网络库客户端发起请求时,会走transport内部的roundtrip方法,返回新的IP加端口格式的请求地址,用于http协议的网络请求,从而可以解决传统显式调用方式导致的代码冗余、逻辑耦合、扩展性差、不易测试四个方面的问题。
请参见图12,基于同一发明构思,本申请实施例还提供了一种远程服务调用装置120,应用于服务调用端,所述服务调用端上部署有第一服务,以及所述服务调用端还包括超文本传输协议HTTP协议实例,以及在所述HTTP协议实例初始化时,注入到所述HTTP协议实例的HTTP传输对象实例;该装置包括:
请求创建单元1201,用于响应于第一服务发起的服务调用指令,调用HTTP协议实例创建第一HTTP协议请求;其中,第一HTTP协议请求携带服务调用指令指示的第二服务的目标服务标识;
服务地址解析单元1202,用于调用HTTP传输对象实例,拦截第一HTTP协议请求,并基于目标服务标识对应的目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得携带目标服务实例地址的第二HTTP协议请求;
服务调用单元1203,用于调用HTTP协议实例,基于HTTP协议实例返回的第二HTTP协议请求向第二服务发起服务调用。
在一种可能的实施方式中,服务地址解析单元1202,具体用于:
基于已存储的服务发现缓存信息,针对目标服务标识进行缓存检测,服务发现缓存信息包括:服务标识与服务实例地址之间的映射关系;
在缓存检测结果指示已存储了目标服务标识对应的目标服务实例地址时,基于目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得第二HTTP协议请求。
在一种可能的实施方式中,服务地址解析单元1202,具体用于:
对目标服务标识进行基于协议方式的识别处理,获得目标服务标识对应的目标协议方式;
对目标协议方式对应的服务发现缓存信息进行缓存检测,获得缓存检测结果;
在缓存检测结果指示已存储了目标服务标识对应的目标服务实例地址时,对目标服务实例地址进行基于HTTP协议的转换处理,获得对应的统一资源定位符URL,并基于URL获得第二HTTP协议请求。
在一种可能的实施方式中,服务地址解析单元1202,还用于:
在缓存检测结果指示未缓存目标服务标识的信息时,调用服务发现组件,从服务注册中心获取第二服务的服务实例集合;
基于预设的实例选取策略,从服务实例集合中选取出目标服务实例;
基于目标服务实例的目标服务实例地址,对第一HTTP协议请求进行地址转换处理,获得第二HTTP协议请求。
在一种可能的实施方式中,服务地址解析单元1202,具体用于:
对目标服务标识进行基于协议方式的识别处理,获得目标服务标识对应的目标协议方式;
调用目标协议方式对应的服务发现组件,从目标协议方式对应的服务注册中心,获取服务实例集合。
在一种可能的实施方式中,服务地址解析单元1202,具体用于:
采用如下方式中的任一个,基于预设的实例选取策略,从服务实例集合中选取出目标服务实例:
轮询服务实例集合包括的各个服务实例,从服务实例集合中选取出满足预设轮询条件的目标服务实例;
从服务实例集合中,选取出连接数量最少的目标服务实例;
基于HTTP协议实例的客户端信息,生成目标服务调用标识,并基于服务调用标识与各个服务实例之间的映射关系,从各个服务实例中选取出与目标服务调用标识对应的目标服务实例。
在一种可能的实施方式中,服务地址解析单元1202,还用于:
基于目标服务实例的目标服务实例地址,对服务发现缓存信息进行更新处理,以将目标服务标识与目标服务实例地址之间的映射关系添加至服务发现缓存信息中;
在基于目标服务实例关联的截止使用时间信息,检测到目标服务实例的调用已过期时,从服务发现缓存信息中删除映射关系;或者,
在检测到目标服务实例的目标服务实例地址发生变化时,以变化后的目标服务实例地址,对服务发现缓存信息进行更新处理。
在一种可能的实施方式中,该装置还包括传输对象注入单元1204,用于:
响应于网络客户端创建指令,创建HTTP协议实例;
对HTTP协议实例进行基于传输对象属性的配置处理,将HTTP协议实例的传输对象属性参数配置为HTTP传输对象实例,以将HTTP传输对象实例注入HTTP协议实例。
在一种可能的实施方式中,请求创建单元1201,具体用于:
调用述HTTP协议实例的请求对象创建函数,基于目标服务标识,创建HTTP协议请求对象;
调用与HTTP协议实例的类型对应的请求处理函数集合,按照预设的函数处理顺序,依次对HTTP协议请求对象进行函数处理,获得第一HTTP协议请求;
则服务调用单元1203,具体用于调用HTTP协议实例的发送函数,将第二HTTP协议请求发送至第二服务对应的目标服务实例,并接收目标服务实例返回的服务响应。
通过上述装置,能够满足多种业务场景中在域名、host配置文件、北极星服务等多种协议中获取IP地址的需求,同时可以支持任何自定义个性化协议,该方案可以避免传统重复多次显式调用函数的方式服务IP地址,只需要在Golang网络库初始化时,注入自定义的实现函数,在网络库客户端发起请求时,自动调用注入的函数,实现开发者无感的隐式调用。
该装置可以用于执行本申请各实施例中所示的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考前述实施例的描述,不多赘述。
请参见图13,基于同一技术构思,本申请实施例还提供了一种计算机设备。在一种实施例中,该计算机设备例如可以为图4所涉及的服务器,该计算机设备如图13所示,包括存储器1301,通讯模块1303以及一个或多个处理器1302。
存储器1301,用于存储处理器1302执行的计算机程序。存储器1301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行本申请实施例的功能所需的程序等;存储数据区可存储各种功能信息和操作指令集等。
存储器1301可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1301也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者存储器1301是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1301可以是上述存储器的组合。
处理器1302,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器1302,用于调用存储器1301中存储的计算机程序时实现上述远程服务调用方法。
通讯模块1303用于与终端设备和其他服务器进行通信。
本申请实施例中不限定上述存储器1301、通讯模块1303和处理器1302之间的具体连接介质。本申请实施例在图13中以存储器1301和处理器1302之间通过总线1304连接,总线1304在图13中以粗线描述,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1304可以分为地址总线、数据总线、控制总线等。为便于描述,图13中仅用一条粗线描述,但并不描述仅有一根总线或一种类型的总线。
存储器1301中存储有计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于实现本申请实施例的远程服务调用方法,处理器1302用于执行上述各实施例的远程服务调用方法。
在另一种实施例中,计算机设备也可以是终端设备,如图4所涉及的终端设备。在该实施例中,计算机设备的结构可以如图14所示,包括:通信组件1410、存储器1420、显示单元1430、摄像头1440、传感器1450、音频电路1460、蓝牙模块1470、处理器1480等部件。
通信组件1410用于与服务器进行通信。在一些实施例中,可以包括电路无线保真(Wireless Fidelity,WiFi)模块,WiFi模块属于短距离无线传输技术,计算机设备通过WiFi模块可以帮助用户收发信息。
存储器1420可用于存储软件程序及数据。处理器1480通过运行存储在存储器1420的软件程序或数据,从而执行终端设备的各种功能以及数据处理。存储器1420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。存储器1420存储有使得终端设备能运行的操作系统。本申请中存储器1420可以存储操作系统及各种应用程序,还可以存储执行本申请实施例远程服务调用方法的代码。
显示单元1430还可用于显示由用户输入的信息或提供给用户的信息以及终端设备的各种菜单的图形用户界面(graphical user interface,GUI)。具体地,显示单元1430可以包括设置在终端设备正面的显示屏1432。其中,显示屏1432可以采用液晶显示器、发光二极管等形式来配置。显示单元1430可以用于显示服务调用页面。
显示单元1430还可用于接收输入的数字或字符信息,产生与终端设备的用户设置以及功能控制有关的信号输入,具体地,显示单元1430可以包括设置在终端设备正面的触控屏1431,可收集用户在其上或附近的触摸操作,例如点击按钮,拖动滚动框等。
其中,触控屏1431可以覆盖在显示屏1432之上,也可以将触控屏1431与显示屏1432集成而实现终端设备的输入和输出功能,集成后可以简称触摸显示屏。本申请中显示单元1430可以显示应用程序以及对应的操作步骤。
摄像头1440可用于捕获静态图像,用户可以将摄像头1440拍摄的图像通过应用发布评论。摄像头1440可以是一个,也可以是多个。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给处理器1480转换成数字图像信号。
终端设备还可以包括至少一种传感器1450,比如加速度传感器1451、距离传感器1452、指纹传感器1453、温度传感器1454。终端设备还可配置有陀螺仪、气压计、湿度计、温度计、红外线传感器、光传感器、运动传感器等其他传感器。
音频电路1460、扬声器1461、传声器1462可提供用户与终端设备之间的音频接口。音频电路1460可将接收到的音频数据转换后的电信号,传输到扬声器1461,由扬声器1461转换为声音信号输出。终端设备还可配置音量按钮,用于调节声音信号的音量。另一方面,传声器1462将收集的声音信号转换为电信号,由音频电路1460接收后转换为音频数据,再将音频数据输出至通信组件1410以发送给比如另一终端设备,或者将音频数据输出至存储器1420以便进一步处理。
蓝牙模块1470用于通过蓝牙协议来与其他具有蓝牙模块的蓝牙设备进行信息交互。例如,终端设备可以通过蓝牙模块1470与同样具备蓝牙模块的可穿戴计算机设备(例如智能手表)建立蓝牙连接,从而进行数据交互。
处理器1480是终端设备的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储器1420内的软件程序,以及调用存储在存储器1420内的数据,执行终端设备的各种功能和处理数据。在一些实施例中,处理器1480可包括一个或多个处理单元;处理器1480还可以集成应用处理器和基带处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,基带处理器主要处理无线通信。可以理解的是,上述基带处理器也可以不集成到处理器1480中。本申请中处理器1480可以运行操作系统、应用程序、用户界面显示及触控响应,以及本申请实施例的远程服务调用方法。另外,处理器1480与显示单元1430耦接。
基于同一发明构思,本申请实施例还提供一种计算机存储介质,该计算机存储介质存储有计算机程序,当该计算机程序在计算机设备上运行时,使得计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的远程服务调用方法中的步骤。
在一些可能的实施方式中,本申请提供的远程服务调用方法的各个方面还可以实现为一种计算机程序产品的形式,其包括计算机程序,当该计算机程序产品在计算机设备上运行时,计算机程序用于使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的远程服务调用方法中的步骤,例如,计算机设备可以执行各实施例的步骤。
该计算机程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的集合)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请的实施方式的计算机程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括计算机程序,并可以在计算机设备上运行。然而,本申请的计算机程序产品不限于此,在本申请件中,可读存储介质可以是任何包含或存储程序的有形介质,其包括的计算机程序可以被命令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由命令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的计算机程序,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机程序的计算机存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (15)

1.一种远程服务调用方法,其特征在于,应用于服务调用端,所述服务调用端上部署有第一服务,以及所述服务调用端还包括超文本传输协议HTTP协议实例,以及在所述HTTP协议实例初始化时,注入到所述HTTP协议实例的HTTP传输对象实例;所述方法包括:
响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求;其中,所述第一HTTP协议请求携带所述服务调用指令指示的第二服务的目标服务标识;
调用所述HTTP传输对象实例,拦截所述第一HTTP协议请求,并基于所述目标服务标识对应的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得携带所述目标服务实例地址的第二HTTP协议请求;
调用所述HTTP协议实例,基于所述HTTP协议实例返回的所述第二HTTP协议请求向所述第二服务发起服务调用。
2.如权利要求1所述的方法,其特征在于,基于所述目标服务标识对应的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得携带所述目标服务实例地址的第二HTTP协议请求,包括:
基于已存储的服务发现缓存信息,针对所述目标服务标识进行缓存检测,所述服务发现缓存信息包括:服务标识与服务实例地址之间的映射关系;
在缓存检测结果指示已存储了所述目标服务标识对应的目标服务实例地址时,基于所述目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得所述第二HTTP协议请求。
3.如权利要求2所述的方法,其特征在于,基于已存储的服务发现缓存信息,针对所述目标服务标识进行缓存检测,包括:
对所述目标服务标识进行基于协议方式的识别处理,获得所述目标服务标识对应的目标协议方式;
对所述目标协议方式对应的服务发现缓存信息进行缓存检测,获得所述缓存检测结果;
则在缓存检测结果指示已存储了所述目标服务标识对应的目标服务实例地址时,基于所述目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得所述第二HTTP协议请求,包括:
在缓存检测结果指示已存储了所述目标服务标识对应的目标服务实例地址时,对所述目标服务实例地址进行基于HTTP协议的转换处理,获得对应的统一资源定位符URL,并基于所述URL获得所述第二HTTP协议请求。
4.如权利要求2所述的方法,其特征在于,所述基于已存储的服务发现缓存信息,针对所述目标服务标识进行缓存检测之后,所述方法还包括:
在缓存检测结果指示未缓存所述目标服务标识的信息时,调用服务发现组件,从服务注册中心获取所述第二服务的服务实例集合;
基于预设的实例选取策略,从所述服务实例集合中选取出目标服务实例;
基于所述目标服务实例的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得所述第二HTTP协议请求。
5.如权利要求4所述的方法,其特征在于,所述在缓存检测结果指示未缓存所述目标服务标识的信息时,调用服务发现组件,从服务注册中心获取所述第二服务的服务实例集合,包括:
对所述目标服务标识进行基于协议方式的识别处理,获得所述目标服务标识对应的目标协议方式;
调用所述目标协议方式对应的服务发现组件,从所述目标协议方式对应的服务注册中心,获取所述服务实例集合。
6.如权利要求4所述的方法,其特征在于,所述基于预设的实例选取策略,从所述服务实例集合中选取出目标服务实例,包括采用如下方式中的任一个:
轮询所述服务实例集合包括的各个服务实例,从所述服务实例集合中选取出满足预设轮询条件的目标服务实例;
从所述服务实例集合中,选取出连接数量最少的目标服务实例;
基于所述HTTP协议实例的客户端信息,生成目标服务调用标识,并基于服务调用标识与所述各个服务实例之间的映射关系,从所述各个服务实例中选取出与所述目标服务调用标识对应的目标服务实例。
7.如权利要求4所述的方法,其特征在于,在基于预设的实例选取策略,从所述服务实例集合中选取出目标服务实例之后,所述方法还包括:
基于所述目标服务实例的目标服务实例地址,对所述服务发现缓存信息进行更新处理,以将所述目标服务标识与所述目标服务实例地址之间的映射关系添加至所述服务发现缓存信息中;
在基于目标服务实例关联的截止使用时间信息,检测到所述目标服务实例的调用已过期时,从所述服务发现缓存信息中删除所述映射关系;或者,
在检测到所述目标服务实例的目标服务实例地址发生变化时,以变化后的目标服务实例地址,对所述服务发现缓存信息进行更新处理。
8.如权利要求1~7任一所述的方法,其特征在于,在响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求之前,所述方法还包括:
响应于网络客户端创建指令,创建所述HTTP协议实例;
对所述HTTP协议实例进行基于传输对象属性的配置处理,将所述HTTP协议实例的传输对象属性参数配置为所述HTTP传输对象实例,以将所述HTTP传输对象实例注入所述HTTP协议实例。
9.如权利要求1~7任一所述的方法,其特征在于,响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求,包括:
调用所述HTTP协议实例的请求对象创建函数,基于所述目标服务标识,创建HTTP协议请求对象;
调用与所述HTTP协议实例的类型对应的请求处理函数集合,按照预设的函数处理顺序,依次对所述HTTP协议请求对象进行函数处理,获得所述第一HTTP协议请求;
则调用所述HTTP协议实例,基于所述HTTP协议实例返回的所述第二HTTP协议请求向所述第二服务发起服务调用,包括:
调用所述HTTP协议实例的发送函数,将所述第二HTTP协议请求发送至所述第二服务对应的目标服务实例,并接收所述目标服务实例返回的服务响应。
10.一种远程服务调用装置,其特征在于,应用于服务调用端,所述服务调用端上部署有第一服务,以及所述服务调用端还包括超文本传输协议HTTP协议实例,以及在所述HTTP协议实例初始化时,注入到所述HTTP协议实例的HTTP传输对象实例;所述装置包括:
请求创建单元,用于响应于所述第一服务发起的服务调用指令,调用所述HTTP协议实例创建第一HTTP协议请求;其中,所述第一HTTP协议请求携带所述服务调用指令指示的第二服务的目标服务标识;
服务地址解析单元,用于调用所述HTTP传输对象实例,拦截所述第一HTTP协议请求,并基于所述目标服务标识对应的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得携带所述目标服务实例地址的第二HTTP协议请求;
服务调用单元,用于调用所述HTTP协议实例,基于所述HTTP协议实例返回的所述第二HTTP协议请求向所述第二服务发起服务调用。
11.如权利要求10所述的装置,其特征在于,所述服务地址解析单元,具体用于:
基于已存储的服务发现缓存信息,针对所述目标服务标识进行缓存检测,所述服务发现缓存信息包括:服务标识与服务实例地址之间的映射关系;
在缓存检测结果指示已存储了所述目标服务标识对应的目标服务实例地址时,基于所述目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得所述第二HTTP协议请求。
12.如权利要求10所述的装置,其特征在于,所述服务地址解析单元,具体用于:
在缓存检测结果指示未缓存所述目标服务标识的信息时,调用服务发现组件,从服务注册中心获取所述第二服务的服务实例集合;
基于预设的实例选取策略,从所述服务实例集合中选取出目标服务实例;
基于所述目标服务实例的目标服务实例地址,对所述第一HTTP协议请求进行地址转换处理,获得所述第二HTTP协议请求。
13.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,
所述处理器执行所述计算机程序时实现权利要求1至9任一项所述方法的步骤。
14.一种计算机存储介质,其上存储有计算机程序,其特征在于,
该计算机程序被处理器执行时实现权利要求1至9任一项所述方法的步骤。
15.一种计算机程序产品,包括计算机程序,其特征在于,
该计算机程序被处理器执行时实现权利要求1至9任一项所述方法的步骤。
CN202311156374.8A 2023-09-07 2023-09-07 远程服务调用方法、装置、设备及存储介质 Pending CN117201572A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311156374.8A CN117201572A (zh) 2023-09-07 2023-09-07 远程服务调用方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311156374.8A CN117201572A (zh) 2023-09-07 2023-09-07 远程服务调用方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117201572A true CN117201572A (zh) 2023-12-08

Family

ID=88986434

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311156374.8A Pending CN117201572A (zh) 2023-09-07 2023-09-07 远程服务调用方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117201572A (zh)

Similar Documents

Publication Publication Date Title
US9298747B2 (en) Deployable, consistent, and extensible computing environment platform
US7526482B2 (en) System and method for enabling components on arbitrary networks to communicate
CN110311983B (zh) 服务请求的处理方法、装置、系统、电子设备及存储介质
CA2890411C (en) System and method for managing dedicated caches
Petrolo et al. The design of the gateway for the cloud of things
US20170154017A1 (en) Web Application Management
CN113301116A (zh) 微服务应用跨网络通信方法、装置、系统及设备
CN111258627A (zh) 一种接口文档生成方法和装置
US11290561B2 (en) Methods and systems for managing applications of a multi-access edge computing environment
US20060259523A1 (en) System and method of synchronization of internal data cache with wireless device application data repositories
US9338127B2 (en) Browser based hostname resolution for non-DNS (domain name service) and/or different DNS environments
CN114205342A (zh) 服务调试的路由方法、电子设备、介质及程序产品
US11057242B2 (en) Address system
CN115190103A (zh) 基于服务网格的服务域名解析方法、装置及设备
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
CN112243016B (zh) 一种中间件平台、终端设备、5g人工智能云处理系统及处理方法
CN116204239A (zh) 业务处理方法、装置和计算机可读存储介质
Jin et al. IoT device management architecture based on proxy
CN117201572A (zh) 远程服务调用方法、装置、设备及存储介质
US11188346B2 (en) Obtaining environment information in a computing environment
CN114830105A (zh) 一种数据读取方法以及终端
CN115378993B (zh) 支持命名空间感知的服务注册与发现的方法和系统
US11677724B1 (en) Data access and firewall tunneling using a custom socket factory
US7133872B2 (en) Method and system for unifying component metadata
US20230336530A1 (en) Framework For Configurable Per-Service Security Settings In A Forward Proxy

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication