发明内容
本申请实施例提供了一种服务请求转发方法及系统,用于解决网关向不在线的服务器转发服务请求,导致服务请求无法被处理的问题。所述技术方案如下:
一方面,提供了一种服务请求转发方法,用于转发系统中,所述转发系统包括网关、注册中心和多个服务器,所述多个服务器分别与所述网关和所述注册中心相连,所述方法包括:
所述网关接收客户端发送的服务请求,所述服务请求用于请求调用所述服务器中的服务;
所述网关根据所述服务请求向所述注册中心发送查询请求,所述注册中心中注册有多个服务器,且所述查询请求用于查询提供所述服务且当前在线的服务器;
所述注册中心根据所述查询请求向所述网关返回查询结果;
所述网关将所述服务请求转发给所述查询结果所指示的服务器。
在一种可能的实现方式中,所述方法还包括:
所述注册中心对注册的各个服务器进行探活;
若所述服务器是可达的,则所述注册中心确定所述服务器当前在线;
若所述服务器连续不可达的次数达到次数阈值,则所述注册中心确定所述服务器当前不在线。
在一种可能的实现方式中,所述方法还包括:所述注册中心对当前在线的服务器设置第一标记,对当前不在线的服务器设置第二标记;
所述注册中心根据所述查询请求向所述网关返回查询结果,包括:所述注册中心根据所述查询请求确定提供所述服务的至少一个服务器;所述注册中心从所述至少一个服务器中选择具有所述第一标记的服务器,根据选出的所述服务器的第一地址信息生成所述查询结果,所述第一地址信息用于指示所述服务器的地址;所述注册中心向所述网关返回所述查询结果。
在一种可能的实现方式中,所述方法还包括:
所述服务器向所述注册中心发送注册请求,所述注册请求中包含服务标识和第一地址信息,所述服务标识用于指示所述服务器提供的服务,所述第一地址信息用于指示所述服务器的地址;
所述注册中心根据所述注册请求对所述服务器进行注册。
在一种可能的实现方式中,所述网关根据所述服务请求向所述注册中心发送查询请求,包括:
所述网关从配置文件中获取所述注册中心的第二地址信息和访问方式,所述第二地址信息用于指示所述注册中心的地址;
所述网关从所述服务请求中获取服务标识,所述服务标识用于指示所述客户端所请求调用的服务;
所述网关根据所述服务标识和所述访问方式生成所述查询请求;
所述网关根据所述第二地址信息将所述查询请求发送给所述注册中心。
在一种可能的实现方式中,所述网关从所述服务请求中获取服务标识,包括:
所述网关从所述服务请求中获取域名和统一资源定位符;
所述网关从所述配置文件中获取与所述域名和所述统一资源定位符对应的服务标识。
在一种可能的实现方式中,所述网关将所述服务请求转发给所述查询结果所指示的服务器,包括:
当所述查询结果中包括一个服务器的第一地址信息时,所述网关将所述服务请求转发给所述第一地址信息所指示的服务器;
当所述查询结果中包括至少两个服务器的第一地址信息时,所述网关从至少两条第一地址信息中选择一条第一地址信息,将所述服务请求转发给选出的所述第一地址信息所指示的服务器。
在一种可能的实现方式中,所述网关从至少两条第一地址信息中选择一条第一地址信息,包括:
所述网关获取每条第一地址信息所指示的服务器在第一时段内的总处理请求数;
所述网关根据所述总处理请求数和负载均衡原则,从所述至少两条第一地址信息中选择一条第一地址信息。
在一种可能的实现方式中,在所述网关接收客户端发送的服务请求之后,所述方法还包括:
所述网关检测所述服务请求是否满足限流条件;
若所述服务请求满足所述限流条件,则所述网关不向所述注册中心发送所述查询请求,并向所述客户端返回限流响应;
若所述服务请求不满足所述限流条件,则所述网关触发执行所述网关根据所述服务请求向所述注册中心发送查询请求的步骤。
在一种可能的实现方式中,所述网关检测所述服务请求是否满足限流条件,包括:
所述网关从所述服务请求中获取域名和统一资源定位符;
所述网关统计第二时段内接收到的服务请求中携带有所述域名和所述统一资源定位符的次数;
所述网关从配置文件中获取所述域名和所述统一资源定位符对应的限流阈值;
若所述次数达到所述限流阈值,则所述网关确定所述服务请求满足所述限流条件;
若所述次数未达到所述限流阈值,则所述网关确定所述服务请求不满足所述限流条件。
在一种可能的实现方式中,所述方法还包括:
所述网关显示流量设置界面;
所述网关获取在所述流量设置界面中输入的域名、统一资源定位符、第二时段和限流阈值;
所述网关将所述域名、所述统一资源定位符、第二时段和所述限流阈值对应添加到所述网关的配置文件中。
在一种可能的实现方式中,所述方法还包括:
所述网关记录所述服务请求中的域名、统一资源定位符和接收所述服务请求的服务器之间的对应关系;
所述网关显示请求分配界面,所述请求分配界面中包含所述对应关系。
一方面,提供了一种转发系统,所述转发系统包括网关、注册中心和多个服务器,所述多个服务器分别与所述网关和所述注册中心相连;
所述网关,用于接收客户端发送的服务请求,所述服务请求用于请求调用所述服务器中的服务;
所述网关,还用于根据所述服务请求向所述注册中心发送查询请求,所述注册中心中注册有多个服务器,且所述查询请求用于查询提供所述服务且当前在线的服务器;
所述注册中心,用于根据所述查询请求向所述网关返回查询结果;
所述网关,还用于将所述服务请求转发给所述查询结果所指示的服务器。
本申请实施例提供的技术方案的有益效果至少包括:
网关根据客户端发送的服务请求向注册中心查询提供服务且当前在线的服务器,注册中心向网关返回查询结果,网关可以将服务请求转发给查询结果所指示的服务器。由于注册中心会实时更新在线的服务器,这样,网关向注册中心查询到的服务器都是在线的,从而可以保证服务请求被转发至在线的服务器,使得服务请求能够被及时处理。
注册中心对注册的各个服务器进行探活;若服务器是可达的,则注册中心确定服务器当前在线;若服务器连续不可达的次数达到次数阈值,则注册中心确定服务器当前不在线,从而可以实时更新在线的服务器。
网关先获取每条第一地址信息所指示的服务器在第一时段内的总处理请求数,再根据总处理请求数和负载均衡原则,从至少两条第一地址信息中选择一条第一地址信息,从而可以在提供相同的服务的服务器之间实现负载均衡。
网关检测服务请求是否满足限流条件,若服务请求满足限流条件,则不向注册中心发送查询请求,并向所述客户端返回限流响应,从而可以通过限流条件对服务请求进行访问限制,可以避免对同一服务的访问需求过多时,导致流量大量聚集,使得服务器的处理压力过大的问题。
网关可以显示流量设置界面,并获取在流量设置界面中输入的域名、统一资源定位符和限流阈值,将域名、统一资源定位符和限流阈值对应添加到网关的配置文件中,这样,用户可以根据需求对限流阈值进行设置,使得限流阈值更加符合业务特点。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的服务请求转发方法的方法流程图,该服务请求转发方法可以应用于转发系统中,转发系统包括网关、注册中心和多个服务器,多个服务器分别与网关和注册中心相连。该服务请求转发方法,可以包括:
步骤101,网关接收客户端发送的服务请求,该服务请求用于请求调用服务器中的服务。
其中,服务请求中至少包括域名和统一资源定位符(Uniform Resource Locator,URL)。比如,域名是xxx.com,统一资源定位符是1,则服务请求中可以包括xxx.com/1。
步骤102,网关根据服务请求向注册中心发送查询请求,该注册中心中注册有多个服务器,且该查询请求用于查询提供服务且当前在线的服务器。
网关可以根据服务请求中的域名和统一资源定位符确定客户端所请求调用的一项服务的服务标识,生成携带有该服务标识的查询请求,并将该查询请求发送给注册中心,以查询提供服务且当前在线的服务器。
步骤103,注册中心根据查询请求向网关返回查询结果。
查询结果中至少包括提供上述服务且当前在线的服务器的第一地址信息。
步骤104,网关将服务请求转发给查询结果所指示的服务器。
网关可以根据查询结果中的第一地址信息,将服务请求转发给对应的服务器。服务器在接收到服务请求后,可以对该服务请求进行处理,并向网关反馈处理结果,网关再将处理结果反馈给客户端。
综上所述,本申请实施例提供的服务请求转发方法,网关根据客户端发送的服务请求向注册中心查询提供服务且当前在线的服务器,注册中心向网关返回查询结果,网关可以将服务请求转发给查询结果所指示的服务器。由于注册中心会实时更新在线的服务器,这样,网关向注册中心查询到的服务器都是在线的,从而可以保证服务请求被转发至在线的服务器,使得服务请求能够被及时处理。
本实施例中的注册中心中注册有多个服务器,下面对服务器的注册和维护过程进行介绍,请参考图2。
步骤201,服务器向注册中心发送注册请求,该注册请求中包含服务标识和第一地址信息,服务标识用于指示服务器提供的服务,第一地址信息用于指示服务器的地址。
服务器可以先生成携带有服务标识和第一地址信息的注册请求。其中,服务标识可以是服务ID,也可以是服务名称,第一地址信息可以包括服务器的因特网协议(InternetProtocol,IP)地址和端口号,本实施例不作限定。为了便于区分,本实施例中将服务器的地址信息称为第一地址信息,将注册中心的地址信息称为第二地址信息。
服务器还可以获取注册中心的第二地址信息,根据该第二地址信息向注册中心发送注册请求。
步骤202,注册中心根据注册请求对服务器进行注册。
服务器注册完成后即可向外部提供服务。若服务器在运行过程中因为某些原因而无法继续提供服务,那么,即使将服务请求转发给该服务器,该服务器也无法处理该服务请求,从而影响了请求的处理效率。为了避免出现这种情况,注册中心还可以对所有注册的服务器进行探活,根据探活结果来确定服务器是否能够提供服务,即执行步骤203。本实施例中将能够提供服务的服务器称为当前在线的服务器,将无法提供服务的服务器称为当前不在线的服务器。
步骤203,注册中心对注册的各个服务器进行探活。
步骤204,若服务器是可达的,则注册中心确定服务器当前在线。
步骤205,若服务器连续不可达的次数达到次数阈值,则注册中心确定服务器当前不在线。
若服务器不可达,则注册中心可以统计该服务器连续不可达的次数,若该次数达到预设的次数阈值,则确定该服务器无法继续提供服务,即当前不在线。
步骤206,注册中心对当前在线的服务器设置第一标记,对当前不在线的服务器设置第二标记。
为了便于区分,注册中心还可以为服务器设置标记,比如,对当前在线的服务器设置第一标记,对当前不在线的服务器设置第二标记。
其中,第一标记和第二标记可以具有不同的数值。比如,将第一标记的数值设置为1,将第二标记的数值设置为0。当然,还可以将第一标记和第二标记设置为其他内容,本实施例不作限定。
请参考图3,其示出了本申请一个实施例提供的服务请求转发方法的方法流程图,该服务请求转发方法可以应用于转发系统中,转发系统包括网关、注册中心和多个服务器,多个服务器分别与网关和注册中心相连。该服务请求转发方法,可以包括:
步骤301,网关接收客户端发送的服务请求,该服务请求用于请求调用服务器中的服务。
其中,服务请求中至少包括域名和统一资源定位符。比如,域名是xxx.com,统一资源定位符是1,则服务请求中可以包括xxx.com/1。
步骤302,网关检测服务请求是否满足限流条件,若服务请求满足限流条件,则网关不向注册中心发送查询请求,并向客户端返回限流响应;若服务请求不满足限流条件,则网关执行步骤303。
本实施例中还可以检测服务请求是否满足限流条件,这样,可以避免对同一服务的访问需求过多时,导致流量大量聚集,使得服务器的处理压力过大的问题。
具体的,网关检测服务请求是否满足限流条件,可以包括:网关从服务请求中获取域名和统一资源定位符;网关统计第二时段内接收到的服务请求中携带有域名和统一资源定位符的次数;网关从配置文件中获取域名和统一资源定位符对应的限流阈值;若次数达到限流阈值,则网关确定服务请求满足限流条件;若次数未达到限流阈值,则网关确定服务请求不满足限流条件。
假设域名和统一资源定位符为xxx.com/1,第二时段为1秒,且限流阈值为5,则网关可以统计1秒内接收到的包含xxx.com/1的服务请求的次数,若该次数大于或等于5,则确定该服务请求满足限流条件,不向注册中心发送查询请求,并向客户端返回限流状态码,以通过该限流状态码来进行限流响应;若该次数小于5,则确定该服务请求不满足限流条件,继续执行步骤203。
本实施例中,第二时段和限流阈值可以根据需要设置。具体的,网关显示流量设置界面;网关获取在流量设置界面中输入的域名、统一资源定位符、第二时段和限流阈值;网关将域名、统一资源定位符、第二时段和限流阈值对应添加到网关的配置文件中。
其中,不同的域名和统一资源定位符可以设置不同的第二时段和限流阈值。比如,xxx.com/1对应的第二时段为1秒,限流阈值为5;xxx.com/2对应的第二时段为1天,限流阈值为5000。
步骤303,网关根据服务请求向注册中心发送查询请求,该注册中心中注册有多个服务器,且该查询请求用于查询提供服务且当前在线的服务器。
具体的,网关的配置文件中预先存储有注册中心的第二地址信息和访问方式,这样,网关可以先从配置文件中获取注册中心的第二地址信息和访问方式,从服务请求中获取服务标识,再根据服务标识和访问方式生成查询请求,最后根据第二地址信息将查询请求发送给注册中心。
其中,网关的配置文件中预先存储有域名、统一资源定位符和服务标识之间的映射关系,这样,网关从服务请求中获取服务标识,可以包括:网关从服务请求中获取域名和统一资源定位符,从配置文件中获取与域名和统一资源定位符对应的服务标识。
比如,配置文件中预先存储有xxx.com/1-a,则网关可以获取到服务标识为服务为a。
步骤304,注册中心根据查询请求向网关返回查询结果。
具体的,注册中心根据查询请求确定提供服务的至少一个服务器,从该至少一个服务器中选择具有第一标记的服务器,根据选出的服务器的第一地址信息生成查询结果,向网关返回查询结果。
比如,注册中心确定服务标识为a的服务器有5个,其中4个服务器的标记为1,1个服务器的标记为0,则注册中心根据这4个服务器的第一地址信息生成查询结果。
需要说明的是,当注册中心确定所有服务器都不在线时,向网关返回不包含第一地址信息的查询结果,网关根据该查询结果确定无法向服务器转发查询请求,则向客户端返回对应的状态码,比如向客户端返回502。
步骤305,网关将服务请求转发给查询结果所指示的服务器。
具体的,当查询结果中包括一个服务器的第一地址信息时,网关直接将服务请求转发给第一地址信息所指示的服务器;当查询结果中包括至少两个服务器的第一地址信息时,网关从至少两条第一地址信息中选择一条第一地址信息,将服务请求转发给选出的第一地址信息所指示的服务器。
在选择第一地址信息时,网关可以获取每条第一地址信息所指示的服务器在第一时段内的总处理请求数,根据总处理请求数和负载均衡原则,从至少两条第一地址信息中选择一条第一地址信息。
其中,负载均衡原则可以是选择总处理请求数满足预设条件的服务器,比如,可以是选择总处理请求数最少的服务器,或者,可以是排除总处理请求数最多的服务器。假设,第一服务器的总处理请求数为5,第二服务器的总处理请求数为3,第三服务器的总处理请求数为2,若按照第一种选择方式,则选择第二服务器;若按照第二种选择方式,则选择第二服务器或第三服务器。
需要说明的是,本实施例中还可以通过随机方式选择服务器,这样,当服务请求的数量足够大时,也可以实现多个服务器之间的负载均衡。
需要说明的是,网关还可以记录服务请求中的域名、统一资源定位符和接收服务请求的服务器之间的对应关系,并显示请求分配界面,该请求分配界面中包含上述对应关系,这样,用户可以查看每条服务请求被分配给哪个服务器进行处理。
综上所述,本申请实施例提供的服务请求转发方法,网关根据客户端发送的服务请求向注册中心查询提供服务且当前在线的服务器,注册中心向网关返回查询结果,网关可以将服务请求转发给查询结果所指示的服务器。由于注册中心会实时更新在线的服务器,这样,网关向注册中心查询到的服务器都是在线的,从而可以保证服务请求被转发至在线的服务器,使得服务请求能够被及时处理。
注册中心对注册的各个服务器进行探活;若服务器是可达的,则注册中心确定服务器当前在线;若服务器连续不可达的次数达到次数阈值,则注册中心确定服务器当前不在线,从而可以实时更新在线的服务器。
网关先获取每条第一地址信息所指示的服务器在第一时段内的总处理请求数,再根据总处理请求数和负载均衡原则,从至少两条第一地址信息中选择一条第一地址信息,从而可以在提供相同的服务的服务器之间实现负载均衡。
网关检测服务请求是否满足限流条件,若服务请求满足限流条件,则不向注册中心发送查询请求,并向所述客户端返回限流响应,从而可以通过限流条件对服务请求进行访问限制,可以避免对同一服务的访问需求过多时,导致流量大量聚集,使得服务器的处理压力过大的问题。
网关可以显示流量设置界面,并获取在流量设置界面中输入的域名、统一资源定位符和限流阈值,将域名、统一资源定位符和限流阈值对应添加到网关的配置文件中,这样,用户可以根据需求对限流阈值进行设置,使得限流阈值更加符合业务特点。
请参考图4,其示出了本申请一个实施例提供的转发系统的结构框图,该转发系统包括网关410、注册中心420和多个服务器430,多个服务器430分别与网关410和注册中心420相连。图4中以3个服务器430为例进行了说明。
网关410,用于接收客户端发送的服务请求,服务请求用于请求调用服务器430中的服务;
网关410,还用于根据服务请求向注册中心420发送查询请求,注册中心420中注册有多个服务器430,且查询请求用于查询提供服务且当前在线的服务器430;
注册中心420,用于根据查询请求向网关410返回查询结果;
网关410,还用于将服务请求转发给查询结果所指示的服务器430。
在一个可选的实施例中,注册中心420,还用于对注册的各个服务器430进行探活;
若服务器430是可达的,则注册中心420,还用于确定服务器430当前在线;
若服务器430连续不可达的次数达到次数阈值,则注册中心420,还用于确定服务器430当前不在线。
在一个可选的实施例中,注册中心420,还用于对当前在线的服务器430设置第一标记,对当前不在线的服务器430设置第二标记;
注册中心420,还用于根据查询请求确定提供服务的至少一个服务器430;从至少一个服务器430中选择具有第一标记的服务器430,根据选出的服务器430的第一地址信息生成查询结果,第一地址信息用于指示服务器430的地址;向网关410返回查询结果。
在一个可选的实施例中,服务器430,还用于向注册中心420发送注册请求,注册请求中包含服务标识和第一地址信息,服务标识用于指示服务器430提供的服务,第一地址信息用于指示服务器430的地址;
注册中心420,还用于根据注册请求对服务器430进行注册。
在一个可选的实施例中,网关410,还用于从配置文件中获取注册中心420的第二地址信息和访问方式,第二地址信息用于指示注册中心420的地址;
网关410,还用于从服务请求中获取服务标识,服务标识用于指示客户端所请求调用的服务;
网关410,还用于根据服务标识和访问方式生成查询请求;
网关410,还用于根据第二地址信息将查询请求发送给注册中心420。
在一个可选的实施例中,网关410,还用于从服务请求中获取域名和统一资源定位符;
网关410,还用于从配置文件中获取与域名和统一资源定位符对应的服务标识。
在一个可选的实施例中,当查询结果中包括一个服务器430的第一地址信息时,网关410,还用于将服务请求转发给第一地址信息所指示的服务器430;
当查询结果中包括至少两个服务器430的第一地址信息时,网关410,还用于从至少两条第一地址信息中选择一条第一地址信息,将服务请求转发给选出的第一地址信息所指示的服务器430。
在一个可选的实施例中,网关410,还用于获取每条第一地址信息所指示的服务器430在第一时段内的总处理请求数;
网关410,还用于根据总处理请求数和负载均衡原则,从至少两条第一地址信息中选择一条第一地址信息。
在一个可选的实施例中,网关410,还用于在接收客户端发送的服务请求之后,检测服务请求是否满足限流条件;
若服务请求满足限流条件,则网关410,还用于不向注册中心420发送查询请求,并向客户端返回限流响应;
若服务请求不满足限流条件,则网关410,还用于触发执行网关410根据服务请求向注册中心420发送查询请求的步骤。
在一个可选的实施例中,网关410,还用于从服务请求中获取域名和统一资源定位符;
网关410,还用于统计第二时段内接收到的服务请求中携带有域名和统一资源定位符的次数;
网关410,还用于从配置文件中获取域名和统一资源定位符对应的限流阈值;
若次数达到限流阈值,则网关410,还用于确定服务请求满足限流条件;
若次数未达到限流阈值,则网关410,还用于确定服务请求不满足限流条件。
在一个可选的实施例中,网关410,还用于显示流量设置界面;
网关410,还用于获取在流量设置界面中输入的域名、统一资源定位符、第二时段和限流阈值;
网关410,还用于将域名、统一资源定位符、第二时段和限流阈值对应添加到网关410的配置文件中。
在一个可选的实施例中,网关410,还用于记录服务请求中的域名、统一资源定位符和接收服务请求的服务器430之间的对应关系;
网关410,还用于显示请求分配界面,请求分配界面中包含对应关系。
综上所述,本申请实施例提供的转发系统,网关根据客户端发送的服务请求向注册中心查询提供服务且当前在线的服务器,注册中心向网关返回查询结果,网关可以将服务请求转发给查询结果所指示的服务器。由于注册中心会实时更新在线的服务器,这样,网关向注册中心查询到的服务器都是在线的,从而可以保证服务请求被转发至在线的服务器,使得服务请求能够被及时处理。
注册中心对注册的各个服务器进行探活;若服务器是可达的,则注册中心确定服务器当前在线;若服务器连续不可达的次数达到次数阈值,则注册中心确定服务器当前不在线,从而可以实时更新在线的服务器。
网关先获取每条第一地址信息所指示的服务器在第一时段内的总处理请求数,再根据总处理请求数和负载均衡原则,从至少两条第一地址信息中选择一条第一地址信息,从而可以在提供相同的服务的服务器之间实现负载均衡。
网关检测服务请求是否满足限流条件,若服务请求满足限流条件,则不向注册中心发送查询请求,并向客户端返回限流响应,从而可以通过限流条件对服务请求进行访问限制,可以避免对同一服务的访问需求过多时,导致流量大量聚集,使得服务器的处理压力过大的问题。
网关可以显示流量设置界面,并获取在流量设置界面中输入的域名、统一资源定位符和限流阈值,将域名、统一资源定位符和限流阈值对应添加到网关的配置文件中,这样,用户可以根据需求对限流阈值进行设置,使得限流阈值更加符合业务特点。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。