请求分发方法和装置与流程

文档序号:12478437阅读:299来源:国知局
请求分发方法和装置与流程

本发明涉及互联网技术领域,尤其涉及一种请求分发方法和装置。



背景技术:

在互联网中服务器的一些应用场景下,例如,用户通常使用的银行系统的后台服务器,由于总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这种场景下需要部署分布式服务器。相关技术中,根据分布式服务器中每个服务器的编号顺序对客户端发送的请求进行交替或者随机的分发,或者,根据每个服务器负载指数,选取负载指数较小的服务器分发请求。

第一种方式下,未有结合服务器负载指数的因素动态控制客户端请求的分发,第二种方式下,分布式服务器缓存的使用效率不高。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明的一个目的在于提出一种请求分发方法,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

本发明的另一个目的在于提出一种请求分发装置。

为达到上述目的,本发明第一方面实施例提出的请求分发方法,包括:在接收到客户端发送的请求时,获取与所述客户端的标识对应的多个服务器的映射值;获取所述对应的多个服务器中每个服务器在请求的时间点上的负载指数;根据所述每个服务器的映射值和所述负载指数生成所述每个服务器的评分值;根据所述评分值从所述对应的多个服务器中选取目标服务器,并将所述请求分发至所述目标服务器。

在本发明的一个实施例中,所述根据所述评分值从所述对应的多个服务器中选取目标服务器,包括:

将所述每个服务器的评分值中最大的评分值对应的服务器作为所述目标服务器。

在本发明的一个实施例中,所述根据所述每个服务器的映射值和所述负载指数生成所述每个服务器的评分值,包括:

对所述每个服务器的映射值和所述负载指数进行加权求和处理,以生成所述每个服务器的评分值。

在本发明的一个实施例中,所述获取与所述客户端的标识对应的多个服务器的映射值,包括:

从日志文件中获取与所述客户端的标识对应的多个服务器的请求分发信息;

根据所述请求的时间点和所述请求分发信息获取所述多个服务器的映射值。

在本发明的一个实施例中,所述日志文件通过以下步骤配置:

获取所述请求的时间点之前的至少一个时间点的请求分发信息;

根据所述请求分发信息配置日志文件,其中,所述请求分发信息包括:在所述请求的时间点之前的至少一个时间点,以及在所述至少一个时间点中每个时间点上,所述客户端的请求被转发至所述每个服务器的次数。

在本发明的一个实施例中,所述获取所述对应的多个服务器中每个服务器在请求的时间点上的负载指数,包括:

将所述对应的多个服务器中每个服务器在所述请求的时间点上的实际请求连接数,和所述服务器所能承载的最大请求连接数的比值作为所述负载指数。

本发明第一方面实施例提出的请求分发方法,通过在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值,获取对应的多个服务器中每个服务器在请求的时间点上的负载指数,根据每个服务器的映射值和负载指数生成每个服务器的评分值,以及根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

为达到上述目的,本发明第二方面实施例提出的请求分发装置,包括:第一获取模块,用于在接收到客户端发送的请求时,获取与所述客户端的标识对应的多个服务器的映射值;第二获取模块,用于获取所述对应的多个服务器中每个服务器在请求的时间点上的负载指数;生成模块,用于根据所述每个服务器的映射值和所述负载指数生成所述每个服务器的评分值;选取模块,用于根据所述评分值从所述对应的多个服务器中选取目标服务器,并将所述请求分发至所述目标服务器。

在本发明的一个实施例中,所述选取模块具体用于:

将所述每个服务器的评分值中最大的评分值对应的服务器作为所述目标服务器。

在本发明的一个实施例中,所述生成模块具体用于:

对所述每个服务器的映射值和所述负载指数进行加权求和处理,以生成所述每个服务器的评分值。

在本发明的一个实施例中,所述第一获取模块包括:

第一获取子模块,用于从日志文件中获取与所述客户端的标识对应的多个服务器的请求分发信息;

第二获取子模块,用于根据所述请求的时间点和所述请求分发信息获取所述多个服务器的映射值。

