具体实施方式
一方面,本申请的思想在于,使得权威域名服务器响应于域名解析请求返回内容服务器地址时,一次返回多个,并能保证最终流量调度依然能够达到比例要求。从而允许客服端随机选择内容服务器地址进行访问,进而减少内容服务器故障时的影响并避免访问流量大时内容服务器的访问压力过大。
另一方面,本申请的思想在于,考虑各个本地域名服务器服务的用户数目的差异性,针对不同的本地域名服务器赋予相应的权重来用于调整流量调度,从而提高流量调度的精准度。
再一方面,本申请的思想在于,考虑各个本地域名服务器的影响力,仅选择影响力大的本地域名服务器参与流量调度的计算,从而大大减少需要纳入计算的本地域名服务器的数目,也就是缩小待计算的本地域名服务器的范围,使得在尽可能短的时间内获得相对满意的流量调度结果,也就是提高流量调度的效率。并且引入流量调度偏差容忍度的概念,使得误差计算收敛到可接受的范围内而不是零,从而可以根据实际应用中的不同要求来灵活地调整流量调度的精准度。
为使本申请的目的、技术方案和优点更加清楚,以下结合附图及具体实施例,对本申请作进一步的详细说明。
参照图1,图1示出根据本申请一个实施例的流量调度方法100的流程图。
如图1所示,在步骤S110处,接收来自本地域名服务器的域名解析请求。
本申请的流量调度方案是基于DNS解析的,可以在权威域名服务器(权威DNS)侧实施。
通常用户访问某域名网站时,向本地域名服务器(本地DNS)发出访问请求。本地域名服务器响应于该访问请求,查看本地域名缓存中是否包含该域名对应的内容服务器地址例如IP地址等。如果包含则直接返回给用户以供用户进行网站访问。如果没有包含则本地域名服务器通过迭代查询方式最终向权威域名服务器发出域名解析请求,以请求该域名对应的内容服务器地址。相应地,权威域名服务器可以接收这样的来自本地域名服务器的域名解析请求。
接下来,在步骤S120处,响应于该域名解析请求,向本地域名服务器返回多个内容服务器地址。
具体而言,权威域名服务器可以从域名解析请求中获取到相应的域名。然后通过查找其维护的域名-内容服务器地址的预定映射关系,可以获取到与该域名解析请求中的域名对应的若干内容服务器地址。根据本申请的实施例,权威域名服务器可以从这些内容服务器地址中随机选择或者按照一定规则选择多个内容服务器地址返回给本地域名服务器。
这里,内容服务器地址可以是IP地址、也可以是MAC地址等,本申请对此并不做任何限制。
本申请的发明点就在于,权威域名服务器向本地域名服务器返回多个内容服务器地址,而不是像现有技术中那样,由权威域名服务器随机选择与域名对应的一个内容服务器地址返回给本地域名服务器。如前面提及的,由此可以允许客服端用户自己随机选择内容服务器,进而减少内容服务器故障时的影响并且降低访问流量大时内容服务器的访问压力。
至此结合图1描述了根据本申请基本构思的流量调度方法的过程。下面结合图2对本申请实施例的流量调度方法进行更详细的描述。
图2示出根据本申请另一实施例的流量调度方法200的流程图。其中描述了根据本申请实施例的一轮流量调度的过程。可以理解到,流量调度可以是一轮一轮执行的。
如图2所示,在步骤S210处,接收来自本地域名服务器的域名解析请求。该步骤的处理与前面结合图1描述的步骤S110的处理类似,这里不再赘述。
在接收到域名解析请求之后,进入步骤S220。在步骤S220处,判断该域名解析请求是否为本轮调度中首次收到的来自该本地域名服务器的域名解析请求。据此可以确定如何向本地域名服务器返回多个内容服务器地址。
具体地,当在步骤S220处判定该域名解析请求是本轮调度中首次收到的来自该本地域名服务器的域名解析请求时,进入步骤S230,根据与域名对应的各个内容服务器地址的目标权重,向本地域名服务器返回内容服务器地址。当在步骤S220处判定该域名解析请求不是本轮调度中首次收到的来自该本地域名服务器的域名解析请求时,进入步骤S240,根据与域名对应的各个内容服务器地址的上次权重误差值,向本地域名服务器返回内容服务器地址。
需要指出的是,在调度开始之前,可以预先设定各内容服务器地址的流量分配权重比例,即,目标权重。当每轮调度开始时,可以首先确定该轮调度中需要向本地域名服务器返回的内容服务器地址的数目N。在一个具体实施例中,可以通过以下方法确定该数目count:100%除以各内容服务器地址中的最大权重值;然后取整数上限值。例如,假设某域名A记录对应3个不同内容服务器,IP地址分别为IP1、IP2、IP3;并且在权威服务器处设置3个IP地址的流量分配权重比例分别为50%、30%、20%,即,流量分配权重设置的目标是使得最终用户的访问50%落到IP1,30%落到IP2,20%落到IP3。在这样的情况下,N=100%/50%=2。应理解到,确定需要返回的内容服务器地址的数目的方法并不限于此,而是可以采用任意其它合适的方式来确定,本申请对此不作任何限制,而仅要求返回多个内容服务器地址而不是一个内容服务器地址。
在已知了本轮调度中需要返回的内容服务器地址的数目之后,根据域名解析请求是否为本轮调度中首次收到该本地域名服务器的域名解析请求,来具体确定向本地域名服务器返回哪些内容服务器地址,也就是返回IP地址的顺序。
更具体而言,根据本申请的实施例,当域名解析请求是本轮调度中首次收到该本地域名服务器的域名解析请求时,在步骤S230处可以根据各内容服务器地址的目标权重的高低,向本地域名服务器返回上述确定数目(N个)的内容服务器地址。在一个具体实施例中,可以向本地域名服务器返回目标权重最高的前N个内容服务器地址。
另一方面,根据本申请的实施例,当域名解析请求不是本轮调度中首次收到该本地域名服务器的域名解析请求时,在步骤S240处可以根据各内容服务器地址的上次权重误差值,向本地域名服务器返回上述确定数目(N个)的内容服务器地址。在一个具体实施例中,可以向本地域名服务器返回上次权重亏欠值最高的前N个内容服务器地址。
具体而言,每次接收到域名解析请求时,权威域名服务器都需要计算相应的域名对应的各内容服务器地址中的权重误差值。权重误差值表征当前权重与预设目标权重之间的差异。权重误差值可以包括权重亏欠值(例如-20%)和权重增加值(例如+20%)。
当然本申请并不限于上述方式,而是可以采用其它任意合适方式来确定向本地域名服务器返回哪些内容服务器地址。
接下来在步骤S250处,确定与域名对应的各内容服务器地址的本次权重误差值。
根据本申请的一个实施例,误差变化(权重误差值)计算公式可以为:
本次权重误差值=(100%/N)*r-目标权重+上次权重误差值 (式1)
在上述式1中,当首次计算时,上次权重误差值取0。若本次IP地址被选中,r取值1;否则,r取值0。若目标权重最高的IP地址的上次误差值+目标权重=100%,则本次该IP地址被选中,其余IP地址不被选中。
接下来在步骤S260处,判断与域名对应的各内容服务器IP地址的本次权重误差值是否都收敛在预定范围内。
这里需要指出的是,本申请的一个发明点就在于此,其中不像现有技术中那样当权重误差值收敛归0时才开始新的调度循环,而是当权重误差值收敛到一个预定范围内时就开始新的调度循环。也就是,根据本申请的实施例,允许在流量调度时根据不同要求,存在一定的流量调度偏差。当全部IP地址收敛到[-e,+e]范围内时,在用户的偏差容忍度内,认为一轮流量调度结束,可以进入下一轮流量调度,此时可以反馈相关调度结果给操作人员。
具体地,当在步骤S260处判定各IP地址的本次权重误差值都收敛在预定范围内时,本轮调度结束。也就是,针对后续接收到的域名解析请求,开始执行新的调度循环,其中重新计算该新一轮调度所需返回的IP地址数目,并基于此执行步骤S210至步骤S260的处理。
当在步骤S260处判定各IP地址的本次权重误差值未收敛在预定范围内时,则继续执行该轮调度,接收下一域名解析请求并基于先前计算的所需返回的IP地址数目来执行步骤S210至S260的处理。
为便于理解,下面结合一个具体示例来进行更详细说明。在本例中,权威域名服务器可以维护一个IP误差变化表,如下面的表1和表2所示。
当权威域名服务器首次收到本地域名服务器的域名解析请求时:可以将该域名下所有内容服务器IP地址按照目标权重高低排序,返回前N个IP地址给本地域名服务器,并将本次选中返回的IP地址标记为1,同时计算本次结果返回后误差表中各IP地址权重的变化。
首次误差计算后的IP误差变化表如下表1所示:
表1
当权威域名服务器第二次收到其他本地域名服务器的域名解析请求时,可以选择亏欠值高的N个IP地址,标记为选中状态,并按照上述式1计算本次误差值。后续权威域名服务器每收到本地域名服务器的域名解析请求,都执行该计算,直至所有IP地址的误差值均收敛归至[-e,+e]。假设流量调度偏差容忍度取值为[-0.1%,+0.1%]。
当所有IP地址的误差值均收敛归至[-0.1%,+0.1%]后,此后再次收到来自本地域名服务器的域名解析请求时,执行上述首次计算的过程,从而开始新的循环过程。
示例中经过若干次计算及IP地址返回后的误差变化表如下表2所示:
表2
当权威域名服务器第五次下发计算后的IP列表,全部IP地址的误差归0,表明经过历次IP地址下发后,各IP地址权重配比达到初始设定目标,即IP1:IP2:IP3=50%:30%:20%。
根据本申请的实施例,某内容服务器IP地址的总流量T可以通过下式计算:
T=Σ{[C(j)/N]*r} (式2)
其中:C(j)为第j个本地域名服务器服务的用户数量;N为权威域名服务器每次返回的IP地址数量;r为返回给第j个本地域名服务器时该IP地址是否被选中,选中r=1,否则r=0。Σ的上下限为[0,n],n为本地域名服务器的总个数。
当下一次本地域名服务器的域名解析请求到达权威域名服务器或者本地域名服务器缓存到期后,开始新一轮的动态计算过程(调度过程)。
至此结合图2详细描述了根据本申请实施例的流量调度方法。在上述流量调度方法中未考虑各本地域名服务器服务的用户数量之间的区别,从计算模型上认为所有本地域名服务器对流量调度的影响力是相同的,而实践中不同本地域名服务器服务的用户数量差距较大,因此这种情况下,即使各IP地址的权重对比达到最初要求后,本地域名服务器服务的用户量的巨大差距也会导致流量调度达不到最初要求,甚至实际流量调度结果和期望的权重比存在较大差距。
例如,上例中假设本地域名服务器个数为4,即n=4。由于本地域名服务器对于同一域名的缓存时间都是相同的,因此,n个本地域名服务器会循环向权威域名服务器发起访问。每个本地域名服务器服务相同数量用户,这里假设为100万,则经过误差表计算各IP地址权重收敛为0时,由上述某个IP地址在动态调度结束后最终流量计算公式(式2)可算的:
T(IP1)=[100万/2]*1+[100万/2]*1+[100万/2]*1+[100万/2]*1+[100万/2]*1=250万
T(IP2)=[100万/2]*1+[100万/2]*0+[100万/2]*1+[100万/2]*0+[100万/2]*1=150万
T(IP2)=[100万/2]*0+[100万/2]*1+[100万/2]*0+[100万/2]*1+[100万/2]*0=100万
可以看出T(IP1):T(IP2):T(IP3)=50%:30%:20%,符合初始设定目标。
若本地域名服务器服务的用户量呈现数量级差距,假设四个本地域名服务器用户量分别为1000万,500万,100万,10万,那么最终计算结果为:
T(IP1)=[1000万/2]*1+[500万/2]*1+[100万/2]*1+[10万/2]*1+[1000万/2]*1=1305万
T(IP2)=[1000万/2]*1+[500万/2]*0+[100万/2]*1+[10万/2]*0+[1000万/2]*1=1050万
T(IP2)=[1000万/2]*0+[500万/2]*1+[100万/2]*0+[10万/2]*1+[1000万/2]*0=255万
可见T(IP1):T(IP2):T(IP3)=50%:38.88%:11.12%,已经极大地偏离期望的流量目标权重。
因此在本申请的实施例中,可以在流量调度过程中考虑本地域名服务器服务的用户数目的影响。下面结合图3描述根据本申请一个实施例的确定与域名对应的各内容服务器地址的权重误差值的方法300的流程图。其中通过在权重误差值计算中引入本地域名服务器的权重,从而考虑了本地域名服务器服务的用户数目的影响。
如图3所示,在步骤S310处,确定本地域名服务器的权重。
根据本申请的实施例,可以预先抽样统计出本地域名服务器服务的用户数目,然后基于本地域名服务器的用户数目和特定域名对应的所有本地域名服务器的总用户数目来计算本地域名服务器的权重。例如计算每个本地域名服务器服务的用户数占总用户数的比例,作为该本地域名服务器的权重。第j个本地域名服务器的权重为:
Wj=C(j)/ΣC(n) (式3)
其中:C(j)为第j个本地域名服务器的服务用户数量,ΣC(n)为全部本地域名服务器服务用户数量之和,Σ的上下限为[0,n],n为本地域名服务器的总个数。
实践中,可以根据流量调度要求的精度不同,调整权重值精度,常用的方法为四舍五入。
关于本地域名服务器服务的用户数目的获取方法,可以采用本领域已知或未来开发的任意合适方式,本申请对此并不做任何限制。作为示例,下面描述两种获取本地域名服务器服务的用户数目的方法。
方法1:设置采样周期,如1天;在本地域名服务器处将缓存配置为无缓存(nocache),从而不缓存任何域名解析记录,当用户每次请求域名解析时,都会最终落到权威域名服务器,权威域名服务器根据IP地址去重后记录用户数。
方法2:当用户访问该域名时,在域名前添加私有ID(PID),构成子域名。私有ID可以由用户IP、MAC和随机码串接生成,同时可以采用当前通用加密算法,对该私有ID加密保护。当用户请求该子域名的解析时,本地域名服务器每次都不会命中,从而最终将访问请求落到权威域名服务器,权威域名服务器逆向解析出用户IP,并记录用户数目。
私有ID:
假设被采样域名为:example.com
则用户访问域名问:私有ID.example.com
权威域名服务器逆向解析子域名的流程及计算某本地域名服务器服务用户数的方法如下:
A、以本地域名服务器的IP作为文件名,建立文件;
B、提取域名解析请求报文中私有ID部分;
C、解密该私有ID,获得用户ID、用户MAC、N位随机数的串讲序列;
D、取前32bit,则为用户IP;继续取48位,则为用户MAC地址;剩余N位为随机数序列;
E、将IP、MAC作为一行记录存入文件,若该IP、MAC已经在文件中存在,则不录入;若仅IP或仅MAC存在,或IP和MAC均不存在,则录入文件;
F、在采样周期结束后,计算各文件中记录数目则为不同本地域名服务器服务的用户数。
在确定了本地域名服务器的权重之后,在步骤S320处,根据本轮调度需要返回的内容服务器地址数目、目标权重、上次权重误差值以及该本地域名服务器的权重,来确定本地权重误差值。
具体地,根据本申请的实施例,本地权重误差值的计算公式(式1)可以变为下面的式4:
本次权重误差值=[(100%/N)*r-目标权重]*Wj+上次误差值 (式4)
其中:当首次计算时,上次误差值取0;若本次IP地址被选中,r取值1,否则r取值0;若目标权重最高IP地址的上次误差值+目标权重=100%,则本次该IP地址被选中,其余IP地址不被选中。
为便于理解,下面结合一个具体示例进行更详细的说明。沿用上例,假设在上例中:
本地域名服务器1的权重w1=0.6211=62%(取整);
本地域名服务器2的权重w2=0.3105=31%(取整);
本地域名服务器3的权重w3=0.0621=6%(取整);
本地域名服务器4的权重w4=0.0062=1%(取整)。
另外假设,流量调度偏差容忍度取值[-1%,+1%]。示例中经过若干次计算及IP下发后的误差变化表如下表3所示:
可见计算各IP地址的总流量如下:
T(IP1)=[1000万/2]*1+[500万/2]*1+[100万/2]*1+[10万/2]*1=805万
T(IP2)=[1000万/2]*1+[500万/2]*0+[100万/2]*0+[10万/2]*0=500万
T(IP2)=[1000万/2]*0+[500万/2]*1+[100万/2]*1+[10万/2]*1=305万
则各IP地址流量配比T(IP1):T(IP2):T(IP3)=50%:31%:29%。
从结果可以看出,整体比例更加符合预期,且在规定的容忍度内,这个结果是可以接受的,且明显优于原算法(式1)。
至此,结合图3,描述了根据本申请实施例的在流量调度中考虑本地域名服务器服务用户数的影响的过程。本申请对此并不做任何限制,可以通过其它任意合适方式在流量调度中考虑本地域名服务器服务的用户数。
本申请发明人发现,在上述流量调度方法中涉及到的本地域名服务器数量很多,一般数量以万为单位,算法运行起来成本较高,流量调度结果达到设定目标所需收敛过程/时间比较长。而实践中,20%的大型本地域名服务器为80%的用户服务,该20%称为在流量调度中具有影响力的本地域名服务器(关键本地域名服务器),因此仅选择具有影响力的本地域名服务器进行计算,可以极大地减少需要纳入计算的本地域名服务器的数目。
根据本申请的更优选实施例,可以依据一定原则例如2/8原则削减涉及的本地域名服务器数量,从而降低流量调度运算的成本,提高流量调度运算的效率。在本申请实施例的流量调度方法的具体实施中,可以在确定本地域名服务器的权重时考虑这一点,下面结合图4对此进行更详细描述。
图4示出根据本申请一个实施例的确定本地域名服务器的权重的方法400的流程图。
如上面提及的,当在执行流量调度时计算各内容服务器地址的权重误差值的过程中可以考虑本地域名服务器的权重。当需要确定本地域名服务器的权重时,如图4所示,在步骤S410处,获取本地域名服务器服务的用户数目。该步骤S410的处理类似于前面结合图3描述的步骤S310中的相关处理,因此关于获取本地域名服务器服务的用户数目的方法可以参见前面的描述,这里不再赘述。
在获取了本地域名服务器服务的用户数目之后,在步骤S420处,判断该用户数目是否超过预定数目。
具体而言,通过判断当前的本地域名服务器服务的用户数是否超过一定数目,来判断本地域名服务器的影响力,换言之,判断在流量调度计算中是否需要考虑该本地域名服务器的影响。上述预定数目可以根据需要预先确定。
如果在步骤S420处判定该用户数目超过(例如,大于等于)预定数目,则说明该本地域名服务器是具有影响力的本地域名服务器,需要纳入流量调度计算中,因而进入步骤S430,根据该用户数目和总用户数目确定本地域名服务器的权重。
具体地,可以利用前述式3来确定该本地域名服务器的权重,其中的处理类似于前面的相关描述,这里不再赘述。
如果在步骤S420处判定该用户数目未超过(例如小于)预定数目,则说明该本地域名服务器不是具有影响力的本地域名服务器,在流量调度计算中可以不考虑进去,因而进入步骤S440,将该本地域名服务器的权重确定为零。这样当在利用式4进行权重误差值的计算时,Wj为0,则本次权重误差值等于上次权重误差值,也就是说,没有将本地域名服务器的影响考虑到流量调度中。
由此可以缩小流量调度过程中待计算的本地域名服务器的范围,加快收敛速度,进而在尽量短的时间内获得相对满意的流量调度结果。
至此结合图1至图4描述了根据本申请实施例的流量调度方法。与以上描述的流量调度方法类似,本申请实施例还提供了相应的流量调度装置。
图5示出了根据本申请一个实施例的流量调度装置500的结构框图。如图5所示,装置500可以包括接收模块510和返回模块520。
具体而言,接收模块510可以用于接收来自本地域名服务器的域名解析请求。返回模块520可以用于响应于所述域名解析请求,向所述本地域名服务器返回多个内容服务器地址。
根据本申请的具体实施例,返回模块520可以进一步包括:返回数目确定子模块,用于根据与域名对应的各内容服务器地址对应的最大目标权重,确定本轮调度需要返回的内容服务器地址的数目。
根据本申请的具体实施例,返回模块520可以进一步包括判断和返回子模块,该判断和返回子模块用于,判断所述域名解析请求是否为首次接收到的来自所述本地域名服务器的域名解析请求;如果是,则根据与域名对应的各内容服务器地址的目标权重来向所述本地域名服务器返回内容服务器地址;以及如果否,则根据与域名对应的各内容服务器地址的上次权重误差值来向所述本地域名服务器返回内容服务器地址。
根据本申请的实施例,装置500还可以包括:第一确定模块,用于确定各内容服务器地址的本次权重误差值;以及第二确定模块,用于根据所述各内容服务器地址的本次权重误差值是否都收敛在预定范围内,确定是否结束本轮调度。
根据本申请的具体实施例,第一确定模块可以进一步包括:权重误差确定子模块,用于根据本轮调度需要返回的内容服务器地址的数目、目标权重和上次权重误差值,来确定所述本次权重误差值。
根据本申请的具体实施例,第一确定模块可以进一步包括:权重确定子模块,用于确定所述本地域名服务器的权重;以及权重误差确定子模块,用于根据本轮调度需要返回的内容服务器地址数目、目标权重、上次权重误差值以及所述本地域名服务器的权重,来确定所述本次权重误差值。
根据本申请的更具体实施例,权重确定子模块可以进一步包括:获取子模块,用于获取所述本地域名服务器服务的用户数目;以及确定子模块,用于根据所述用户数目,确定所述本地域名服务器的权重。
根据本申请的更具体实施例,确定子模块可以进一步包括判断和设置子模块,用于:当所述用户数目超过预定数目时,根据所述用户数目和与所述域名对应的所有本地域名服务器服务的总用户数目,确定所述本地域名服务器的权重;以及当所述用户数目未超过所述预定数目时,将所述本地域名服务器的权重确定为零。
以上描述的流量调度装置与之前描述的流量调度方法的处理是对应的,因此,关于其具体细节,可以参见之前描述的流量调度方法,这里不再赘述。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。