欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 请求处理方法、系统、装置、电子设备及存储介质独创技术59828字

请求处理方法、系统、装置、电子设备及存储介质

2021-02-04 06:56:48

请求处理方法、系统、装置、电子设备及存储介质

  技术领域

  本申请涉及通信技术领域,更具体地,涉及一种请求处理方法、系统、装置、电子设备及存储介质。

  背景技术

  随着互联网应用的日益增多,面对海量的用户请求,可以通过分布式系统架构提供应用服务端的通用解决方案。通常情况下,分布式系统架构中,服务实例注册的中心化,从而可能产生较大的网络开销。

  发明内容

  鉴于上述问题,本申请提出了一种请求处理方法、系统、装置、电子设备及存储介质,以改善上述问题。

  第一方面,本申请实施例提供了一种请求处理方法,应用于请求处理系统中的目标代理端,所述请求处理系统包括多个代理端以及多个服务实例,所述目标代理端为所述多个代理端中的任意一个,所述多个代理端中的每个代理端与其他至少一个代理端通信连接,每个代理端注册有一个或多个服务实例,所述方法包括:接收请求发起方发送的请求,所述请求发起方为在所述目标代理端注册的服务实例;从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方;将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  第二方面,本申请实施例提供了一种请求处理系统,包括多个代理端以及多个服务实例,所述多个代理端中的每个代理端与其他至少一个代理端通信连接,每个代理端注册有一个或多个服务实例,其中,任意一个服务实例作为请求发起方时,用于向注册的代理端发送请求;代理端用于接收请求发起方发送的请求;从在所述代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方;将所述请求发送给所述请求接收方;所述请求接收方用于对接收到的请求进行处理。

  第三方面,本申请实施例提供了一种请求处理装置,应用于请求处理系统中的目标代理端,所述请求处理系统包括多个代理端以及多个服务实例,所述目标代理端为所述多个代理端中的任意一个,所述多个代理端中的每个代理端与其他至少一个代理端通信连接,每个代理端注册有一个或多个服务实例,所述装置包括:请求接收模块,用于接收请求发起方发送的请求,所述请求发起方为在所述目标代理端注册的服务实例;查找模块,用于从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方;请求发送模块,用于将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  第四方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储器;代理端以及一个或多个服务实例,所述代理端以及所述一个或多个服务实例被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个服务实例在所述代理端注册,所述代理端被所述处理器执行用于执行上述的方法。

  第五方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述的方法。

  本申请实施例提供的请求处理方法、系统、装置、电子设备及存储介质,应用于请求处理系统中的代理端。该请求处理系统中包括多个代理端以及多个服务实例,每个代理端注册有一个或多个服务实例。代理端可以接收在其进行注册的作为请求发起方的服务实例发送的请求,并从在其注册的服务实例中查找对该请求具有处理能力的服务实例作为请求接收方,将接收到的请求发送给请求接收方。在该技术方案中,请求处理系统中包括多个代理端,各个代理端分别注册有服务实例,服务实例与其注册的代理端进行交互,避免了在中心化的情况下,系统中所有服务实例都要注册到同一服务发现组件而带来的较大网络开销。

  附图说明

  为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

  图1示出了本申请实施例提供的请求处理系统的示意图。

  图2示出了本申请实施例提供的请求处理系统的网络架构图。

  图3示出了本申请一实施例提供的请求处理方法的流程图。

  图4示出了本申请另一实施例提供的请求处理方法的流程图。

  图5示出了本申请一实施例提供的服务类型映射表的示意图。

  图6示出了本申请实施例提供的一请求发送示意图。

  图7示出了本申请实施例提供的另一请求发送示意图。

  图8示出了本申请实施例提供的请求处理装置的功能模块图。

  图9示出了本申请实施例提供的电子设备的结构框图。

  图10是本申请实施例的用于保存或者携带实现根据本申请实施例的请求处理方法的程序代码的存储单元。

  具体实施方式

  为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。

  单机的计算能力和存储能力有限,面对海量的数据,需要很多机器共同协作处理,如通过分布式系统处理。分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统可以从宏观看也是对外提供类似单机的服务,但是分布式系统由多个机器协同处理,可以突破单机的处理瓶颈,完成单个计算机无法完成的计算、存储任务,实现利用更多的机器,处理更多的数据。

  在分布式系统中,根据具体的功能或者业务的不同,可以拆分出不同的服务,即每种服务可以用于实现一种功能,或者说处理一种业务。例如,用于管理用户信息的用户管理服务,用于处理订单的订单处理服务,用于向用户发送消息的消息发送服务等等,在本申请实施例中并不限定。

  其中,每种服务可以部署一个或多个实例,用于实现该服务所要实现的功能。当一种服务中部署多个实例时,该多个实例可以具有相同的功能,可以同时运行,共同处理接收到的请求,即同一服务的多个实例都是用于实现该服务所要实现的功能。其中,每个服务实例可以理解为运行于安装该服务实例的电子设备的一个进程、一个程序或者说一个软件的服务器客户端。

  同时,在分布式系统内部,不同的服务之间也可能会有依赖关系,一个用户请求可能需要多种服务之间进行通信,通信的方式一般是请求与回复,如一个服务向另一个服务发起请求,另一个服务对该请求进行回复。由于分别式系统中服务实例较多,通常需要进行管理。

  分布式系统中可以配置服务发现组件(Service Discovery),即,管理各服务实例的信息,如服务实例的名称,IP地址,端口等。在配置有服务发现组件的情况下,分布式系统中的各个服务实例都在服务发现组件进行注册,从而需要发起请求的请求发起方可以从服务发现组件中注册的服务实例,确定该请求所要发送的服务实例,将请求发送到所要发送的服务实例。

  发明人发现,在分布式系统中,各个服务实例可能配置在不同的计算机,并且,也可能配置在不同机房的计算机,不同地区的不同机房的计算机。在通过服务发现组件这种中心化注册方式进行注册时,服务实例和服务发现组件可能不在一个计算机,可能不在一个机房,也可能不在一个地区,因此,服务实例在服务发现组件进行注册时,可能跨设备注册,跨机房注册,产生较大的网络开销。

  因此,发明人经过研究,提出了本申请实例提供的请求处理方法、系统、装置、电子设备及存储介质。其中,如图1及图2所示,在请求处理系统100中包括多个代理端101,每个代理端用于服务实例102的注册以及管理。请参见图1,不同的代理端101分别注册有一个或多个服务实例102,每个代理端101与其他至少一个代理端101通信连接,实现对服务实例102管理的去中心化,有效减小网络开销。

  其中,代理端101与其他至少一个代理端101的通信连接,为直接连接,即相互通信连接的代理端之间没有其他代理端。代理端可以是一个agent对象,可以是服务实例102之间通信的投递组件。代理端101与代理端101之间的通信连接方式并不限定,如可以是TCP连接。服务实例102注册到代理端101,可以是与代理端101进行通信连接,并通过该通信连接将自身的注册信息注册到代理端101,如图1中与代理端相连接的服务实例为注册到代理端的服务实例。服务实例与代理端之间的连接方式在本申请实施例中也可以并不限定,如可以是TCP连接。每个代理端可以对注册到其中的服务实例进行管理,并处理服务实例发送的请求。

  具体的,请参见图3,示出了本申请实施例提供的请求处理方法,该请求处理方法应用于请求处理系统中的代理端。其中,任意一个代理端都可以执行该请求处理方法,本申请实施例以一个代理端为例,说明代理端对注册的服务实例的请求的处理。为例便于描述,本申请实施例中定义该用于说明的代理端为目标代理端。可以理解的,目标代理端可以是请求处理系统中的任意一个代理端。如图3所示,该请求处理方法可以包括如下步骤。

  步骤S110:接收请求发起方发送的请求,所述请求发起方为在所述目标代理端注册的服务实例。

  在该请求处理系统中,任意一个服务实例为了实现对应的功能,都可以发送需要其他服务实例进行处理的请求。其中,服务实例发起请求时,可以将请求发送到其注册的代理端,即目标代理端可以接收到在该目标代理端注册的服务实例发送的请求。

  在本申请实施例中,定义发起请求的服务实例为请求发起方,即目标代理端接收到请求发起方发送的请求。

  步骤S120:从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方。

  在目标代理端中,可能注册有多个服务实例,因此,目标代理端接收到请求时,可以从在该目标代理端注册的服务实例中,查找对该请求具有处理能力的服务实例,定义该查找到的服务实例为请求接收方,表式该查找到的服务实例用于接收该请求。

  步骤S130:将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  目标代理端将接收到的该请求发送给请求接收方,用于请求接收方对该请求进行处理。

  在本申请实施例中,在请求处理系统中,可以包括多个代理端,每个代理端与其他代理端中的至少一个相连接,每个代理端可以注册一个或多个服务实例。服务实例需要发起请求时,将请求发送到其所注册的代理端,代理端在接收到请求时,从注册的服务实例中查找对该请求具有处理能力的服务实例进行处理,从而实现请求处理系统中的服务实例分散注册在不同的代理端,不同的代理端对注册其中的服务实例进行管理,降低了服务实例注册以及请求发送过程中的网络开销。

  本申请还提供了另一实施例,相比于前一实施例,在该实施例中,还包括代理端在注册的服务实例中没有查找到对接收到的请求具有处理能力的服务实例的处理方式。如图4所示,该实施例提供的方法包括:

  步骤S210:接收请求发起方发送的请求,所述请求发起方为在所述目标代理端注册的服务实例。

  在本申请实施例中,定义向代理端发送请求的服务实例为请求发起方,任意一个服务实例都可以作为请求发起方,向该服务实例所注册的代理端发起请求。

  其中,服务实例在需要其他服务实例提供某项服务时,可以向代理端发送请求。该请求表示服务实例需要其他服务实例所要提供的服务,或者说需要其他服务实例实现的功能或者所要完成的任务。

  在本申请实施例中,该请求中可以包括请求类型,该请求类型表示该请求的请求类型,表示需要其他服务实例完成的哪一类请求,或者说表示需要其他服务实例实现何种功能,完成何种任务。该请求类型的表示方式在本申请实施例中并不限定,例如每种请求类型可以对应有类型标识,不同请求类型对应的类型标识不同。

  可选的,在本申请实施例中,该请求中还可以包括请求内容,可以表示具体需要其他服务实例实现的功能的内容,提供的具体服务内容,或者说完成的业务的内容。

  例如,一个服务实例的功能为向生日的用户发送消息,在发送消息之前,需要先获取到用户的信息,才能确定向哪些用户发送消息。则该服务实例可以作为请求发起方,向注册的代理端发送一个用于获取用户信息的请求,该请求中包括请求类型为用户信息类型,表示要向其他服务实例获取用户信息;该请求包括的请求内容可以是具体要获取的信息内容,从而指示其他服务实例返回其具体要获取的信息内容。

  步骤S220:从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方。若在所述目标代理端注册的服务实例中查找到对所述请求具有处理能力的服务实例,执行步骤S230;若在所述目标代理端注册的服务实例中没有查找到对所述请求具有处理能力的服务实例,执行步骤S240。

  目标代理端接收到注册在该目标代理端的服务实例发送的请求时,可以判断自身注册的服务实例是否能够处理该请求。

  在本申请实施例中,目标代理端可以在自身注册的服务实例中查找对该请求具有处理能力的服务实例。若查找到对该请求具有处理能力的服务实例,则可以确定自身注册的服务实例中存在能够处理该请求的服务实例,以该查找到的服务实例作为请求接收方。可选的,目标代理端可以从注册于自身的所有服务实例中查找对该请求具有处理能力的服务实例,也可以从注册于自身的除请求接收方以外的所有服务实例中查找对该请求具有处理能力的服务实例。

  其中,每个服务实例可以支持一种或多种请求类型,服务实例所支持的请求类型,表示该服务实例对该请求类型具有处理能力,可以提供该请求类型所需的服务。也就是说,每个服务实例可以对一种或多种请求类型具有处理能力。

  各个服务实例所支持的请求类型可以告知其所注册的代理端,代理端中可以存储有请求类型与服务实例的对应关系,该对应关系中,服务实例对其对应的请求类型具有处理能力。例如,各个服务实例在注册到代理端时,注册信息可以包括服务实例所支持的请求类型。也就是说,各个服务实例向代理端注册时,将自身所支持的请求类型在代理端进行登记,从而代理端中可以获取并存储注册到该代理端中的各个服务实例分别支持的请求类型。

  目标代理端从注册的服务实例中查找对接收到的请求具有处理能力的服务实例时,可以查找存储的请求类型与服务实例的对应关系中,是否有该请求的请求类型,若有,以查找到的请求类型对应的服务实例,作为请求接收方。

  在一种具体的实施方式中,代理端中存储的请求类型与服务实例的对应关系,可以通过服务类型映射表进行存储。具体可以是,每个代理端中可以存储有服务类型映射表,该服务类型映射表中包括在代理端中注册的各个服务实例与请求类型的对应关系。如服务实例在注册到代理端时,在代理端还注册了自身的身份标识,不同服务实例的身份标识不同,在该对应关系中,可以是如图5所示的服务实例的身份标识与请求类型的类型标识相对应,图5中S1、S2以及S3标识不同的服务实例,R1至R5标识不同的请求类型。可以理解的,目标代理端作为代理端中的任意一个,其中存储有服务类型映射表。

  目标代理端查找对所述请求具有处理能力的服务实例时,可以从目标代理端存储的服务类型映射表中,查找该请求的请求类型对应的服务实例,作为请求接收方。即若目标代理端在存储的服务类型映射表中,查找到接收到的请求的请求类型,则将该服务映射表中查找到的请求类型对应的服务实例,作为请求接收方。

  可选的,在本申请实施例中,每个代理端可能注册有多个实例,若目标代理端注册的服务实例中,只查找到一个服务实例对该请求具有处理能力,以查找到的服务实例作为请求接收方。目标代理端注册的服务实例中,对该请求具有处理能力的服务实例可能并不止一个,因此,需要从中选择一个服务实例作为请求接收方。

  在一种实施方式中,可以是依次查找各个服务实例对该请求是否具有处理能力,将第一个查找到的服务实例作为请求接收方。例如,在如图5所示的服务类型映射表中,从上到下查找请求类型,查找到请求的请求类型时,以该查找到的请求类型对应的服务实例作为请求接收方。如接收到的请求的请求类型为R3,在如图5所示的服务类型映射表中,第一个查找到的服务实例为S1。

  在另一种实施方式中,可以查找注册的所有服务实例中对请求类型具有处理能力的服务实例。若查找到两个或者两个以上的对该请求的请求类型具有处理能力的服务实例,则可以从查找到的两个或者两个的服务实例中选择一个服务实例作为请求接收方。

  可选的,在该实施方式中,可以从查找到的服务实例中随机选择一个服务实例作为请求接收方。

  可选的,在该实施方式中,可以从各个服务实例中,选择当前正在处理的请求数量最少的服务实例作为请求接收方。即确定各个服务实例中未处理完的请求的数量,以数量最少的服务实例作为请求接收方。其中,可选的,代理端向注册其中的服务实例发送请求后,可以记录发送到该服务实例的请求数量;服务实例在对请求处理完成后,可以向注册的代理端反馈,从而代理端可以根据发送到服务实例的请求数量以及服务实例完成的请求数量,确定服务实例中正在处理的请求数量。可选的,服务实例也可以向注册的代理端反馈其正在处理的请求数量,使代理端可以根据服务实例的反馈确定各个服务实例正在处理的请求的数量,该反馈可以是定时反馈,也可以是服务实例在完成一个请求时反馈一次,或者请求反馈时机进行反馈。

  可选的,在该实施方式中,可以从各个服务实例中,选择当前正在处理的请求数量最少的服务实例作为请求接收方。若选择到的服务实例为一个,则以该选择到的服务实例作为请求接收方;若当前正在处理的请求数量最少的服务实例不止一个,选择到的服务实例不止一个,则从选择到的服务实例中确定一个服务实例作为请求接收方。从选择到的服务实例中确定一个服务实例作为请求接收方时,可以随机确定一个;也可以以其中接收到的最后一个请求距离当前时间最远的服务实例作为请求接收方。即若有不止一个服务实例当前处理的请求的数量相同且比其他服务实例少,则可以从该不止一个服务实例中,确定各个服务实例最后接收到的请求的时间,以距离当前时间最远的时间所对应的服务实例作为请求接收方。其中,可以以代理端向服务实例发送请求的时间先后表示服务实例接收到请求的时间先后,代理端可以记录向各个服务实例发送请求的时间,并确定向选择到的不止一个服务实例中,向各个服务实例发送的最后一个请求的时间,以其中距离当前时间最远的时间对应的服务实例作为请求接收方。

  在本申请实施例中,若查找到两个或者两个以上的对该请求的请求类型具有处理能力的服务实例,也可以通过其他选取策略选取一个服务实例作为请求接收方。

  步骤S230:将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  目标代理端将请求发起方发送的请求发送给请求接收方,以使请求接收方可以对该请求进行处理。即请求接收方支持该请求的请求类型,可以完成该请求所需完成的任务,实现该请求所要实现的功能。

  可选的,请求接收方在处理请求后,可以进行回复。该回复中可以包括处理结果,可以包括该请求所要求的信息等。例如,请求发起方发起的请求,为需要请求接收方返回用户信息,则请求接收方的回复中,包括了请求中所要求的用户信息。

  该回复可以沿着请求的发送路径将回复返回至请求发起方。具体的,目标代理端可以接收由请求接收方发送的回复,所述回复为对所述请求的处理;将该回复返回给请求接收方。

  步骤S240:查找与所述目标代理端通信连接的代理端中是否注册有对所述请求具有处理能力的服务实例。

  若在所述目标代理端注册的服务实例中没有查找到对该请求具有处理能力的服务实例,说明目标代理端注册的各个服务实例,对请求接收方发送的请求都没有处理能力,则目标代理端可以从其他代理端中选择一个代理端,在该选择的代理端注册的服务实例中,包括对该请求具有处理能力的服务实例,以将该请求发送到该代理端,再由该代理端将该请求发送到对该请求具有处理能力的服务实例。

  在本申请实施例中,若在目标代理端注册的服务实例中没有查找到对该请求具有处理能力的服务实例,目标代理端可以查找相邻的代理端中是否注册有对该请求具有处理能力的服务实例。对于每个代理端而言,其相邻的代理端,为相互之间直接进行通信连接的代理端,彼此相邻的代理端之间没有其他代理端。即目标代理端可以查找通信连接的代理端中是否注册有对该请求具有处理能力的服务实例,以查找到的代理端作为请求要发送到的代理端。

  在一种实施方式中,每个代理端中,可以存储有其相邻代理端支持的请求类型,每个代理端支持的请求类型为该代理端注册的各个服务实例支持的请求类型。在本申请实施例中,每个代理端支持的请求类型可以以列表或索引等形式在相邻的代理端中存储,在本申请实施例中,定义每个代理端支持的请求类型所存储的列表或索引为服务索引。每个代理端存储有通信连接的其他代理端的服务索引,每个代理端的服务索引中包括在代理端注册的服务实例具有处理能力的请求类型。

  例如,代理端A1与两个代理端相邻,分别为代理端A2以及代理端A3,代理端A2中注册有两个服务实例,分别为服务实例s1以及s2,服务实例s1支持请求类型r1以及r2,服务实例s2支持请求类型r4以及r3;代理端A3中注册有两个服务实例s3以及s4,s3支持请求类型r4,s4支持请求类型r1以及r4。则代理端A2的服务索引I1中包括请求类型r1,r2以及r3;代理端A3的服务索引I2中包括请求类型r1以及r4。代理端A1中存储有代理端A2的服务索引I1以及代理端A3的服务索引I2。可以理解的,代理端A2以及代理端A3中也存储有代理端A1的服务索引。

  在该实施方式中,目标代理端查找相邻的代理端中是否注册有对该请求具有处理能力的服务实例时,可以查找与目标代理端通信连接的代理端的服务索引中,是否包括所述请求的请求类型,或者说,查找目标代理端存储的相邻代理端的服务索引中,是否包括该请求的请求类型。目标代理端存储的相邻代理端的服务索引,为目标代理端相邻的其他代理端的服务索引,如上述举例中,代理端A1中存储的服务索引为服务索引I1以及服务索引I2。

  若有服务索引中包括该请求的请求类型,以查找到的服务索引所属的代理端作为查找到的代理端,即确定查找到的服务索引所属的代理端为对支持该请求的请求类型的代理端。其中,服务索引所属的代理端,表示该服务索引为该代理端的服务索引,该服务索引中的请求类型为该代理端支持的请求类型。如上述举例中,代理端A1为目标代理端,接收到的请求的请求类型为中存储的服务索引为r2,则可以查找到服务索引I1包括请求类型r2,以服务索引I1所属的代理端A2为查找到的代理端,表示该代理端A2注册有支持请求类型r2的服务实例。

  在另一种实施方式中,目标代理端可以向相邻的代理端发送咨询信息,该咨询信息中包括该请求类型,用于咨询相邻的代理端是否支持该咨询信息中的请求类型。若接收到咨询信息的代理端注册有支持该请求类型的服务实例,则反馈其支持该请求类型的信息。若目标代理端接收到有相邻代理端反馈支持该请求类型,则可以确定该相邻代理端为查找到的代理端。

  在本申请实施例中,若目标代理端有多个相邻的代理端中,多个代理端中不止一个代理端对该请求具有处理能力,则目标代理端可能查找到多个代理端中注册有对该请求具有处理能力的服务实例,可以从该查找到的多个代理端中选择一个代理端,作为请求需要发送的代理端。

  可选的,目标代理端可以从查找到的多个对请求具有处理能力的代理端中,随机选择一个代理端。

  可选的,目标代理端也可以根据预先的选取策略,从多个查找到的代理端中选择一个代理端。例如,选择注册服务实例最少的代理端,选择支持的请求类型最少的代理端,选择通信距离最近的代理端等。其中,在一种选择策略下若仍然选取到不止一个代理端,可以进一步随机选取,或者,结合其他选取策略进一步选取。例如,多个对请求具有处理能力的代理端中,有不止一个代理端注册有服务实例最少且相同,则可以从该不止一个代理端中,再选取通信距离最近的代理端。

  可选的,在本申请实施例中,目标代理端也可以从所有代理端中查找是否注册有对所述请求具有处理能力的服务实例。

  由于每个代理端与请求处理系统中的至少一个代理端通信连接,则请求处理系统中所有代理端之间具有直接或间接的连接关系,通过对服务索引的传递,每个代理端可以获取到其他所有代理端的服务索引。

  在该实施方式中,目标代理端可以从存储的所有服务索引中,查找是否包括所述请求的请求类型;若有服务索引中包括所述请求的请求类型,以查找到的服务索引所属的代理端作为查找到的代理端。

  另外,在所有代理端中,可能存在多个代理端支持该请求的请求类型,目标代理端可以选择最近的代理端,作为查找的代理端,即作为请求所要发送的代理端。

  在每个代理端存储的其他代理端的服务索引中,可以记录有其他各代理端与自身的远近关系,其中,对于某个代理端而言,其他代理端的信息到达自身需要经过的代理端的数量越多,则距离自身越远;若达到自身需要经过代理端的数量相同,则通信距离越近,距离自身越近。

  步骤S250:若与所述目标代理端通信连接的代理端中注册有对所述请求具有处理能力的服务实例,向查找到的代理端发送所述请求,以用于查找到的代理端将所述请求发送给对所述请求具有处理能力的服务实例进行处理。

  目标代理端将请求发送给查找到的代理端,即将请求发送给确定发送的代理端,以用于接收到该请求的代理端再将该请求发送给自身注册的对该请求具有处理能力的服务实例。

  其中,接收到目标代理端发送的请求的代理端,从自身注册的服务实例中选择对该请求具有处理能力的服务实例时,其选择方式可以参照前述描述的目标代理端接收到请求发起方发送的请求时,从注册的服务实例中选择具有处理处理能力的服务实例的方式。

  请求在请求接收方处理后,可以沿着请求的发送路径将回复返回至请求接收方。具体的,请求接收方可以将回复返回至其注册的代理端,其注册的代理端再将该回复返回至目标代理端,目标代理端将该回复返回至请求发起方,以使请求发起方获得其想要的结果,或者获知对该请求的处理结果。

  另外,目标代理端也可能接收到其他代理端发送的请求。即,其他代理端接收到注册其中的请求发起方发送的请求时,在自身注册的服务实例中没有对该请求具有处理能力的服务实例,并且通过查找确定该目标代理端中注册有对该请求具有处理能力的服务实例,则将该请求发送到该目标代理端。目标代理端接收相邻代理端发送的请求,可以确定目标代理端中注册有对该请求具有处理能力的服务实例。目标代理端可以以注册的服务实例中对所述请求具有处理能力的服务实例作为请求接收方。具体的,目标代理端可以从所有注册的服务实例中选取一个对该请求具有处理能力的服务实例作为请求接收方,具体选取方式可以参见前述实施例中相应的选取方式,在此不再赘述。目标代理端再将从其他代理端接收到的请求发送给该请求接收方,用于该请求接收方进行处理。

  可选的,在本申请实施例中,若所述目标代理端通信连接的代理端中没有注册对所述请求具有处理能力的服务实例,可以向请求发起方返回通知消息。即,目标代理端中没有注册有对该请求具有处理能力的服务实例,目标代理端的相邻代理端中,也没有任何一个代理端注册有对该请求具有处理能力的服务实例,则可以向请求发起方发送通知消息,通知请求接收方未查找到对其请求具有处理能力的服务实例。该通知消息也可以告知请求接收方路由出错,由请求接收方重试请求发起。若请求接收方重试发起请求,则若目标代理端连接的相邻代理端有改变,或者目标代理端注册的服务实例有改变,则可能有新的服务实例可以支持该请求,对该请求具有处理能力。

  另外,若目标代理端通信连接的代理端中没有注册对所述请求具有处理能力的服务实例,则很大概率该请求处理系统中没有对该请求具有处理能力的服务实例,返回请求接收方的通知消息还可以用于告警,通知请求接收方请求错误,请求类型错误等。

  在本申请实施例中,请求处理系统中包括多个代理端,且每个代理端与其他至少一个代理端直接通信连接,从而请求处理系统中所有代理端实现直接或间接的连接。每个代理端注册有一个或多个服务实例,该请求处理系统中的所有服务实例分散注册在多个代理端,从而该请求处理系统中的服务实例的注册是去中心化的。代理端在接收到注册其中的服务实例发送的请求时,从自身注册的服务实例中查找具有处理能力的服务实例,若没有查找到对该请求具有处理能力的服务实例,可以从通信连接的其他代理端中查找代理端,具体查找注册有对该请求具有处理能力的服务实例的代理端。因此,该请求处理系统中服务实例的注册以及请求的处理去中心化,降低了所有服务实例都注册在一个服务组件产生的网络开销,也降低了中心化情况下中心的服务发现组件崩溃所可能产生的系统风险。

  本申请实施例提供的请求处理系统可以为分布式系统,如图1所述,该请求处理系统包括多个代理端以及多个服务实例。该多个代理端中的每个代理端与其他至少一个代理端通信连接,每个代理端注册有一个或多个服务实例,每个服务实例同一时刻仅在一个代理端注册。

  在该请求处理系统中,多个代理端多点部署,可以与服务实例部署在相应的电子设备中。

  可选的,每个代理端与注册在该代理端的服务实例部署于同一电子设备。

  可选的,在配置有代理端的电子设备中,若配置有服务实例,该电子设备中配置的服务实例注册在该电子设备中配置的代理端中。若电子设备中只配置有服务实例,未配置有代理端,服务实例可以注册到其他电子设备中配置的代理端中。例如,配置到离自身最近的代理端,该最近可以是通信距离最短,通信算时间最短等。

  在该请求处理系统中,在代理端启动时,若该代理端并非该系统中第一个启动的代理端,可以连接其他的代理端。

  具体的,在代理端中可以存储有配置文件,该配置文件中包括系统中已启动的代理端中的一个或多个的信息,定义该配置文件中的代理端为种子节点。其中,配置文件中的代理端的信息可以用于查找到代理端以连接以及区分各个代理端,如包括代理端的IP地址、端口信息、身份标识等。

  代理端在启动时,根据配置文件中各个代理端的信息,通信连接种子节点中的一个或多个,并将连接的种子节点记录为自身相邻的代理端,记录该相邻代理端的信息。如,在代理端中,可以包括相邻列表,在该相邻列表中记录了相邻的代理端,或者说彼此之间直接通信连接的代理端。

  在本申请实施例中,种子节点可以根据需要配置。例如,选取的种子节点分散,从不同机房选取代理端作为种子节点,从不同地区的不同机房选取代理端作为种子节点。又如,该系统中还可以包括不注册服务实例的代理端,用于作为种子节点,该种子节点在单独的电子设备中配置,且在该电子设备仅配置该种子节点,不配置服务实例,以避免服务实例运行过程中出错,导致电子设备的损坏,导致种子节点也不可用。

  对于有种子节点单独部署在电子设备中,即若请求处理系统中有电子设备仅配置有种子节点而未配置服务实例,且该配置的种子节点无服务实例注册,则在该去请求处理系统中,可以是,多个代理端中的每个代理端与其他至少一个代理端通信连接,至少有两个或两个以上的代理端注册有服务实例,每个服务实例只注册在一个代理端,一个代理端可以注册一个或多个服务实例,也可以不注册服务实例。未注册有服务实例的代理端可以用于作为种子节点。

  另外,在该请求处理系统中,每个代理端可以定时检查其相邻代理端是否异常。具体的,每个代理端可以向相邻的代理端定时发送健康检查信息,并定时检查是否接收到相邻代理端的健康检查信息,该健康检查信息为告知相邻代理端自身存在的信息。若有代理端超过预设时长没有接收到某一相邻代理端发送的健康检查信息,认为该相邻代理端异常,不再将该相邻代理端作为相邻代理端,将其从自身记录的相邻代理端移出,如通过相邻列表记录相邻代理端时,将该相邻代理端从相邻列表移出。可选的,该预设时长可以长于代理端发送健康检查信息的时间间隔,如大于发送健康检查信息的时间间隔,小于发送健康检查信息的时间间隔的两倍或者其他大于1倍的倍数。当然,在本申请实施例中,代理端检查相邻代理端的是否异常的方式在本申请实施例中并不限定,检查到连接异常,超过预设时长没有接收到健康检查信息等,都可以作为相邻代理端异常的判断标准。

  在本申请实施例中,每个代理端可以向相连接的相邻代理端发送自身已知的代理端信息,由于每个代理端至少与一个其他代理端通信连接,则每个代理端可以获取到该请求获取系统内的所有代理端的分布信息。另外,由于系统中的代理端可能出现更新,因此,每个代理端可以定时向相邻代理端发送自身已知的代理端,使系统中各个代理端可以定时更新系统中的代理端分布信息。

  该系统中的代理端,可以根据代理端分布信息,再与其他代理端进行通信连接。如某个代理端仅与该系统中的一个代理端直接通信连接,但是检查到该相邻代理端异常,则该代理端可以将该相邻代理端从相邻列表移出,并根据系统中的代理端分布信息,重新选择代理端进行通信连接,并记录为相邻代理端,作为相邻代理端处理,写入相邻列表。

  在本申请实施例中,服务实例可以向代理端进行注册,如通过TCP通信连接注册到服务实例。在注册信息中可以包括服务实例可以包括服务实例功能,如在注册信息中包括服务实例可以支持的请求类型,即对哪些类型的请求具有处理能力。

  在本申请实施例中,服务实例中可以包括有配置信息,该配置信息中包括了代理端信息以及不同代理端的优先级,服务实例注册其中最高优先级的代理端。其中,在配置信息中,优先级有底到高的代理端,可以是与服务实例由近到远的代理端,即距离服务实例越近,代理端的优先级越高,与服务实例布置在同一电子设备的代理端的优先级最高,通常的,同一电子设备中的服务实例注册到该电子设备中的代理端。与服务实例之间的由近到远,可以是距离上的由近到远,该距离可以是通信距离,由于物理距离的远近在一定程度上会反应通信距离的远近,该距离也可以是物理距离。

  在代理端中,可以对注册的服务实例的注册信息进行存储,可以将注册信息与服务实例对应存储,如将服务实例与请求类型对应存储到服务类型映射表。可选的,代理端可以选择不进行持久化存储,而是存储在内存中,可以减少存储复杂度,并且,代理端若出现掉电等情况,与服务实例的连接中断,在内存中存储,其中的服务实例的注册信息可以自动删除,不需要再进行额外的删除操作,提高了系统的便捷性。另外,如前所述,每个代理端还可以将自身支持的请求类型发送给相邻的代理端,如将形成的服务索引发送给相邻的代理端,该服务索引既可以作为代理端确定相邻代理端可以处理哪些类型的请求,也可以作为实现数据备份的目的。并且,该数据备份只是备份代理端支持的请求类型,其中若有注册的多个服务实例支持相同的请求类型,也只备份一份,降低了备份数据。即,在每个代理端中,可以存储的为注册到自身的各个服务实例具体对应的请求类型,以及相邻代理端的服务索引,有效降低了存储的数据量,不会随着系统整体服务实例个数的增长而膨胀。

  服务实例与其注册的代理端之间也可以定时检查彼此是否异常。检查是否异常的具体方式在本申请实施例中并不限定,检查到连接异常,超过预设时长没有接收到健康检查信息等,都可以作为相邻代理端异常的判断标准。本申请以健康检查信息为例进行说明,代理端与服务实例之间检查是否异常可以与相邻代理端之间检查彼此是否异常相似,代理端可以定时向注册在其中的服务实例发送健康检查信息,表示自身的正常存在;服务实例也可以定时向其注册的代理端发送健康检查信息,表示自身的正常存在。健康检查信息的具体内容在本申请实施例中并不限定。

  若代理端在预设时长范围内没有接收到其中某个注册的服务实例发送的健康检查信息,可以判定该服务实例异常,将该服务实例不再作为注册在自身的服务实例。如代理端中存储有实例列表,其中包括注册在代理端的各个服务实例,对于异常的服务实例,可以将其从实例列表移除,不再与异常的服务实例通信,避免与服务实例之间通信出现故障。对于异常的服务实例,可以重新在代理端进行注册,注册后再次成为代理端注册的服务实例,加入实例列表。该预设时长可以等于服务实例发送健康检查信息的时间间隔,可以大于服务实例发送健康检查信息的时间间隔,也可以大于服务实例发送健康检查信息的时间间隔,小于服务实例发送健康检查信息的时间间隔的倍数,该倍数大于1倍。

  若服务实例在预设时长范围内没有接收到其注册的代理端发送的健康检查信息,可以判定该代理端异常。该预设时长可以等于代理端发送健康检查信息的时间间隔,可以大于代理端发送健康检查信息的时间间隔,也可以大于代理端发送健康检查信息的时间间隔,小于代理端发送健康检查信息的时间间隔的倍数,该倍数大于1倍。

  服务实例若发现其注册的代理端异常,可以向其他代理端进行注册。服务实例重新选择代理端进行注册,具体可以根据服务实例中的配置信息进行代理端选择,选择当前可选的优先级最高的代理端进行注册。例如,前一次注册的代理端为优先级最高的代理端,本次选择优先级次高的代理端进行注册。若在一个电子设备中配置一个代理端,则服务实例发现其注册的与自身同一电子设备的代理端异常时,选择到其他电子设备中的代理端进行注册。其中,服务实例的注册行为实际上是向系统中的代理端写入数据,为了保证数据一致性,服务实例同一时刻只在一个代理端进行注册,则前一次注册的代理端的注册无效,并且,若服务实例仍然与前一次注册的代理端有连接,可以断开该连接。

  在该请求处理系统中,任意一个服务实例作为请求发起方时,用于向注册的代理端发送请求,代理端用于接收请求发起方发送的请求;从在所述代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方;将所述请求发送给所述请求接收方;所述请求接收方用于对接收到的请求进行处理。

  也就是说,该请求处理系统中,服务实例连接注册到代理端,任意一个服务实例都可以作为请求发起方,向注册的代理端发送请求。代理端接收到请求发起方发送的请求时,可以查找注册的各个服务实例中是否有对该请求具有处理能力的服务实例。

  若接收到请求发起方发送的请求的代理端查找到服务实例,将该请求发送该注册于自身的服务实例。如图6示出了代理端A1接收服务实例S11的请求后,查找到注册于自身的服务实例S12中对该请求具有处理能力的情况下,请求的发送过程示意图。

  若该代理端没有在注册于自身的服务实例中查找到对该请求具有处理能力的服务实例,则查找相邻的代理端中是否注册有对该请求具有处理能力的服务实例。若查找到相邻代理端中注册有对该请求具有处理能力的服务实例,将该请求发送给相邻代理端,相邻代理端再查找注册其中的具体对该请求具有处理能力的服务实例,发送到该查找到的服务实例。如图7中所示的发送示意图,代理端A1在注册到自身的服务实例中没有查找到对请求具有处理能力的服务实例,且查找到相邻代理端A2中注册有对该请求具有处理能力的服务实例,则将该请求发送给代理端A2,代理端A2再从自身注册的服务实例中查找到服务实例S22对该请求具有处理能力,将该请求发送给服务实例S22。可以理解的,图6及图7仅是为了对请求的发送过程的说明示意,并不代表请求处理系统中所有代理端的存在情况。

  在本申请实施例中,请求可以只进行一层转发,即代理端从请求发起方接收到请求后,最多转发给自身相邻的代理端,由自身相邻的代理端发送给注册在该相邻代理端的请求接收方;若自身相邻的代理端中没有注册有对该请求具有处理能力的服务实例,则不再发送到更远的代理端,避免多层转发会放大整个通信过程的延迟。

  请求接收方为该请求处理系统中的服务实例中的一个。请求接收方接收到请求后,对该请求进行处理,并进行回复。该回复可以沿着到的请求接收方的路径返回至请求发起方。

  可以理解的,本申请实施例中,作为请求发起方的服务实例,在需要时也可能作为请求接收方;而作为请求接收方的服务实例,也可以在需要时作为请求发起方。

  在本申请实施例的请求处理系统,为分布式系统提供轻量级的内部服务通信方案,不需要引入外部的数据存储系统及额外的部署资源。配置多个代理端相互发现并用于注册服务实例,实现去中心化。在代理端中,基于内存存储数据,存储数据为本地注册的各服务实例的注册信息及异地其他代理端的服务索引,内部服务的通信的请求回复均由代理端进行投递。

  在该请求处理系统中,代理端可以部署在服务实例所在机器上,为所有服务实例投递通信数据,因此服务实例不需要关注通信对端的部署情况,只需要向代理端单向投递请求即可。

  本申请实施例中,服务实例可以不需要在一个中心节点注册,而是可以在就近的代理端注册,例如在同一台电子设备上配置的代理端进行注册,减少了网络开销。同时,同一机房中,可以有多台机器,每台机器作为一个电子设备,同一机房中的多台机器可以分别配置代理端,即使某台机器上的代理端出现宕机等异常情况,该机器上的服务实例也可以就近切换,快速切换到同机房的其他机器配置的代理端上,降低了故障切换所需的时间。

  另外,在本申请实施例中,代理端可以将服务实例的注册信息保存在内存中,同时会告知已知的相邻代理端,达到数据备份的目的。并且,该备份可以并不是全量数据的副本,即代理端中备份的并非相邻代理端中服务实例和请求类型的完全对应关系,而可以是关键索引,即相邻代理端支持哪些类型,即使支持相同请求类型的服务实例有多个,实际上需要备份的索引也仅仅只有一份。总的来说,代理端只会存储注册到本身的服务信息,对于其他代理端,只会保存一份索引,因此数据量不会随着系统整体服务实例个数的增长而线性增长,存储成本极小,实现优化副本数据量膨胀问题,减低容灾风险。

  另外,在本申请实施例中,作为请求发起方的服务实例发起请求,不需求关注请求接收方的信息,只需要把请求投递给代理端,由代理端进行路由选择等处理即可,降低了请求发起方实现的复杂度。再者,即使实现逻辑需要调整,在一个系统中,代理端的数量远小于服务实例的数量,因此调整工作量较小,降低了实现通信的复杂度和调整成本。

  并且,在本申请实施例中,代理端可以跟随服务实例部署到所在机器即可,即代理端与注册到代理端的服务实例可以部署于同一电子设备,即使在系统中新增了代理端以实现去中心化,一般也不需要另外分配资源,部署简单,资源依赖少。

  在本申请实施例的方案中,由于通信均由代理端进行投递,因此整个通信链路均可在代理端进行监控,方便对系统内部的通信质量做一个整体的评估,实现通信质量追踪。

  本申请实施例还提供了一种请求处理装置400,可以应用于请求处理系统中的目标代理端。如图1所示,该请求处理系统包括多个代理端以及多个服务实例,所述目标代理端为所述多个代理端中的任意一个,所述多个代理端中的每个代理端与其他至少一个代理端通信连接,每个代理端注册有一个或多个服务实例。请参见图8,该装置400可以包括:请求接收模块410,用于接收请求发起方发送的请求,所述请求发起方为在所述目标代理端注册的服务实例;查找模块420,用于从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方;请求发送模块430,用于将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  可选的,查找模块420还可以用于若在所述目标代理端注册的服务实例中没有查找到对所述请求具有处理能力的服务实例,查找与所述目标代理端通信连接的代理端中是否注册有对所述请求具有处理能力的服务实例;若有,请求发送模块430可以用于向查找到的代理端发送所述请求,以用于查找到的代理端将所述请求发送给对所述请求具有处理能力的服务实例进行处理。

  可选的,代理端接收到的请求中包括请求类型,每个服务实例对一种或多种请求类型具有处理能力,每个代理端存储有通信连接的其他代理端的服务索引,每个代理端的服务索引中包括在所述代理端注册的服务实例具有处理能力的请求类型。查找模块420用于查找与所述目标代理端通信连接的代理端中是否注册有对所述请求具有处理能力的服务实例,可以包括:查找与所述目标代理端通信连接的代理端的服务索引中,是否包括所述请求的请求类型;若有服务索引中包括所述请求的请求类型,以查找到的服务索引所属的代理端作为查找到的代理端。

  可选的,该装置400还可以包括信息反馈模块,用于若所述目标代理端通信连接的代理端中没有注册对所述请求具有处理能力的服务实例,向所述请求发起方返回通知消息。

  可选的,该请求接收模块410还可以用于接收相邻代理端发送的请求;查找模块还可以用于以注册的服务实例中对所述请求具有处理能力的服务实例作为请求接收方;请求发送模块还可以用于将所述请求发送给所述请求接收方,用于所述请求接收方进行处理。

  可选的,代理端接收到的请求中包括请求类型,每个服务实例对一种或多种请求类型具有处理能力,每个代理端中存储有服务类型映射表,所述服务类型映射表中包括在代理端中注册的各个服务实例与请求类型的对应关系,查找模块420用于从在所述目标代理端注册的服务实例中查找对所述请求具有处理能力的服务实例,作为请求接收方,可以包括:从所述目标代理端存储的服务类型映射表中,查找所述请求的请求类型对应的服务实例,作为请求接收方。

  可选的,该装置还可以包括,回复接收模块,用于接收由请求接收方发送的回复,所述回复为对所述请求的处理;回复返回模块,用于将所述回复返回给所述请求接收方。

  所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述的各个方法实施例之间可以相互参照;上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

  在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。

  另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。各个模块可以配置在不同的电子设备中,也可以配置在相同的电子设备中,本申请实施例并不限定。

  请参考图9,其示出了本申请实施例提供的一种电子设备600的结构框图。该电子设备可以是计算机,该电子设备中可以配置分布式系统中的服务实例,也可以配置用于服务实例之间通信的投递组件,如本申请实施例中的代理端。

  该电子设备可以包括一个或多个处理器610(图中仅示出一个),存储器620,并配置有代理端以及一个或多个服务实例。其中,存储器620可以与处理器610电性连接,所述代理端以及一个或多个服务实例被存储在所述存储器620中,并被配置为由所述一个或多个处理器610执行。所述一个或多个服务实例在所述代理端注册,所述代理端被处理器执行用于执行前述实施例中对应代理端所描述的方法。

  另外,该电子设备中还可以包括内存,用于代理端存储注册到该代理端中的各个服务实例的注册信息,如存储服务类型映射表,另外,还可以存储其他代理端所支持的服务类型,如存储相邻代理端的服务索引。

  在该电子设备600中,处理器610可以包括一个或者多个处理核。处理器610利用各种接口和线路连接整个电子设备600内的各个部分,通过运行或执行存储在存储器620内的指令、程序、代码集或指令集,以及调用存储在存储器620内的数据,执行电子设备600的各种功能和处理数据。可选地,处理器610可以采用数字信号处理(Digital SignalProcessing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器610可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics ProcessingUnit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器610中,单独通过一块通信芯片进行实现。

  存储器620可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器620可用于存储指令、程序、代码、代码集或指令集。存储器620可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令、用于实现上述各个方法实施例的指令等。存储数据区还可以电子设备在使用中所创建的数据等。

  请参考图10,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读存储介质700中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。

  计算机可读存储介质700可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质700包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质700具有执行上述方法中的任何方法步骤的程序代码710的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码710可以例如以适当形式进行压缩。

  最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

《请求处理方法、系统、装置、电子设备及存储介质.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)