在本发明的一个实施例中,所述日志文件通过以下模块配置:

第三获取模块,用于获取所述请求的时间点之前的至少一个时间点的请求分发信息;

配置模块,用于根据所述请求分发信息配置日志文件,其中,所述请求分发信息包括:在所述请求的时间点之前的至少一个时间点,以及在所述至少一个时间点中每个时间点上,所述客户端的请求被转发至所述每个服务器的次数。

在本发明的一个实施例中,所述第二获取模块具体用于:

将所述对应的多个服务器中每个服务器在所述请求的时间点上的实际请求连接数,和所述服务器所能承载的最大请求连接数的比值作为所述负载指数。

本发明第二方面实施例提出的请求分发装置,通过在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值,获取对应的多个服务器中每个服务器在请求的时间点上的负载指数,根据每个服务器的映射值和负载指数生成每个服务器的评分值,以及根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1是本发明一实施例提出的请求分发方法的流程示意图;

图2是本发明另一实施例提出的请求分发方法的流程示意图;

图3是本发明一实施例提出的请求分发装置的结构示意图;

图4是本发明另一实施例提出的请求分发装置的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

图1是本发明一实施例提出的请求分发方法的流程示意图。

参见图1,该方法包括:

S11:在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值。

该方法可以应用于分布式服务器中。

本实施例的执行主体可以例如为分布式服务器中的用于分发请求的服务器节点,也可以例如为用于分发客户端请求的前端模块,在此不作限制。

在互联网中服务器的一些应用场景下,例如,用户通常使用的银行系统的后台服务器,由于总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这种场景下需要部署分布式服务器。

可选地,客户端发送的请求中可以预设有客户端的标识,客户端的标识可以用于唯一标识该客户端。

在本发明的实施例中,多个服务器的映射值可以用于标记在请求的时间点之前的至少一个时间点的请求分发信息,其中,请求分发信息包括:在所述请求的时间点之前的至少一个时间点,以及在至少一个时间点中每个时间点上,客户端的请求被转发至每个服务器的次数。

进一步地,多个服务器中每个服务器在每个时间点上的映射值可以根据当前时间点、上述客户端的请求被转发至每个服务器的次数,以及上述客户端的请求每次被转发至分布式服务器中服务器时对应的时间点获取。

可以理解的是,在分布式服务器的应用场景下,会有多个客户端向分布式服务器发送请求,因此,假设上述发送请求的客户端为客户端A或者也可以为客户端B,则在本发明的实施例中,与客户端A的标识对应的多个服务器为分布式服务器中转发过客户端A的请求的服务器,而与客户端B的标识对应的多个服务器为分布式服务器中转发过客户端B的请求的服务器,进一步地,与客户端A的标识对应的多个服务器,和与客户端B的标识对应的多个服务器可以存在或者不存在交集服务器,对此不作限制。

可选地,可以从日志文件中获取与客户端的标识对应的多个服务器的请求分发信息;根据请求的时间点和请求分发信息获取所述多个服务器的映射值,映射值的个数与对应的多个服务器的个数相同。

S12:获取对应的多个服务器中每个服务器在请求的时间点上的负载指数。

可以理解的是,根据服务器的工作机制,在不同的时间点上,服务器的负载指数可以不同或者相同。

可选地,可以将服务器在访问请求的时间点上的实际请求连接数,和服务器所能承载的最大请求连接数的比值作为负载指数。

S13:根据每个服务器的映射值和负载指数生成每个服务器的评分值。

可选地,可以对每个服务器的映射值和负载指数进行加权求和处理,以生成每个服务器的评分值。

相关技术中,根据分布式服务器中每个服务器的编号顺序对客户端发送的请求进行交替或者随机的分发,或者,根据每个服务器负载指数,选取负载指数较小的服务器分发请求。第一种方式下,未有结合服务器负载指数的因素动态控制客户端请求的分发,第二种方式下,分布式服务器缓存的使用效率不高。

