CN110324177B - 一种微服务架构下的服务请求处理方法、***及介质 - Google Patents
一种微服务架构下的服务请求处理方法、***及介质 Download PDFInfo
- Publication number
- CN110324177B CN110324177B CN201910469325.7A CN201910469325A CN110324177B CN 110324177 B CN110324177 B CN 110324177B CN 201910469325 A CN201910469325 A CN 201910469325A CN 110324177 B CN110324177 B CN 110324177B
- Authority
- CN
- China
- Prior art keywords
- service
- micro
- list
- client
- eureka
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种微服务架构下的服务请求处理方法、***及介质,本发明方法针对当前Spring Cloud架构中Eureka Client本地缓存服务的全量地址信息导致服务请求处理效率不高等问题,提出了一种改进思路:通过在Eureka Client的配置文件中定义它所依赖的服务名列表,当Eureka Client发送请求从Eureka Server获取服务地址时,配置文件中声明的依赖服务名列表会作为参数传递给Eureka Server,Eureka Server根据传入的列表参数作匹配,最后只返回Eureka Client所依赖的服务地址。采用本发明可以达到降低网络开销、内存使用开销以及提升请求处理效率等效果。
Description
技术领域
本发明涉及微服务技术,具体涉及一种微服务架构下的服务请求处理方法、***及介质。
背景技术
微服务架构是一项在云计算环境中部署应用和服务的新型技术。服务注册中心是微服务架构中的一个重要组件,它主要实现微服务的注册和发现等功能,维护了微服务的名称以及对应的地址端口等键值对信息。在微服务的运行架构中,微服务之间的请求调用通常包含两个步骤:第一,通过服务注册中心查询被调用微服务的地址信息(包括IP和端口等);第二,根据获得的地址信息,通过RESTful API或RPC调用等方式实现消息的传递与服务调用的触发。Spring Cloud是当前微服务技术的主流框架之一,该框架为了缓解服务调用请求对服务注册中心(Eureka Server)的访问压力,服务订阅者(Eureka Client)会周期性的以增量的方式从Eureka Server中获取已注册服务的信息,并缓存在Eureka Client本地缓存中,服务调用时优先在Eureka Client本地缓存中查询相关的服务信息。
针对现有的Spring Cloud架构,图1给出了一个微服务请求处理示意图,其中Eureka Server负责维护已注册的服务列表,源主机(被认为是一个Eureka Client)部署了微服务A为服务消费方(Service Consumer),目标主机(也被认为是一个Eureka Client)部署了被微服务B为服务提供方(Service Provider)。Eureka Client向Eureka Server发出请求以完成服务注册、续约和下线等操作,请求时发送的数据包括服务名、机器IP、端口号、域名等。
如图1所示,源主机向Eureka Server获取目标主机中部署的微服务B的服务注册信息,并通过远程调用与服务提供方进行通信,从而实现微服务A对微服务B的调用。在服务注册过程中,目标主机通过register()接口调用实现服务的注册,注册时传递instanceInfo对象信息给Eureka Server,instanceInfo对象中包含了微服务的instanceId、微服务名(appName)、机器IP地址(ipAddr)和端口号(port)等信息;EurekaClient的本地缓存了Eureka Server发送过来的已注册服务列表信息,列表中记录了每个微服务的instanceInfo对象信息。
参见图2,具体的请求处理步骤如下:
1)源主机的源微服务(微服务A)对目标主机上的目标微服务(微服务B)的调用请求;
2)源主机读取其本地缓存,在其维护的已注册服务列表信息中,通过微服务B的appName遍历查询其对应的ipAddr和port信息,通过调用getRegisteredApplications()方法实现从其缓存中读取微服务实例数据;若在本地缓存的服务列表中查询到微服务B对应的ipAddr和port信息,则跳转到步骤5);
3)源主机向Eureka Server发出服务获取请求,通常是增量请求,异常情况下才是全量请求,比如缓存为空或一致性Hash值不同,Eureka Server将相关的instanceInfo列表信息返回给源主机;Eureka Server开放了两个Get类型的RESTful接口用于返回服务地址信息,分别是全量地址接口/{version}/apps和增量地址接口/{version}/apps/delta。每一个Eureka Client全量获取信息(或增量获取信息)的请求都是由它们响应;
4)源主机获取到Eureka Server返回的注册服务信息后,通过写内存方式将服务信息写入到源主机缓存中;
5)源主机根据获取到的服务B的appName、ipAddr和port等信息,通过RESTful API或者RPC协议进行远程调用。
如上所述,可知Spring Cloud架构中每一个Eureka Client的本地缓存中存放的都是已注册服务的全量信息,往往会带来网络资源和Eureka Client端内存资源的过渡消耗的问题。
综上所述,在现有的Spring Cloud架构中服务请求处理流程存在如下问题:知Spring Cloud架构中每一个Eureka Client的本地缓存中存放的都是已注册服务的全量信息,往往会带来网络资源和Eureka Client端内存资源的过渡消耗的问题。即无论EurekaClient是否需要调用该服务,都存放在本地缓存中,这种方式会带来网络资源和EurekaClient端内存资源的过度消耗。当微服务数量的规模比较大时,尤其是在多数据中心的情况下,该问题就会被放大,对于服务请求处理的响应时间有很大影响。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种微服务架构下的服务请求处理方法、***及介质,采用本发明可以达到降低网络开销、内存使用开销以及提升请求处理效率等效果。
为了解决上述技术问题,本发明采用的技术方案为:
一种微服务架构下的服务请求处理方法,服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的步骤包括:
1)接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
2)根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,所述近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
优选地,步骤2)的详细步骤包括:
2.1)判断客户端Eureka Client发送服务获取请求所采用的接口是全量地址接口还是增量地址接口,如果是全量地址接口则跳转执行步骤2.2);否则跳转执行步骤2.3);
2.2)选择查找服务列表为全部的服务信息;跳转执行步骤2.4);
2.3)选择查找服务列表为近期变更队列recentlyChangedQueue中的服务信息;跳转执行步骤2.4);
2.4)将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端EurekaClient。
优选地,步骤2.4)的详细步骤包括:
2.4.1)构建用于存储与服务依赖列表相关的微服务集合的返回列表ReturnList;
2.4.2)将查找服务列表记为ServiceList,将服务依赖列表记为DependList,构建哈希桶HashSet并遍历服务依赖列表DependList,将其中的每一个元素DependList(i)添加到哈希桶HashSet进行去重;然后再遍历查找服务列表ServiceList,将其中的每一个元素ServiceList(j)的微服务名称appName添加到哈希桶HashSet中,如果已经存在该元素即发生冲突则将ServiceList(j)加入到返回列表ReturnList中;
2.4.3)获取返回列表ReturnList中相关微服务的一致性Hash值,将返回列表ReturnList及其对应的一致性Hash值返回给发出服务获取请求的客户端Eureka Client。
优选地,源主机本地的源微服务对目标主机上的目标微服务调用请求步骤包括:
S1)源主机读取其本地缓存,通过目标微服务的微服务名称appName遍历查询其对应的IP地址ipAddr和端口port信息,若在本地缓存的服务列表中查询到目标微服务对应的IP地址ipAddr和端口port信息,则跳转到步骤S6);否则,跳转执行下一步;
S2)源主机从本地预设的配置文件中读取源微服务的服务依赖列表;
S3)源主机判断服务获取请求的类型,若缓存为空或一致性Hash值不同,则判定服务获取请求的类型是全量调用,否则判定服务获取请求的类型为增量调用;源主机作为客户端Eureka Client根据服务获取请求的类型向服务注册中心Eureka Server的不同服务接口发出服务获取请求,同时将源微服务的服务依赖列表作为参数传递给服务注册中心Eureka Server;
S4)源主机收到服务注册中心Eureka Server返回的源微服务可调用的目标微服务,通过写内存方式将源微服务可调用的目标微服务存入到源主机的缓存中;
S5)源主机根据源微服务可调用的目标微服务获取目标微服务的微服务名称appName、IP地址ipAddr和端口port信息;
S6)源微服务通过RESTful API或者RPC协议进行远程调用目标微服务。
优选地,步骤S4)的详细步骤包括:
S4.1)源主机收到服务注册中心Eureka Server返回的返回列表ReturnList及其对应的一致性Hash值,所述返回列表ReturnList包含源微服务可调用的目标微服务信息;将返回列表ReturnList与本地缓存的服务集合进行增量合并;
S4.2)源主机在将增量服务集合合并到缓存中的服务列表中后,计算本地缓存的一致性Hash值,比较该值和服务注册中心Eureka Server发送的一致性Hash值是否一致;若一致性Hash值相同,说明两端的信息是一致的;跳转执行步骤S5);若一致性Hash值不同,说明两端的信息不同,则清空本地缓存,跳转执行步骤S3)以发送全量调用的服务获取请求。
优选地,步骤S4.1)中将返回列表ReturnList与本地缓存的服务集合进行增量合并具体是指源主机遍历返回列表ReturnList,比较返回列表ReturnList中每一个微服务的状态类型actionType,如果状态类型actionType是ADDED就在自己的缓存中添加这个微服务,如果是DELETED就从缓存中删除掉该微服务。
本发明还提供一种微服务架构下的服务请求处理***,包括计算机设备,该计算机设备被编程以执行本发明前述微服务架构下的服务请求处理方法的步骤。
本发明还提供一种微服务架构下的服务请求处理***,包括计算机设备,该计算机设备的存储介质上被编程以执行本发明前述微服务架构下的服务请求处理方法的计算机程序。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程以执行本发明前述微服务架构下的服务请求处理方法的计算机程序。
本发明还提供一种微服务架构下的服务请求处理***,包括服务注册中心EurekaServer,所述服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的程序模块包括:
请求接受程序模块,用于接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
请求匹配程序模块,用于根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,所述近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
本发明通过在客户端Eureka Client的配置文件中定义它依赖的服务列表,当客户端Eureka Client发送请求从服务注册中心Eureka Server获取服务地址时配置文件中声明的依赖服务名列表会作为参数传递给服务注册中心Eureka Server,服务注册中心Eureka Server根据传入的列表参数作匹配且只返回客户端Eureka Client所依赖的服务地址。和现有技术相比,具有下述优点:
1)降低网络开销:服务注册中心Eureka Server向客户端Eureka Client仅传输其依赖服务的实例信息,在微服务数量很大时,可大大减少不相关服务的实例信息的传输,降低对网络资源的开销;
2)降低内存使用开销:客户端Eureka Client的本地缓存中仅存储其依赖服务的实例信息,而不需要存取全量微服务的实例信息,在微服务数量很大时,可降低客户端Eureka Client对内存资源的使用;
3)提升请求处理效率:由于客户端Eureka Client本地缓存中仅存储其依赖服务的实例信息,减少了对不必要服务信息的存储,在通过本地缓存查找服务的地址信息时,可减小时间开销,提升服务请求处理效率。
附图说明
图1是现有微服务调用原理示意图。
图2是现有微服务调用流程示意图。
图3是本发明实施例中微服务调用原理示意图。
图4是本发明实施例中微响应客户端Eureka Client的服务获取请求的流程示意图。
图5是本发明实施例中微的微服务调用流程示意图。
具体实施方式
如图3和图4所示,本实施例微服务架构下的服务请求处理方法中,服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的步骤包括:
1)接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
2)根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
如图4和图5所示,本实施例中步骤2)的详细步骤包括:
2.1)判断客户端Eureka Client发送服务获取请求所采用的接口是全量地址接口还是增量地址接口,如果是全量地址接口则跳转执行步骤2.2);否则跳转执行步骤2.3);
2.2)选择查找服务列表为全部的服务信息;跳转执行步骤2.4);
2.3)选择查找服务列表为近期变更队列recentlyChangedQueue中的服务信息;跳转执行步骤2.4);
2.4)将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端EurekaClient。
本实施例中,步骤2.4)的详细步骤包括:
2.4.1)构建用于存储与服务依赖列表相关的微服务集合的返回列表ReturnList;
2.4.2)将查找服务列表记为ServiceList,将服务依赖列表记为DependList,构建哈希桶HashSet并遍历服务依赖列表DependList,将其中的每一个元素DependList(i)添加到哈希桶HashSet进行去重;然后再遍历查找服务列表ServiceList,将其中的每一个元素ServiceList(j)的微服务名称appName添加到哈希桶HashSet中,如果已经存在该元素即发生冲突则将ServiceList(j)加入到返回列表ReturnList中;
2.4.3)获取返回列表ReturnList中相关微服务的一致性Hash值,将返回列表ReturnList及其对应的一致性Hash值返回给发出服务获取请求的客户端Eureka Client。
如图4和图5所示,从客户端Eureka Client的角度,本实施例微服务架构下的服务请求处理方法中源主机本地的源微服务(微服务A)对目标主机上的目标微服务(微服务B)调用请求步骤包括:
S1)源主机读取其本地缓存,通过微服务B的微服务名称appName遍历查询其对应的IP地址ipAddr和端口port信息,若在本地缓存的服务列表中查询到微服务B对应的IP地址ipAddr和端口port信息,则跳转到步骤S6);否则,跳转执行下一步;源主机读取其本地缓存可通过调用getRegisteredApplications()方法实现从其缓存中读取微服务实例数据;
S2)源主机从本地预设的配置文件中读取微服务A的服务依赖列表;
S3)源主机判断服务获取请求的类型,若缓存为空或一致性Hash值不同,则判定服务获取请求的类型是全量调用,否则判定服务获取请求的类型为增量调用;源主机作为客户端Eureka Client根据服务获取请求的类型向服务注册中心Eureka Server的不同服务接口发出服务获取请求,同时将微服务A的服务依赖列表作为参数传递给服务注册中心Eureka Server;
Eureka Server开放了两个Get类型的RESTful接口用于返回服务地址信息,分别是:
全量地址接口/{version}/apps
增量地址接口/{version}/apps/delta
每一个Eureka Client全量获取信息(或增量获取信息)的请求都是由它们响应。
S4)源主机收到服务注册中心Eureka Server返回的微服务A可调用的目标微服务,通过写内存方式将微服务A可调用的目标微服务存入到源主机的缓存中;
S5)源主机根据微服务A可调用的目标微服务获取微服务B的微服务名称appName、IP地址ipAddr和端口port信息;
S6)微服务A通过RESTful API或者RPC协议进行远程调用微服务B。
本实施例中,微服务实例的信息通过instanceInfo类对象存储,每一个微服务有47个属性,记为M1(instanceId,appName...version),其中instanceId是微服务实例的唯一标识符,appName是微服务的名称,同一个微服务可以有多个实例。除此之外,instanceInfo类对象还包含IP地址ipAddr、端口port、主机名称hostName、状态类型actionType等属性信息。
以login-service为例,login-service的instanceInfo对象定义如下:
上述实例中,“instanceInfo”说明这是一个服务的instanceInfo对象,“instanceId”是微服务实例的编号,在大型分布式***中,考虑到***的负载均衡和高可用,一个微服务会有不同的运行实例,往往通过该属性进行标识;“appName”表示微服务的名称,“ipAddr”表示微服务实例的IP地址,“port”表示微服务实例的端口号,“hostName”表示微服务所在容器的主机名,“actionType”表示微服务的状态,如ADDED代表是新增的微服务、DELETE代表微服务下线。
源主机向其配置文件中读取服务依赖列表,该列表中包含依赖服务的服务名,以登录服务login-service为例,该列表定义如下:
其中,“login-service”表示微服务名,Depends表示“login-service”依赖服务列表,“login-database”表示登录数据库服务,“select-database”表示查询数据库服务,“login-process”表示登录操作的流程处理服务。
本实施例中,步骤S4)的详细步骤包括:
S4.1)源主机收到服务注册中心Eureka Server返回的返回列表ReturnList及其对应的一致性Hash值,所述返回列表ReturnList包含微服务A可调用的目标微服务信息;将返回列表ReturnList与本地缓存的服务集合进行增量合并;
S4.2)源主机在将增量服务集合合并到缓存中的服务列表中后,计算本地缓存的一致性Hash值,比较该值和服务注册中心Eureka Server发送的一致性Hash值是否一致;若一致性Hash值相同,说明两端的信息是一致的;跳转执行步骤S5);若一致性Hash值不同,说明两端的信息不同,则清空本地缓存,跳转执行步骤S3)以发送全量调用的服务获取请求。
本实施例中,步骤S4.1)中将返回列表ReturnList与本地缓存的服务集合进行增量合并具体是指源主机遍历返回列表ReturnList,比较返回列表ReturnList中每一个微服务的状态类型actionType,如果状态类型actionType是ADDED就在自己的缓存中添加这个微服务,如果是DELETED就从缓存中删除掉该微服务。
若为全量请求,服务注册中心Eureka Server将全部服务的instanceInfo信息和SDL中的服务列表进行比较,通过调用return_service()方法得到返回列表ReturnList,并将返回列表ReturnList返回给Eureka Client。以login-service为例,return_service()方法的具体流程如下:
第一步,在本地配置文件中读取login-service的服务依赖列表,根据上述定义,可知服务依赖列表中包括的微服务为login-database、select-database、login-process;
第二步,客户端Eureka Client通过调用AbstractJerseyEurekaHttpClient(String urlPath,String[]regions,List list)方法实现向服务注册中心EurekaServer发出服务获取请求,其中List参数即为获得的SDL列表;
第三步,假设服务注册中心Eureka Server中的已注册服务实例集合为{login-database1、login-database2、visit-portal1、visit-portal2、visit-video1、select-database1、login-process1、login-process2、write-database1、write-database2},且当前获取请求为全量请求;此时Eureka Server通过return_service()比较List中的服务列表和已注册的服务实例集合,以login-database为例,可知login-database1和login-database2的服务名均为login-database,因此这两个服务实例列加入到返回的服务实例集合中;依次类推,可知最终返回的服务实例集合为{login-database1、login-database2、select-database1、login-process1、login-process2};
若为全量请求,若为增量请求,服务注册中心Eureka Server将近期变更队列recentlyChangedQueue存储的服务实例的InstanceInfo信息和服务依赖列表中,并通过return_service()方法计算近期变更队列recentlyChangedQueue和服务依赖列表中的服务列表进行比较;通过调用return_service()方法得到列表,并将返回给客户端EurekaClient。
综上所述,本实施例微服务架构下的服务请求处理方法对客户端Eureka Client从服务注册中心Eureka Server获取的服务对象的机制进行改进优化,首先在客户端Eureka Client的配置文件中定义它的服务依赖列表(Service Depend List,SDL),该列表定义了该微服务可调用的目标微服务信息;然后,客户端Eureka Client通过读取配置文件获得服务依赖列表SDL;客户端Eureka Client从获取到服务依赖列表SDL后,向服务注册中心Eureka Server发送服务获取请求时,将服务依赖列表SDL也发送过去。服务注册中心Eureka Server在收到客户端Eureka Client的请求后,将需要返回的微服务列表信息(服务实例信息对象集合,服务instanceInfo对象集合)和服务依赖列表SDL进行匹配,筛选出与其相关的服务instanceInfo对象集合,即该服务可调用的服务集合,并将该instanceInfo集合信息返回给客户端Eureka Client并存到其本地缓存中。该方案可解决客户端Eureka Client获取大量无关服务地址的问题,仅存储与其依赖服务的地址信息,在降低网络数据传输量的同时,减小了客户端Eureka Client本地缓存的空间使用和访问时的开销,提升Spring Cloud微服务架构的整体性能。此外,服务依赖列表SDL仅保存在每一个客户端,而不是作为注册信息保存在服务注册中心Eureka Server,若保存在服务注册中心Eureka Server,响应一个微服务请求需要查询它的依赖信息,将增加了额外的时间开销。相比现有框架,本实施例微服务架构下的服务请求处理方法做了如下改进:第一,在客户端Eureka Client的配置文件中,增加了服务依赖列表的定义;第二,客户端EurekaClient发送服务获取请求时,传递了从配置文件中读取到的服务依赖列表信息;第三,服务注册中心Eureka Server依据服务依赖列表信息筛选并返回与其相关的实例信息对象信息。因此,本实施例微服务架构下的服务请求处理方法能够实现高效的微服务请求处理,采用本实施例方法可以达到降低网络开销、内存使用开销以及提升请求处理效率等效果。。
此外,本实施例还提供一种微服务架构下的服务请求处理***,包括计算机设备,该计算机设备被编程以执行本实施例前述微服务架构下的服务请求处理方法的步骤。该计算机设备可以为服务注册中心Eureka Server或者客户端Eureka Client。此外,本实施例还提供一种微服务架构下的服务请求处理***,包括计算机设备,该计算机设备的存储介质上被编程以执行本实施例前述微服务架构下的服务请求处理方法的计算机程序。该计算机设备可以为服务注册中心Eureka Server或者客户端Eureka Client。此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程以执行本实施例前述微服务架构下的服务请求处理方法的计算机程序。该计算机可读存储介质可以为服务注册中心Eureka Server或者客户端Eureka Client上的计算机可读存储介质。此外,本实施例还提供一种微服务架构下的服务请求处理***,包括服务注册中心Eureka Server,所述服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的程序模块包括:
请求接受程序模块,用于接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
请求匹配程序模块,用于根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,所述近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种微服务架构下的服务请求处理方法,其特征在于,服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的步骤包括:
1)接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
2)根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,所述近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
2.根据权利要求1所述的微服务架构下的服务请求处理方法,其特征在于,步骤2)的详细步骤包括:
2.1)判断客户端Eureka Client发送服务获取请求所采用的接口是全量地址接口还是增量地址接口,如果是全量地址接口则跳转执行步骤2.2);否则跳转执行步骤2.3);
2.2)选择查找服务列表为全部的服务信息;跳转执行步骤2.4);
2.3)选择查找服务列表为近期变更队列recentlyChangedQueue中的服务信息;跳转执行步骤2.4);
2.4)将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端EurekaClient。
3.根据权利要求2所述的微服务架构下的服务请求处理方法,其特征在于,步骤2.4)的详细步骤包括:
2.4.1)构建用于存储与服务依赖列表相关的微服务集合的返回列表ReturnList;
2.4.2)将查找服务列表记为ServiceList,将服务依赖列表记为DependList,构建哈希桶HashSet并遍历服务依赖列表DependList,将其中的每一个元素DependList(i)添加到哈希桶HashSet进行去重;然后再遍历查找服务列表ServiceList,将其中的每一个元素ServiceList(j)的微服务名称appName添加到哈希桶HashSet中,如果已经存在该元素即发生冲突则将ServiceList(j)加入到返回列表ReturnList中;
2.4.3)获取返回列表ReturnList中相关微服务的一致性Hash值,将返回列表ReturnList及其对应的一致性Hash值返回给发出服务获取请求的客户端Eureka Client。
4.一种微服务架构下的服务请求处理方法,其特征在于,源主机本地的源微服务对目标主机上的目标微服务调用请求步骤包括:
S1)源主机读取其本地缓存,通过目标微服务的微服务名称appName遍历查询其对应的IP地址ipAddr和端口port信息,若在本地缓存的服务列表中查询到目标微服务对应的IP地址ipAddr和端口port信息,则跳转到步骤S6);否则,跳转执行下一步;
S2)源主机从本地预设的配置文件中读取源微服务的服务依赖列表;
S3)源主机判断服务获取请求的类型,若缓存为空或一致性Hash值不同,则判定服务获取请求的类型是全量调用,否则判定服务获取请求的类型为增量调用;源主机作为客户端Eureka Client根据服务获取请求的类型向服务注册中心Eureka Server的不同服务接口发出服务获取请求,同时将源微服务的服务依赖列表作为参数传递给服务注册中心EurekaServer;
S4)源主机收到服务注册中心Eureka Server返回的源微服务可调用的目标微服务,通过写内存方式将源微服务可调用的目标微服务存入到源主机的缓存中;
S5)源主机根据源微服务可调用的目标微服务获取目标微服务的微服务名称appName、IP地址ipAddr和端口port信息;
S6)源微服务通过RESTful API或者RPC协议进行远程调用目标微服务。
5.根据权利要求4所述的微服务架构下的服务请求处理方法,其特征在于,步骤S4)的详细步骤包括:
S4.1)源主机收到服务注册中心Eureka Server返回的返回列表ReturnList及其对应的一致性Hash值,所述返回列表ReturnList包含源微服务可调用的目标微服务信息;将返回列表ReturnList与本地缓存的服务集合进行增量合并;
S4.2)源主机在将增量服务集合合并到缓存中的服务列表中后,计算本地缓存的一致性Hash值,比较该值和服务注册中心Eureka Server发送的一致性Hash值是否一致;若一致性Hash值相同,说明两端的信息是一致的;跳转执行步骤S5);若一致性Hash值不同,说明两端的信息不同,则清空本地缓存,跳转执行步骤S3)以发送全量调用的服务获取请求。
6.根据权利要求5所述的微服务架构下的服务请求处理方法,其特征在于,步骤S4.1)中将返回列表ReturnList与本地缓存的服务集合进行增量合并具体是指源主机遍历返回列表ReturnList,比较返回列表ReturnList中每一个微服务的状态类型actionType,如果状态类型actionType是ADDED就在自己的缓存中添加这个微服务,如果是DELETED就从缓存中删除掉该微服务。
7.一种微服务架构下的服务请求处理***,包括计算机设备,其特征在于,该计算机设备被编程以执行权利要求1~6中任意一项所述微服务架构下的服务请求处理方法的步骤。
8.一种微服务架构下的服务请求处理***,包括计算机设备,其特征在于,该计算机设备的存储介质上被编程以执行权利要求1~6中任意一项所述微服务架构下的服务请求处理方法的计算机程序。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程以执行权利要求1~6中任意一项所述微服务架构下的服务请求处理方法的计算机程序。
10.一种微服务架构下的服务请求处理***,其特征在于,包括服务注册中心EurekaServer,所述服务注册中心Eureka Server响应客户端Eureka Client的服务获取请求的程序模块包括:
请求接受程序模块,用于接收客户端Eureka Client发送的服务获取请求及其服务依赖列表,所述服务依赖列表包括服务获取请求中的源微服务可调用的目标微服务信息;
请求匹配程序模块,用于根据服务获取请求的类型为全量请求或增量请求选择查找服务列表为全部的服务信息或者近期变更队列recentlyChangedQueue中的服务信息,将查找服务列表和服务依赖列表进行匹配,筛选出与服务依赖列表相关的微服务集合作为源微服务可调用的目标微服务返回给发出服务获取请求的客户端Eureka Client,所述近期变更队列recentlyChangedQueue为服务注册中心Eureka Server上用于缓存近期发生变更的微服务的队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910469325.7A CN110324177B (zh) | 2019-05-31 | 2019-05-31 | 一种微服务架构下的服务请求处理方法、***及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910469325.7A CN110324177B (zh) | 2019-05-31 | 2019-05-31 | 一种微服务架构下的服务请求处理方法、***及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110324177A CN110324177A (zh) | 2019-10-11 |
CN110324177B true CN110324177B (zh) | 2022-05-24 |
Family
ID=68119251
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910469325.7A Active CN110324177B (zh) | 2019-05-31 | 2019-05-31 | 一种微服务架构下的服务请求处理方法、***及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110324177B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110601994B (zh) * | 2019-10-14 | 2021-07-16 | 南京航空航天大学 | 云环境下微服务链感知的负载均衡方法 |
CN112685403A (zh) * | 2019-10-18 | 2021-04-20 | 上海同是科技股份有限公司 | 一种隐患排查数据存储的高可用框架***及其实现方法 |
CN113051303A (zh) * | 2019-12-27 | 2021-06-29 | 北京国双科技有限公司 | 业务数据处理方法、装置、电子设备以及存储介质 |
CN111245916B (zh) * | 2020-01-07 | 2023-03-17 | 苏宁云计算有限公司 | 基于微服务网关的服务调用方法、服务编排方法及装置 |
US11252025B2 (en) * | 2020-04-16 | 2022-02-15 | Juniper Networks, Inc. | Model driven configuration management for microservices |
CN111917838B (zh) * | 2020-07-14 | 2023-08-29 | 浙江大华技术股份有限公司 | 基于微服务的处理方法及装置、存储介质、电子装置 |
CN111858101B (zh) * | 2020-07-28 | 2023-05-26 | 深圳平安医疗健康科技服务有限公司 | 面向云架构***的适配方法、装置、设备及存储介质 |
CN112019387A (zh) * | 2020-09-02 | 2020-12-01 | 上海卓钢链科技有限公司 | 一种分布式服务注册中心构建方法 |
CN112486625B (zh) * | 2020-10-22 | 2023-06-23 | 北京中软国际信息技术有限公司 | 一种基于服务融合中间件的服务融合方法 |
CN112311786B (zh) * | 2020-10-28 | 2023-06-13 | 北京水滴科技集团有限公司 | 一种服务请求处理方法、装置、存储介质及计算设备 |
CN112286503B (zh) * | 2020-10-28 | 2024-05-28 | 平安科技(深圳)有限公司 | 多注册中心的微服务统一管理方法、装置、设备及介质 |
CN113742100B (zh) * | 2021-08-27 | 2024-05-31 | 欧电云信息科技(江苏)有限公司 | 基于微服务架构的服务调用方法、***、设备及介质 |
CN115118703B (zh) * | 2022-07-28 | 2024-03-08 | 中国工商银行股份有限公司 | 服务调用方法及装置、电子设备 |
CN117555708B (zh) * | 2024-01-11 | 2024-03-26 | 中国人民解放军国防科技大学 | Windows微服务框架程序调用方法、***和设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016099346A1 (en) * | 2014-12-15 | 2016-06-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and deployment module for managing a container to be deployed on a software platform |
CN108427581A (zh) * | 2018-02-07 | 2018-08-21 | 平安普惠企业管理有限公司 | ***微服务化方法及终端设备 |
CN108446111A (zh) * | 2018-03-26 | 2018-08-24 | 国家电网公司客户服务中心 | 一种基于Spring cloud的微服务构建方法 |
CN108667925A (zh) * | 2018-05-04 | 2018-10-16 | 北京天元创新科技有限公司 | 一种web应用无缝接入分布式***的方法和*** |
CN109587272A (zh) * | 2018-12-30 | 2019-04-05 | 深圳云天励飞技术有限公司 | 一种微服务的优化方法、装置和电子设备 |
CN109814909A (zh) * | 2019-01-18 | 2019-05-28 | 南京绿新能源研究院有限公司 | 基于Spring cloud微服务架构云化SCADA***的方法 |
-
2019
- 2019-05-31 CN CN201910469325.7A patent/CN110324177B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016099346A1 (en) * | 2014-12-15 | 2016-06-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and deployment module for managing a container to be deployed on a software platform |
CN108427581A (zh) * | 2018-02-07 | 2018-08-21 | 平安普惠企业管理有限公司 | ***微服务化方法及终端设备 |
CN108446111A (zh) * | 2018-03-26 | 2018-08-24 | 国家电网公司客户服务中心 | 一种基于Spring cloud的微服务构建方法 |
CN108667925A (zh) * | 2018-05-04 | 2018-10-16 | 北京天元创新科技有限公司 | 一种web应用无缝接入分布式***的方法和*** |
CN109587272A (zh) * | 2018-12-30 | 2019-04-05 | 深圳云天励飞技术有限公司 | 一种微服务的优化方法、装置和电子设备 |
CN109814909A (zh) * | 2019-01-18 | 2019-05-28 | 南京绿新能源研究院有限公司 | 基于Spring cloud微服务架构云化SCADA***的方法 |
Non-Patent Citations (1)
Title |
---|
微服务框架下的交通信息化架构;郑锦男等;《信息技术》;20190117;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110324177A (zh) | 2019-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110324177B (zh) | 一种微服务架构下的服务请求处理方法、***及介质 | |
JP5828760B2 (ja) | キャッシュを最適化するための方法とシステム | |
CN107317830B (zh) | 一种服务发现的处理方法及装置 | |
CN103051740B (zh) | 域名解析方法、dns服务器及域名解析*** | |
US20040261082A1 (en) | System and method for managing cached objects using notification bonds | |
CN104717314B (zh) | 一种ip管理方法及***、客户端、服务器 | |
US20040246911A1 (en) | Network location management system | |
CN109167840B (zh) | 一种任务推送方法、节点自治服务器及边缘缓存服务器 | |
CN111901705B (zh) | 一种olt设备的omci功能虚拟化*** | |
WO2007056336A1 (en) | System and method for writing data to a directory | |
US20160191652A1 (en) | Data storage method and apparatus | |
CN109753244A (zh) | 一种Redis集群的应用方法 | |
CN109873855A (zh) | 一种基于区块链网络的资源获取方法和*** | |
US9760370B2 (en) | Load balancing using predictable state partitioning | |
CN109451089A (zh) | 一种访问方法、装置、计算机设备及计算机存储介质 | |
CN112839076A (zh) | 数据存储、读取方法、网关、电子设备及存储介质 | |
CN107181773A (zh) | 分布式存储***的数据存储及数据管理方法、设备 | |
CN111796772B (zh) | 缓存的管理方法、缓存节点及分布式存储*** | |
JPH1021174A (ja) | データ転送システム | |
US20150019755A1 (en) | Data-centric communications system, node, and data forwarding method | |
CN103164410B (zh) | 一种文件存储及操作的方法,存储设备和*** | |
CN113505111B (zh) | 一种共享目录挂载方法及分布式网络附加存储*** | |
CN111488324B (zh) | 一种基于消息中间件的分布式网络文件***及其工作方法 | |
CN111614750B (zh) | 一种数据更新方法、***、设备及存储介质 | |
CN103685367A (zh) | 离线下载***和方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |