【具体实施方式】
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先说明,本申请以下方法实施例适用于包括服务调用节点可以调用服务提供节点所提供的服务,而服务提供节点可以向服务调用节点提供服务的各种系统或场景,尤其适用于分布式集群,但并不限于分布式集群。
图1为本申请以下方法实施例所基于的一种分布式集群的结构示意图。如图1所示,该分布式集群包括多个节点10。其中,每个节点10用于向不同于该节点的其他节点提供服务,也可以调用不同于该节点的其他节点所提供的服务。多个不同的节点10可以提供同一服务。不同服务的性能不同。其中,当节点10向其他节点提供服务时可以作为服务提供节点,当节点10调用其他节点所提供的服务时可以作为服务调用节点。
图2为本申请一实施例提供的服务调用方法的流程示意图。该方法可以适用于但不限于图1所示分布式集群。如图2所示,该方法包括:
201、服务调用节点获取可以向服务调用节点提供服务的至少一个服务提供节点的能力表征参数,该能力表征参数用于表征服务提供节点根据服务提供节点的服务性能对服务提供节点的当前服务能力进行修正后可提供的服务能力。
202、服务调用节点根据至少一个服务提供节点的能力表征参数,从至少一个服务提供节点中确定目标节点。
203、服务调用节点将服务调用请求发送给目标节点,以调用目标节点提供的服务。
若本实施例提供的方法应用于分布式集群,则本实施例中的服务调用节点可以是分布式集群中任意一个节点,相应的,服务提供节点可以是分布式集群中不同于服务调用节点且可以向服务调用节点提供服务的任意一个节点。服务提供节点可以有一个或多个。
具体的,当服务调用节点需要调用某个服务时,首先获取可以提供该服务的至少一个服务提供节点的能力表征参数,根据该能力表征参数从至少一个服务提供节点中确定最终向服务调用节点提供服务的目标节点,再将服务调用请求发送给目标节点,以调用目标节点所提供的服务。
其中,服务提供节点的能力表征参数可以是服务提供节点的服务能力参数,该服务能力参数用于表征服务提供节点根据自身的服务性能对当前服务能力进行修正后可提供的服务能力;服务能力参数越大表示该服务提供节点可提供的服务能力越强。或者,服务提供节点的能力表征参数可以是服务提供节点的处理压力参数,该处理压力参数用于表征服务提供节点根据自身的服务性能对当前处理压力进行修正后的处理压力;处理压力参数越大表示该服务提供节点的处理压力越大,相应的可提供的服务能力就越弱。当前服务能力是指服务调用节点获取服务提供节点的服务能力参数时,该服务提供节点可提供的真实服务能力。当前处理压力是指服务调用节点获取服务提供节点的服务能力参数时,该服务提供节点当时的真实处理压力。
其中,处理压力参数可由服务提供节点根据其服务性能、当前队列消息数和预设的队列阈值获得。具体获取方式可参见下述服务提供方法实施例中的描述。基于此,当前处理压力可以是服务提供节点的当前队列消息数与预设的队列阈值的比值。
由于本实施例中的能力表征参数可以反映服务提供节点的服务能力,因此服务调用节点可以基于服务提供节点的服务能力确定最终向服务调用节点提供服务的目标节点,这样可以优先选择服务能力强的服务提供节点作为目标节点,不至于导致某个服务提供节点的处理压力过大,有利于均衡服务提供节点之间的处理压力;另外,由于本实施例中的能力表征参数反映了服务提供节点的服务性能,因此还可以保证服务提供节点的服务性能,保证服务提供节点所提供的服务质量。由此可见,本实施例提供的方法一方面可以均衡服务提供节点之间的处理压力,另一方面还可以保证服务提供节点所提供的服务质量,有利于提高整个系统的服务能力。
上述服务调用节点获取至少一个服务提供节点的能力表征参数的实施方式包括但不限于以下几种:
第一种方式:服务调用节点可以接收至少一个服务提供节点中每个服务提供节点主动发送的能力表征参数。例如,服务提供节点可以定时向服务调用节点发送其能力表征参数。另外,由于随着时间的推移,服务提供节点的能力表征参数会随着本地消息队列中的服务调用请求的数量发生变化,因此服务提供节点还可以在能力表征参数发生变化时向服务调用节点发送其能力表征参数。这种主动发送能力表征参数的方式可以减少分布式集群中的数据传输量,有利于节约资源。
第二种方式:服务调用节点可以向至少一个服务提供节点中每个服务提供节点发送请求,以请求获取每个服务提供节点的能力表征参数,服务提供节点根据服务调用节点发送的请求,向服务调用节点返回其能力表征参数。
如图1所示,可以在分布式集群中独立部署一台配置中心20,由配置中心20集中管理分布式集群中的能力表征参数。具体的,服务提供节点定时或者在其能力表征参数发生变化时,将能力表征参数提供给配置中心20。也就是说,配置中心20存储有每个服务提供节点的能力表征参数。
基于上述配置中心,第三种方式:服务调用节点可以定时向配置中心发送参数请求,以请求获取至少一个服务提供节点的能力表征参数;配置中心根据服务调用节点发送的参数请求,获取至少一个服务提供节点的能力表征参数并返回给服务调用节点;服务调用节点接收配置中心根据上述参数请求返回的至少一个服务提供节点的能力表征参数。
基于上述配置中心,第四种方式:服务调用节点接收配置中心在至少一个服务提供节点中每个服务提供节点的能力表征参数发生变化时主动发送的每个服务提供节点的能力表征参数。
在一可选实施方式中,能力表征参数为处理压力参数,该处理压力参数表征服务提供节点根据服务提供节点的服务性能对服务提供节点的当前处理压力进行修正后的处理压力。基于此,服务调用节点根据至少一个服务提供节点的能力表征参数,从至少一个服务提供节点中确定目标节点的方式包括但不限于以下方式:
服务调用节点根据至少一个服务提供节点的处理压力参数,确定是否存在处理压力参数小于预设参数门限的服务提供节点;
如果确定存在处理压力参数小于预设参数门限的服务提供节点,说明当前存在处理压力不太大的服务提供节点,于是服务调用节点可以从处理压力参数小于预设参数门限的服务提供节点中选择目标节点,优选的,服务调用节点可以从处理压力参数小于预设参数门限的服务提供节点中选择处理压力参数最小的服务提供节点作为目标节点;
如果确定不存在处理压力参数小于预设参数门限的服务提供节点,说明此时各服务提供节点的处理压力都较大,如果再向这些服务提供节点发送服务调用请求,有可能导致这些服务提供节点的消息队列溢出或处理速度陡然下降,因此服务调用节点将服务调用请求暂存在本地等待,直到出现处理压力参数小于预设参数门限的服务提供节点为止,从所出现的处理压力参数小于预设参数门限的服务提供节点中选择处理压力参数最小的服务提供节点作为目标节点。例如,若同时出现多个处理压力参数小于参数门限的服务提供节点,优选的,服务调用节点可以从中选择处理压力参数最小的服务提供节点作为目标节点。
进一步,在上述实施方式的基础上,若服务调用节点将服务调用请求暂存在本地,则随着时间的推移,服务调用节点本地暂存的服务调用请求就会很多,那么服务调用节点的处理压力也会增大,进而导致调用服务调用节点所提供的服务的节点的处理压力增大,通过层层的反馈,最终会将处理压力反馈到分布式集群的接入层的节点,这些接入层的节点大多是通过同步协议进行接入的,因此可以在其处理压力较大时可以对来自分布式集群外部触发产生服务调用请求的外部请求进行限流,例如直接将一部分外部请求丢掉,这样可以保证分布式集群的整体可用性。
基于上述分析,如果服务调用节点本身就是分布式集群的接入层节点,则当服务调用节点本地暂存的服务调用请求的数量超过预设暂存数量门限时,可以对来自分布式集群外部的触发产生服务调用请求的外部请求进行限流,例如可以直接丢掉部分外部请求。
图3为本申请一实施例提供的服务提供方法的流程示意图。该方法也适用于但不限于图1所示分布式集群。如图3所示,该方法包括:
301、服务提供节点确定服务提供节点的能力表征参数,该能力表征参数用于表征所述服务提供节点根据所述服务提供节点的服务性能对所述服务提供节点的当前服务能力进行修正后可提供的服务能力。
302、服务提供节点向服务调用节点提供上述能力表征参数,以使服务调用节点根据上述能力表征参数,从至少一个服务提供节点中确定目标节点并请求调用目标节点所提供的服务。
若本实施例提供的方法应用于分布式集群中,则服务调用节点可以是分布式集群中任意一个节点,相应的,服务提供节点可以是分布式集群中不同于服务调用节点且可以向服务调用节点提供服务的任意一个节点。服务提供节点可以有一个或多个。
具体的,服务提供节点在向服务调用节点提供服务之前,首先确定服务提供节点的能力表征参数,将能力表征参数提供给服务调用节点;服务调用节点根据该能力表征参数确定是否选择该服务提供节点作为最终向服务调用节点提供服务的目标节点。
其中,服务提供节点的能力表征参数可以是服务提供节点的服务能力参数,该服务能力参数用于表征服务提供节点根据自身的服务性能对当前服务能力进行修正后可提供的服务能力;服务能力参数越大表示该服务提供节点可提供的服务能力越强。或者,服务提供节点的能力表征参数可以是服务提供节点的处理压力参数,该处理压力参数用于表征服务提供节点根据自身的服务性能对当前处理压力进行修正后的处理压力;处理压力参数越大表示该服务提供节点的处理压力越大,相应的可提供的服务能力就越弱。
例如,服务提供节点根据服务提供节点的服务性能对服务提供节点的当前处理压力进行修正,以获得作为能力表征参数的处理压力参数。
其中,服务提供节点的服务性能包括但不限于:要求响应速度(可简称为响应速度优先),或者要求吞吐量(可简称为吞吐量优先),或者响应速度和吞吐量均衡。其中,响应速度优先是指针对服务提供节点发送的调用请求要求,服务提供节点在尽可能短的时间返回结果,所述尽可能短的时间是指不大于服务提供节点在当时处理压力下的正常处理时间的时间。吞吐量优先是指要求服务提供节点在单位时间内处理尽可能多的服务调用请求,所述尽可能多是指不少于服务提供节点在当时处理压力下所能正常处理的请求数的数量。
在一可选实施方式中,服务提供节点根据服务提供节点的服务性能对服务提供节点的当前处理压力进行修正,以获得作为能力表征参数的处理压力参数的方式包括但不限于以下几种:
首先说明,在以下几种方式中,队列阀值是服务提供节点预设的配置项,表示服务提供节点所能接受的最大消息堆积量。
第一种方式;服务提供节点将当前队列消息数与预设的队列阈值的比值作为服务提供节点的实际处理压力;如果服务提供节点的服务性能要求响应速度,则增大实际处理压力以作为处理压力参数;如果服务提供节点提供的服务性能要求吞吐量,则减小实际处理压力以获得处理压力参数。其中,随着队列消息数的上升,对应的实际处理压力的增长趋势如图4所示。
第二种方式:如果服务提供节点的服务性能要求响应速度,服务提供节点获取当前队列消息数的平方根与预设的队列阈值的平方根的比值作为服务提供节点的处理压力参数;其中,随着队列消息数的上升,对应的处理压力参数的增长趋势如图5所示。
如果服务提供节点的服务性能要求吞吐量,服务提供节点获取当前队列消息数的平方与预设的队列阈值的平方的比值作为服务提供节点的处理压力参数。其中,随着队列消息数的上升,对应的处理压力参数的增长趋势如图6所示。
在一可选实施方式中,服务提供节点向服务调用节点提供能力表征参数的方式包括但不限于以下几种:
第一种方式:服务提供节点主动将能力表征参数发送给服务调用节点。例如,服务提供节点可以定时向服务调用节点发送其能力表征参数。另外,由于随着时间的推移,服务提供节点的能力表征参数会随着本地消息队列中的服务调用请求的数量发生变化,因此服务提供节点还可以在能力表征参数发生变化时向服务调用节点发送其能力表征参数。这种主动发送能力表征参数的方式可以减少分布式集群中的数据传输量,有利于节约资源。
第二种方式:服务提供节点接收服务调用节点发送的请求,根据该请求将能力表征参数发送给服务调用节点。
如图1所示,可以在分布式集群中独立部署一台配置中心20,由配置中心20集中管理分布式集群中的能力表征参数。
第三种方式:服务提供节点定时或者在其能力表征参数发生变化时,将能力表征参数提供给配置中心20,以便于服务调用节点从配置中心20获取服务提供节点的能力表征参数。
由于本实施例中的能力表征参数可以反映服务提供节点所能提供的服务能力,因此服务调用节点基于服务提供节点的服务能力确定最终向服务调用节点提供服务的目标节点,这样可以优先选择服务能力强的服务提供节点作为目标节点,不至于导致某个服务提供节点的处理压力过大,有利于均衡服务提供节点之间的处理压力;另外,由于本实施例中的能力表征参数反映了服务提供节点的服务性能,因此可以保证服务提供节点的服务性能,保证服务提供节点所提供的服务质量。由此可见,本实施例提供的方法一方面可以均衡服务提供节点之间的处理压力,另一方面还可以保证服务提供节点所提供的服务质量,因此可以提高整个系统的服务能力。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
图7为本申请一实施例提供的服务调用节点的结构示意图。该服务调用节点可以位于分布式集群中,是分布式集群中多个节点中的一个节点,但并不限于此。如图7所示,该服务调用节点包括:获取模块71、确定模块72和发送模块73。
获取模块71,用于获取可以向该服务调用节点提供服务的至少一个服务提供节点的能力表征参数,所述能力表征参数用于表征服务提供节点根据服务提供节点的服务性能对服务提供节点的当前服务能力进行修正后可提供的服务能力。
其中,服务提供节点的能力表征参数可以是服务提供节点的服务能力参数,该服务能力参数用于表征服务提供节点根据自身的服务性能对当前服务能力进行修正后获得的后可提供的服务能力;服务能力参数越大表示该服务提供节点的可提供的服务能力越强。或者,服务提供节点的能力表征参数可以是服务提供节点的处理压力参数,该处理压力参数用于表征服务提供节点根据自身的服务性能对当前处理压力进行修正后的处理压力;处理压力参数越大表示该服务提供节点的处理压力越大,相应的可提供的服务能力就越弱。当前服务能力是指服务调用节点获取服务提供节点的服务能力参数时,该服务提供节点可提供的真实服务能力。或当前处理压力是指服务调用节点获取服务提供节点的服务能力参数时,该服务提供节点所能提供的经过修正后的服务能力或当时的真实处理压力。
确定模块72,与获取模块71连接,用于根据获取模块71获取的至少一个服务提供节点的能力表征参数,从至少一个服务提供节点中确定目标节点。
发送模块73,与确定模块72连接,用于将服务调用请求发送给确定模块72确定的目标节点,以调用目标节点提供的服务。
在一可选实施方式中,获取模块71具体可用于定时向配置中心发送参数请求,以请求获取至少一个服务提供节点的能力表征参数,接收配置中心根据参数请求返回的至少一个服务提供节点的能力表征参数。或者
获取模块71具体可用于接收配置中心在至少一个服务提供节点中每个服务提供节点的能力表征参数发生变化时主动发送的每个服务提供节点的能力表征参数。
其中,配置中心存储有每个服务提供节点的能力表征参数。
在一可选实施方式中,确定模块72具体可用于在能力表征参数为处理压力参数时,根据至少一个服务提供节点的处理压力参数,确定是否存在处理压力参数小于预设参数门限的服务提供节点,在确定存在处理压力参数小于所述参数门限的服务提供节点时,从处理压力参数小于所述参数门限的服务提供节点中选择处理压力参数最小的服务提供节点作为目标节点,或者在确定不存在处理压力参数小于参数门限的服务提供节点时,将服务调用请求暂存在本地等待,直到出现处理压力参数小于参数门限的服务提供节点为止,从所出现的处理压力参数小于参数门限的服务提供节点中选择处理压力参数最小的服务提供节点作为目标节点。
其中,上述处理压力参数表征服务提供节点根据服务提供节点的服务性能对服务提供节点的当前处理压力进行修正后的处理压力。
在一可选实施方式中,本实施例的服务调用节点可以是分布式集群的接入层节点,基于此,该服务调用节点还可以包括:限流模块,用于在该服务调用节点是分布式集群的接入层节点时,当该服务调用节点本地暂存的服务调用请求的数量超过预设暂存数量门限时,对来自分布式集群外部的触发产生服务调用请求的外部请求进行限流。
值得说明的是,本实施例提供的服务调用节点同时也可以作为服务提供节点,因此也可以具有下述实施例提供的服务提供节点的功能和结构,具体不再赘述。
本实施例提供的服务调用节点,基于服务提供节点的能力表征参数确定最终向服务调用节点提供服务的目标节点,这样可以优先选择服务能力强的服务提供节点作为目标节点,不至于导致某个服务提供节点的处理压力过大,有利于均衡服务提供节点之间的处理压力;另外,由于本实施例服务调用节点所使用的能力表征参数反映了服务提供节点的服务性能,也就是说服务提供节点可以优先保证其服务性能,因此可以保证服务提供节点所提供的服务质量。由此可见,采用本实施例提供的服务调用节点一方面可以均衡服务提供节点之间的处理压力,另一方面还可以保证服务提供节点所提供的服务质量,因此可以提高整个系统的服务能力。
图8为本申请一实施例提供的服务提供节点的结构示意图。该服务提供节点可以位于分布式集群中,是分布式集群中多个节点中的一个节点,可以向多个节点中不同于该服务提供节点的服务调用节点提供服务,但不限于此。如图8所示,该服务提供节点包括:确定模块81和提供模块82。
确定模块81,用于确定该服务提供节点的能力表征参数,所述能力表征参数用于表征服务提供节点根据服务提供节点的服务性能对服务提供节点的当前服务能力进行修正后可提供的服务能力。
其中,服务提供节点的能力表征参数可以是服务提供节点的服务能力参数,该服务能力参数用于表征服务提供节点根据自身的服务性能对当前服务能力进行修正后可提供的服务能力;服务能力参数越大表示该服务提供节点可提供的服务能力越强。或者,服务提供节点的能力表征参数可以是服务提供节点的处理压力参数,该处理压力参数用于表征服务提供节点根据自身的服务性能对当前处理压力进行修正后的处理压力;处理压力参数越大表示该服务提供节点的处理压力越大,相应的可提供的服务能力就越弱。
提供模块82,与确定模块81连接,用于向服务调用节点提供确定模块81确定的能力表征参数,以使服务调用节点根据该能力表征参数,从至少一个服务提供节点中确定目标节点并请求调用目标节点所提供的服务。
在一可选实施方式中,确定模块81具体可用于根据服务提供节点的服务性能对服务提供节点的当前处理压力进行修正,以获得作为能力表征参数的处理压力参数。
在一可选实施方式中,确定模块81具体可用于将服务提供节点的当前队列消息数与预设的队列阈值的比值作为服务提供节点的实际处理压力,并在服务提供节点的服务性能要求响应速度时,增大该实际处理压力以获得处理压力参数,或者在服务提供节点的服务性能要求吞吐量时,减小该实际处理压力以获得处理压力参数。
在一可选实施方式中,确定模块81具体可用于在服务提供节点的服务性能要求响应速度时,获取服务提供节点的当前队列消息数的平方根与预设的队列阈值的平方根的比值作为处理压力参数,或者在服务提供节点的服务性能要求吞吐量时,获取服务提供节点的当前队列消息数的平方与预设的队列阈值的平方的比值作为处理压力参数。
在一可选实施方式中,提供模块82具体可用于定时或者在能力表征参数发生变化时,将能力表征参数发送给配置中心,以供服务调用节点从配置中心获取能力表征参数。
值得说明的是,本实施例提供的服务提供节点同时也可以作为服务调用节点,因此也可以具有前述实施例提供的服务调用节点的功能和结构,具体不再赘述。
本实施例提供的服务提供节点,与前述实施例提供的服务调用节点相配合,将能力表征参数提供给服务调用节点,以供服务调用节点根据该能力表征参数确定最终向服务调用节点提供服务的目标节点,这样服务调用节点可以优先选择服务能力强的服务提供节点作为目标节点,不至于导致某个服务提供节点的处理压力过大,有利于均衡服务提供节点之间的处理压力;另外,本实施例提供的服务提供节点的能力表征参数反映了服务提供节点的服务性能,因此可以保证其服务性能,因此可以保证服务提供节点所提供的服务质量。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。