客户机服务器网络 本发明涉及客户机服务器网络,具体来讲,涉及其中客户机具有能够处理其请求的多个备选服务器的网络。
在这类客户机服务器网络中,在确定客户机应该向哪个服务器节点发送给定请求时出现问题。处理这个问题的已知方法包括:负载分担,其中负载以循环方式分散在多个服务器上;以及工作机备用机方案,其中把一个服务器指定为工作机,请求一般发送到工作机,而另一个服务器为备用机,在工作机无法处理请求时,备用机就处理请求。当工作机再次能够处理请求时,请求又发送到工作机。但是,没有一种方法令人满意。如果各种服务器的容量差异极大,则循环负载分担不适用,因为这种方法没有考虑相对的服务器大小。如果请求量超过单个服务器的容量,则工作机备用机方法不适用。
任何给定服务器的有效容量可能随时间而显著变化,例如因为服务器正在处理来自其它客户机的请求,或者由于诸如维护活动、存档之类的其它原因。
本发明旨在解决上述问题,并且提供对送往多个服务器的请求的改进处理。
根据本发明,提供一种把来自客户机节点的请求分配到具有多个服务器的服务器系统中的一些服务器的方法,所述方法包括定期重复以下步骤:
测量各服务器的活动;
根据所测量的服务器活动来评估多个服务器的相对负荷;以及
根据相对负荷的评估来调整对多个服务器中各个服务器的请求分配;
其中调整对各个服务器的请求分配包括根据所测量的服务器活动、多个服务器的平均活动以及分配给服务器的请求地现有比例来调整分配给各服务器的请求的比例。
本发明还提供一种用于把来自客户机节点的请求分配给具有多个服务器的服务器系统中的一些服务器的系统,所述系统包括位于客户机节点的分配器,所述分配器包括用于测量各个服务器活动的装置、用于根据所测量的服务器活动来评估多个服务器的相对负荷的装置以及用于根据相对负荷的评估来调整对多个服务器中各个服务器的请求分配的装置;
其中分配调整装置包括用于根据所测量的服务器活动、多个服务器的平均活动以及分配给服务器的请求的现有比例来调整分配给各服务器的请求的比例的装置。
本发明的实施例的优点在于,负载分配能够考虑到各服务器的相对容量而在各服务器上均匀分布。
客户机节点最好是包括负载控制器,用于把负载控制算法应用于分配到多个服务器中所有服务器的请求。其优点在于,负载可得到控制,从而防止所有服务器过载,而且分配器使多个服务器看起来就象单个服务器。
最好是通过计算一个周期中服务器请求和响应的数量来测量服务器活动。这个周期最好是请求的总数。
相对负荷的评估最好是包括比较在抽样周期中各服务器的服务器请求和响应。
服务器的请求分配最好是根据所测量的服务器活动、全部服务器的平均活动以及分配给服务器的请求的现有比例来调整。
最好是提供超越功能,从而把与前一个请求相关的请求发送到与前一个请求相同的服务器。
现在通过举例并参照附图来说明本发明的实施例,附图中:
图1说明实施本发明的请求分配系统的示意图;
图2是图1的分配器的UML使用情况图;
图3是测量服务器负荷以评估相对负荷的UML类图;
图4是“分配”使用情况的示例程序;
图5是“响应”使用情况的示例程序;
图6是“测量”使用情况的示例程序;
图7是“重新评估”使用情况的示例程序;
图8是“分配”使用情况的UML活动图;
图9是说明过载影响的、较大服务器的响应和请求的曲线图;
图10是说明过载影响的、较小服务器的请求和响应的曲线图;
图11是流程图,说明活动测量的第一实施例;
图12是流程图,说明活动测量的第二实施例;以及
图13是流程图,说明活动测量的第三实施例。
参照图1,将要描述的实施例是基于各客户机节点12内的请求分配器单元10。请求分配器接收客户机节点内部产生的本地请求14以及通过外部接口接收的外部请求16。分配器在n个服务器之中分配服务器请求,这些服务器在图中表示为服务器1(18)、服务器2(20)以及服务器n(22)。客户机节点还包括运行负载控制算法的负载控制单元24。分配器确保对远程服务器进行均匀加载。负载控制算法为分配器提供有效的前端处理。
图1所示的体系结构使相同的负载控制能够用于外部请求以及客户机节点上本机发起的请求。另外,分配器使服务器网络在负载控制算法看来就象单个节点一样。从图1可以看到,分配器在逻辑上设置在服务器和负载控制器之间。
当请求与较早的请求相关时,逐个请求地把负载分配到服务器是不起作用的。分配器包括超越功能,使请求的某个子集能够被发送到同一个服务器。在服务器存储从处理后续请求所需的第一个请求中导出的内容时,这通常是必要的。
分配器的UML使用情况如图2所示。本地应用或远程客户机26、时间28以及远程服务器30表示为远离该系统。该图表明,分配器根据来自服务器的响应32来分配31服务器请求,并且根据分配和响应来进行一些测量34。随着时间36来重新评估分配。
不管服务器请求的来源如何,无论在客户机节点外部还是内部,对于把服务器请求分配到一组可用服务器上的三个要求如下所述:
1.使可用服务器的负载尽量均匀;
2.通过不对先前的负载不平衡作出过度反应而导致新的负载不平衡,避免服务器负载中的高频振荡;以及
3.不管分配算法而允许超越请求保持在特定服务器上。
当后续请求要求已经在处理前一个请求的服务器中创建的上下文数据时,调用要求的超越请求。对前一个请求的响应表明哪个服务器对其进行了处理。
所用的分配最好是与客户机-服务器协议的特定细节无关,从而确保广泛适用性。在将要描述的实施例中,比较对于不同服务器的测量结果以评估其相对负荷。然后再调整后续请求的分配,使服务器测量结果会聚到其平均值。这样,重新平衡了服务器的负荷。这个方法不了解各个服务器是否过载,因为它是对负荷的相对测量,因此不会提供全面的控制机制。如果客户机节点上涉及到要避免服务器过载,则客户机节点可在分配器前面加入独立的负载控制算法、如图1的24所示。负载控制算法根据对全部服务器的总业务量的测量进行工作。适用于端接请求业务的服务器节点的负载控制方案应当同样适用于具有请求分配器的客户机节点。应该理解,负载控制不是必需的。
上述方法是基于对相对负荷的测量。可以测量业务量相关的量,例如请求和响应计数及其速度派生值、响应时间分布(例如平均值、第95个百分点和标准偏差)以及响应挂起的请求的数量。虽然这些都是通用测量,但它们或多或少都遇到区分正常和过载条件的阈值通常是协议和/或应用特定的问题。例如,对一个应用而言合乎需要的响应时间可能对于另一个应用却是不可接受的。因此,基于针对绝对值的测试测量的设计不令人满意。
除了基于相对负荷测量的方法之外,一些协议还包括让服务器在过载时拒绝客户机请求的明示功能。在分配器上对这些被拒绝的请求的区分和计数提供了可用来控制分配的另一组测量结果。
图3至7说明分配器的一般UML类和程序图。图3是说明三个实体的UML类图:服务器38、请求40和响应42。服务器具有测量结果、比例的属性,请求具有时标、事务处理标识和超越的属性,响应具有时标和事务处理标识的属性。服务器具有读取和更新操作。
图4说明“分配”使用情况的程序,其中客户机或本地应用42以及远程服务器44表示为在分配器系统之外。请求46被发送到分配器,并且对每个服务器对象实例执行读取操作48,从而获取当前比例,其中包括接收来自服务器对象的响应50。然后根据相对负荷把请求分配52到适当的远程服务器44。
图5说明响应使用情况的程序。图中,远程服务器44把响应发送到分配器控制,分配器控制又把响应发送到客户机或本地应用42。图6说明“测量”使用情况的程序,其中在分配器控制和服务器对象之间进行对测量结果51的更新,并把应答56返回给分配器控制。
图7说明“重新评估”使用情况的程序。这里的外部控制是时间58。属于周期性事件的计时器到期时,由分配器从服务器对象读取测量结果,并进行更新。这两个操作接收来自服务器对象的应答,并在服务器对象的每个实例上被调用。
分配算法不能因服务器的添加和删除而被破坏。虽然其它算法也是可行的,但最好是采用部分分配方案。在优选方案下,服务器的比例表示为根据容量的比率。例如,在其中一个服务器的容量是另外两个服务器的两倍的三个服务器情况下,比率将表示为1∶2∶1。
分配给各服务器的部分的数量为P1、P2、P3...Pn。在上述1∶2∶1的情况下,P1=1,P2=2以及P3=3。分配算法从第一服务器到最后一个服务器以累计方式把这些数量相加,对每个区间记录服务器标识。因此,范围P1-P2分配到服务器2,P2-P3分配到服务器3,依此类推。对于每个服务器请求,产生范围为0到∑Pr(r=1-n)的随机数。范围包含该随机数的服务器是请求被发送到的服务器。
在所产生的随机数等于区间边界值之一的情况下,应用平分(tiebreaker)规则。
在分配器启动时,它假定所有服务器具有相同的容量,并向各服务器分配相同的比例。不是应用值1,而是应用较大的值、如10,以便允许向下和向上调整。
图8说明“分配”使用情况的UML活动图。在60,把值B设置为零。在框62中,对各服务器重新说明服务器范围。这包括以下步骤:在64从各服务器对象读取比例P;在66把范围B到(B+P-1)分配给服务器;以及在68把B的值重新设置为B=B+P。然后在70产生随机数R,并在72设置值X,使得X=R mod B。在74,选取其范围包括X的服务器,然后在76向该服务器发送请求。
在以上说明中,已经确定,选择向哪个服务器发送请求应当基于服务器负荷的相对测量结果,以及采用基于服务器容量的算法来实现分配。以下说明涉及到服务器负荷的测量,并描述测量服务器负荷的三种可能方式:响应时间测量、未完成的响应计数以及请求和响应计数。后一种方式尤其适合,但前两种方法也是可行的。其它方法也是可行的,并且本领域的技术人员也会想到。
响应时间测量
分配器可计算各服务器的响应时间分布。然后再通过直接比较所选测量值、例如平均值或第95个百分点来估算相对负荷。当服务器过载时,它应该在其响应时间中呈现急剧上升。在图12的流程图中说明了这种方案,图中说明在步骤120中的响应时间测量,这种操作对全部服务器来执行,然后是在步骤122中对响应时间分布进行比较。这个方式虽然可行,但却有若干问题:
首先,各个服务器正常工作时的正常响应时间可能明显不同,使得更难以区分过载的服务器。其次,必须收集一定的最小数量的响应时间抽样值,然后才能对其统计分布进行可靠地评估。这使得抽样周期过长,分配器对变化的反应过于缓慢。第三,分配器必须把响应与相关请求相联系以获取定时。
未完成的响应计数
作为一个备选方案,分配器维护对发送到各服务器、没有接收到至少一个响应的请求的数量的计数。由于这是连续测量,因此定期评估可以基于固定间隔或者请求的总数。当服务器变为过载时,应当表现出其未完成响应的增加。TCP负载控制基于这个原理。图13中说明该过程,图中说明,在步骤124中,对没有接收到响应的请求计数,以及在步骤126中,在一段时间上或者在请求总数中对这些计数进行比较。但是,存在两个可能的问题。首先,该方法受到服务器响应时间之间任何正常差异的间接影响。这是根据下述基本排队理论公式得出的:
平均并发性=每秒事务处理(tps)×平均响应时间
因此,同样难以区分受压迫服务器与实质上较慢的服务器。
其次,分配器必须区分对请求的初始响应与后续响应,以便仅在发送了初始响应时才递减未完成响应的计数。这难以实现。
请求和响应计数
这种选择是三种考虑方式中最优选的。分配器在短抽样周期上记录发送到各服务器的请求的数量以及从各服务器收回的响应的数量。然后再通过比较抽样周期中的请求和响应计数来估算相对负荷。该方法在图11中进行说明,图中,在100对服务器请求计数,在步骤110对服务器响应计数,以及在步骤112进行比较。对各服务器重复这个过程。
请求或响应的绝对数量在服务器之间可能因不同的容量而有所不同。但是,只要没有任何服务器过载,各服务器的请求/响应比率应该几乎相同。这取决于各服务器接收请求类型的相同混合,这对于大量请求是真的,但在包含极少请求的短周期上可能不可靠。因此,最好是由所发送的请求总数、而不是由时间周期来定义抽样值。
对于可经过比较以确定相对负荷的值存在许多备选者。请求与响应的直接比率只是一个备选者。下面是一些备选量及其理论范围的非穷举列表。在列表中,Rq为发送到服务器的理论请求的数量,而Rs为返回的响应数量。
1.Rq/Rs:0→+∞]]>
2.Rs/Rq:0→+∞]]>
3.Rq-Rs:-∞→+∞]]>
4.Rs-Rq:-∞→+∞]]>
5.Rq/(Rc+Rs):0→1]]>
6.Rs/(Rs+Rc):0→1]]>
7.(Rq-Rs)/(Rq+Rs):-1→+1]]>
8.(Rs-Rq)/(Rq+Rs):-1→+1]]>
在这些备选值中,第1-4号具有无限范围,由抽样周期具有零响应或请求的可能性引起。选项5和6更着重于请求或响应计数。理论表明,请求和响应计数之间的归一化差是服务器相对负荷的最具信息性表示,表明选项7和8是最佳选择。值的极性是一个考虑事项,也就是说它是随负荷增加还是减少。凭直觉,该值应该随负荷的增加而增加,偏向于选项7。但是,当大多数协议平均每个请求产生略多于一个响应时,则偏向于最后一个选项、即选项8,因为服务器测量结果在正常条件下通常是正的。
图9和图10说明两个服务器在遇到不断增加的业务量时的请求和响应计数。这两个图都是每秒消息(mps)与时间的曲线图。图9的服务器具有较大容量,而图10的服务器具有较小容量。两个服务器分担相等的业务量。这些图强调了当服务器达到其容量且变为受压迫时其响应速率如何达到稳定状态。图9和图10是基于平均每个请求1.5个响应的假设。
在图10中,较小的服务器在时间t1开始达到稳定状态。这时,分配器应该开始把请求业务量转移到较大的服务器上。
分配调整
上文提到,重要的是不要对服务器分配的任何调整进行过度补偿而建立振荡。分配器定期地或者在一定请求数量之后将需要调整分配给各服务器的请求业务量的比例。目的是降低每个服务器所选测量值之间的差异。这可按照如下方式进行:
如果M1、M2、M3...Mn是为各服务器在最后一个抽样周期计算的测量值,μ是它们的算术平均值,而P1、P2、P3...Pn是每个服务器当前所分配的比例,则分配给第r个服务器的新的比例一般由以下类型的公式给出:
Pr=f(Mr,μ,Pr)
两个备选公式及其理论范围如下所述:
1.(1+(Mr-μ)/(|Mr|+|μ|))×Pc;0→2×Pr]]>
2.(1-(Mr-μ)/(|Mr|+|μ|))×Pc;0→2×Pr]]>
两者之间的差异反映了在以上选项7和8之间的选择中提到的极性选择。这些公式产生与旧值成比例的新值,因而比例绝不允许因算术舍位而被调整为零。
可通过两种方式之一来减少振荡。第一,来自最后几个抽样周期的数据可以显式组合,以便计算对下一个周期的比例的调整。这种方式有效地利用保留数据的滑动窗口。第二,来自先前所有样值的数据可采用衰减公式来隐式组合。在这种方式下,第二周期调整的数据是实际第二周期数据与来自第一周期的数据的平均值。用于第三周期的数据是实际第三周期数据与用于第二周期的数据的平均值,等等。
所述实施例使得能够以反映服务器的单独容量并基于其相对负荷的方式把请求从客户机节点分配到多个服务器。
对所述实施例的各种修改是可行的,并且本领域的技术人员会想到这些修改。例如,测量服务器活动的其它方法是可行的,而且可采纳其它分配调整公式。但是,这些修改在所附权利要求书所定义的本发明的范围之内。