而本发明的实施例中,通过对每个服务器的映射值和负载指数进行加权求和处理,以生成每个服务器的评分值,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

S14:根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器。

可选地,根据评分值从对应的多个服务器中选取目标服务器,包括:将每个服务器的评分值中最大的评分值对应的服务器作为目标服务器。

本实施例中,通过在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值,获取对应的多个服务器中每个服务器在请求的时间点上的负载指数,根据每个服务器的映射值和负载指数生成每个服务器的评分值,以及根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

图2是本发明另一实施例提出的请求分发方法的流程示意图。

参见图2,该方法包括:

S21:获取请求的时间点之前的至少一个时间点的请求分发信息。

其中,请求分发信息包括:在至少一个时间点中每个时间点上,客户端的请求被转发至每个服务器的次数,以及客户端的请求被转发的总的次数。

S22:根据请求分发信息配置日志文件。

本步骤中,能够实现将请求的时间点之前的至少一个时间点的请求分发信息纳入每个服务器评分值的考量范畴,能够保证分布式服务器缓存的使用效率。

S23:在接收到客户端发送的请求时,从日志文件中获取与客户端的标识对应的多个服务器的映射值。

在本发明的实施例中,多个服务器的映射值可以用于标记在请求的时间点之前的至少一个时间点的请求分发信息,其中,请求分发信息包括:在所述请求的时间点之前的至少一个时间点,以及在至少一个时间点中每个时间点上,客户端的请求被转发至每个服务器的次数。

进一步地,多个服务器中每个服务器在每个时间点上的映射值可以根据当前时间点、上述客户端的请求被转发至每个服务器的次数,以及上述客户端的请求每次被转发至分布式服务器中服务器时对应的时间点获取。

具体公式例如,

<mrow> <mi>w</mi> <mi>e</mi> <mi>i</mi> <mi>g</mi> <mi>h</mi> <mi>t</mi> <mrow> <mo>(</mo> <mi>c</mi> <mi>u</mi> <mi>s</mi> <mi>t</mi> <mi>o</mi> <mi>m</mi> <mi>e</mi> <mi>r</mi> <mo>,</mo> <msub> <mi>server</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </munderover> <mfrac> <mn>1</mn> <mrow> <mi>t</mi> <mo>-</mo> <msub> <mi>t</mi> <mi>k</mi> </msub> </mrow> </mfrac> <mo>;</mo> </mrow>

其中,m表示客户端customer发送的请求被转发至分布式服务器中服务器serveri的次数,t表示当前时间点,tk表示请求每次被转发至分布式服务器中服务器serveri时对应的时间点。

S24:获取对应的多个服务器中每个服务器在请求的时间点上的负载指数。

可选地,假设服务器serveri在请求的时间点上的实际请求连接数为m',且该服务器serveri所能承载的最大请求连接数为m,则根据下述公式得到服务器的负载指数为:

loadFactor(serveri)=m'/m;

本步骤中,通过计算得到服务器的负载指数,可以不仅考虑请求的时间点上的映射值,而且综合考虑每个服务器在请求的时间点上的负载指数,提升请求分发效果。

S25:对每个服务器的映射值和负载指数进行加权求和处理,以生成每个服务器的评分值。

在本发明的实施例中,可以根据预设公式对服务器的映射值和负载指数进行加权求和处理,以生成每个服务器的评分值,其中,预设公式为:

<mrow> <mi>H</mi> <mi>i</mi> <mi>t</mi> <mrow> <mo>(</mo> <msub> <mi>server</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mi>M</mi> <mi>a</mi> <mi>x</mi> <mo>{</mo> <mi>&alpha;</mi> <mo>&CenterDot;</mo> <mi>w</mi> <mi>e</mi> <mi>i</mi> <mi>g</mi> <mi>h</mi> <mi>t</mi> <mrow> <mo>(</mo> <mi>c</mi> <mi>u</mi> <mi>s</mi> <mi>t</mi> <mi>o</mi> <mi>m</mi> <mi>e</mi> <mi>r</mi> <mo>,</mo> <msub> <mi>server</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mfrac> <mn>1</mn> <mrow> <mi>l</mi> <mi>o</mi> <mi>a</mi> <mi>d</mi> <mi>F</mi> <mi>a</mi> <mi>c</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mrow> <mo>(</mo> <msub> <mi>server</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>}</mo> <mo>;</mo> </mrow>

其中,Hit(serveri)为每个服务器的评分值,α∈[0,1]为权重值,α可以根据经验取值为0.6,或者,也可以取其他权重值,在此不作限制。

本步骤中,通过根据不同的权重值对每个服务器的映射值和负载指数进行加权求和处理,能够有效提升该方法的灵活性及适用性。

S26:将每个服务器的评分值中最大的评分值对应的服务器作为目标服务器。

可选地,将每个服务器的评分值中最大的评分值对应的服务器作为目标服务器,以将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

S27:将请求分发至目标服务器。

可选地,将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

本实施例中,通过获取请求的时间点之前的至少一个时间点的请求分发信息,根据请求分发信息配置日志文件,能够实现将请求的时间点之前的至少一个时间点的请求分发信息纳入每个服务器评分值的考量范畴,能够保证分布式服务器缓存的使用效率。通过根据不同的权重值对每个服务器的映射值和负载指数进行加权求和处理,能够有效提升该方法的灵活性及适用性。通过计算得到服务器的负载指数,可以不仅考虑请求的时间点上的映射值,而且综合考虑每个服务器在请求的时间点上的负载指数,提升请求分发效果。通过在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值,获取对应的多个服务器中每个服务器在请求的时间点上的负载指数,根据每个服务器的映射值和负载指数生成每个服务器的评分值,以及根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

图3是本发明一实施例提出的请求分发装置的结构示意图。该请求分发装置300可以通过软件、硬件或者两者的结合实现。

参见图3,该请求分发装置300可以包括:第一获取模块310、第二获取模块320、生成模块330,以及选取模块340。其中,

第一获取模块310,用于在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值。

第二获取模块320,用于获取对应的多个服务器中每个服务器在请求的时间点上的负载指数。

生成模块330,用于根据每个服务器的映射值和负载指数生成每个服务器的评分值。

选取模块340,用于根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器。

一些实施例中,参见图4,该请求分发装置300还可以包括:

可选地,第一获取模块310包括:

第一获取子模块311,用于从日志文件中获取与客户端的标识对应的多个服务器的请求分发信息;

第二获取子模块312,用于根据所述请求的时间点和所述请求分发信息获取所述多个服务器的映射值。

可选地,第二获取模块320具体用于:将对应的多个服务器中每个服务器在请求的时间点上的实际请求连接数,和服务器所能承载的最大请求连接数的比值作为负载指数。

可选地,生成模块330具体用于:对每个服务器的映射值和负载指数进行加权求和处理,以生成每个服务器的评分值。

可选地,选取模块340具体用于:将每个服务器的评分值中最大的评分值对应的服务器作为目标服务器。

可选地,日志文件通过以下模块配置:

第三获取模块350,用于获取请求的时间点之前的至少一个时间点的请求分发信息。

配置模块360,用于根据请求分发信息配置日志文件,其中,请求分发信息包括:在所述请求的时间点之前的至少一个时间点,以及在至少一个时间点中每个时间点上,客户端的请求被转发至每个服务器的次数。

需要说明的是,前述图1-图2实施例中对请求分发方法实施例的解释说明也适用于该请求分发装置,其实现原理类似,此处不再赘述。

本实施例中,在接收到客户端发送的请求时,获取与客户端的标识对应的多个服务器的映射值,获取对应的多个服务器中每个服务器在请求的时间点上的负载指数,根据每个服务器的映射值和负载指数生成每个服务器的评分值,以及根据评分值从对应的多个服务器中选取目标服务器,并将请求分发至目标服务器,能够实现结合服务器的映射值和负载指数对客户端发送的请求进行分发,有效避免分布式服务器中单个服务器节点过载,且保障缓存的使用效率。

需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1