发明内容
本发明实施例提供一种流量负载分担的方法及设备,能够实现出接口的流量负载分担均衡。
第一方面,提供了一种流量负载分担的方法,该方法包括:根据M个出接口的信息获取所述M个出接口相应的当前的令牌值,所述当前的令牌值由前一次的令牌值确定的,M为正整数;根据所述当前的令牌值确定筛选次数和所述M个出接口中各个出接口的筛选因子;根据所述筛选因子和所述筛选次数从所述M个出接口中确定数据流转发的出接口。
结合第一方面,在第一种实现方式中,在所述根据M个出接口的信息获取所述M个出接口相应的当前的令牌值之前,具体实现可以为:
根据转发信息表FIB获取所述M个出接口的信息。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述当前的令牌值由前一次的令牌值确定的,具体实现可以为:
所述当前的令牌值由前一次的令牌值和所述令牌更新因子确定的,所述令牌更新因子包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。
根据第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述当前的令牌值由前一次的令牌值和所述令牌更新因子确定的,具体实现可以为:
所述当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。
根据第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的,具体实现可以为:
如果前一次在所述M个出接口中的第K个出接口转发的数据长度为TokenF,则:
TokenC1i=TokenC2i+TokenF*Portwi,(i≠K)
TokenC1i=TokenC2i-TokenF*Portwi,(i=K)
其中,TokenC1i为第i个出接口的当前的令牌值,TokenC2i为第i个出接口的前一次的令牌值,Portwi为第i个出接口的带宽权重因子;i为正整数且取值从1到M。
结合第一方面或第一方面的第一种可能的实现方式至第四种可能的实现方式的任一种方式,在第五种可能的实现方式中,具体实现可以为:
初始令牌值由出接口参数确定的,所述出接口参数包括至少下列之一:出接口类型、出接口带宽和出接口链路质量。
结合第一方面或第一方面的第一种可能的实现方式至第五种可能的实现方式的任一种方式,在第六种可能的实现方式中,所述根据所述当前的令牌值确定筛选次数和所述M个出接口中各个出接口的筛选因子,具体实现可以为:
根据所述当前的令牌值和误差允许因子确定筛选次数和所述M个出接口中各个出接口的筛选因子,所述误差允许因子用于指示所述M个出接口中各个出接口当前的流量负载的均衡情况。
根据第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述根据所述当前的令牌值和误差允许因子确定筛选次数和所述M个出接口中各个出接口的筛选因子,具体实现可以为:
其中,TokenC1i为第i个出接口的当前的令牌值,FilterGi为第i个出接口的筛选因子,ErrorV为所述误差允许因子;i为正整数且取值从1到M,为向下取整运算符;所述筛选次数为所述M个出接口中筛选因子大于0的出接口数目。
结合第一方面或第一方面的第一种可能的实现方式至第七种可能的实现方式的任一种方式,在第八种可能的实现方式中,根据所述筛选因子和所述筛选次数确定数据流转发的出接口,具体实现可以为:
根据所述筛选因子、所述筛选次数以及由Hash算法得到的第一Hash结果确定数据流转发的出接口。
根据第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述根据所述筛选因子、所述筛选次数以及由Hash算法得到的第一Hash结果确定数据流转发的出接口,具体实现可以为:
根据所述筛选次数判断所述M个出接口中是否存在需要屏蔽的出接口,所述需要屏蔽的出接口的当前流量负载大于流量阈值;如果所述M个出接口中不存在需要屏蔽的出接口,则确定所述第一Hash结果为所述数据流转发的出接口;如果所述M个出接口中存在需要屏蔽的出接口,则根据所述筛选因子确定所述数据流转发的出接口,以使所述数据流转发的出接口为不需要屏蔽的出接口。
根据第一方面的第九种可能的实现方式,在第十种可能的实现方式中,所述如果所述M个出接口中不存在需要屏蔽的出接口,则确定所述第一Hash结果为所述数据流转发的出接口,具体实现可以为:
如果所述筛选次数等于M或者所述筛选次数等于0,则确定所述第一Hash结果为所述数据流转发的出接口;
所述如果所述M个出接口中存在需要屏蔽的出接口,则根据所述筛选因子确定所述数据流转发的出接口,以使所述数据流转发的出接口为不需要屏蔽的出接口,具体实现可以为:
如果所述筛选次数小于M且大于0,则执行下列步骤:
步骤a:设置第二Hash结果且所述第二Hash结果的初始值为0,设置初始正整数k1且值为1,如果所述第一Hash结果大于所述筛选次数,则将所述第一Hash结果除以所述筛选次数得到的余数设置为第一Hash结果;
步骤b:比较所述第二Hash结果与所述第一Hash结果;
如果所述第二Hash结果小于所述第一Hash结果,则进入步骤c;
如果所述第二Hash结果大于或等于所述第一Hash结果,则进入步骤d;
步骤c:将所述第二Hash结果加上第k1个出接口的筛选因子获得第三Hash结果,设置所述第二Hash结果等于所述第三Hash结果,且将k1加上1获得k2,设置所述k1等于所述k2;进入步骤b;
步骤d:将所述k2减去1获得k3,将第k3个出接口确定为数据流转发的出接口。
结合第一方面或第一方面的第一种可能的实现方式至第十种可能的实现方式的任一种方式,在第十一种可能的实现方式中,具体实现可以为:
根据所述数据流转发的出接口对流信息表进行更新,所述流信息表用于指示所述数据流与所述数据流转发的出接口的映射关系。
结合第一方面或第一方面的第一种可能的实现方式至第十一种可能的实现方式的任一种方式,在第十二种可能的实现方式中,所述根据所述M个出接口的信息获取所述M个出接口相应的当前的令牌值,具体实现可以为:
根据所述M个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引;根据所述令牌桶索引在相应的令牌桶中获取所述M个出接口相应的当前的令牌值。
第二方面,提供了一种流量负载分担的设备,该设备包括:获取单元,用于根据M个出接口的信息获取所述M个出接口相应的当前的令牌值,所述当前的令牌值由前一次的令牌值确定的,M为正整数;确定单元,用于根据所述获取单元获取的所述当前的令牌值确定筛选次数和所述M个出接口中各个出接口的筛选因子;还用于根据所述筛选因子和所述筛选次数从所述M个出接口中确定数据流转发的出接口。
结合第二方面或第一种可能的实现方式,在第二种可能的实现方式中,所述获取单元还用于:根据转发信息表FIB获取所述M个出接口的信息。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述当前的令牌值由前一次的令牌值和所述令牌更新因子确定的,所述令牌更新因子包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。
根据第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。
根据第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的,包括:
如果前一次在所述M个出接口中的第K个出接口转发的数据长度为TokenF,则:
TokenC1i=TokenC2i+TokenF*Portwi,(i≠K)
TokenC1i=TokenC2i-TokenF*Portwi,(i=K)
其中,TokenC1i为第i个出接口的当前的令牌值,TokenC2i为第i个出接口的前一次的令牌值,Portwi为第i个出接口的带宽权重因子;i为正整数且取值从1到M。
结合第二方面或第二方面的第一种可能的实现方式至第四种可能的实现方式任一种方式,在第五种可能的实现方式中,初始令牌值由出接口参数确定的,所述出接口参数包括至少下列之一:出接口类型、出接口带宽和出接口链路质量。
结合第二方面或第二方面的第一种可能的实现方式至第五种可能的实现方式任一种方式,在第六种可能的实现方式中,所述确定单元具体用于:根据所述当前的令牌值和误差允许因子确定筛选次数和所述M个出接口中各个出接口的筛选因子,所述误差允许因子用于指示所述M个出接口中各个出接口当前的流量负载的均衡情况。
根据第二方面的第六种可能的实现方式,在第七种可能的实现方式中,所述确定单元还具体用于:
确定FilterGi,
其中,TokenC1i为第i个出接口的当前的令牌值,FilterGi为第i个出接口的筛选因子,ErrorV为所述误差允许因子;i为正整数且取值从1到M,为向下取整运算符;
确定所述筛选次数,所述筛选次数为所述M个出接口中筛选因子大于0的出接口数目。
结合第二方面或第二方面的第一种可能的实现方式至第七种可能的实现方式任一种方式,在第八种可能的实现方式中,所述确定单元具体用于:根据所述筛选因子、所述筛选次数以及由Hash算法得到的第一Hash结果确定数据流转发的出接口。
根据第二方面的第八种可能的实现方式,在第九种可能的实现方式中,所述确定单元具体用于:根据所述筛选次数判断所述M个出接口中是否存在需要屏蔽的出接口,所述需要屏蔽的出接口的当前流量负载大于流量阈值;如果所述M个出接口中不存在需要屏蔽的出接口,则确定所述第一Hash结果为所述数据流转发的出接口;如果所述M个出接口中存在需要屏蔽的出接口,则根据所述筛选因子确定所述数据流转发的出接口,以使所述数据流转发的出接口为不需要屏蔽的出接口。
根据第二方面的第九种可能的实现方式,在第十种可能的实现方式中,所述确定单元具体用于:如果所述筛选次数等于M或者所述筛选次数等于0,则确定所述第一Hash结果为所述数据流转发的出接口;
如果所述筛选次数小于M且大于0,则执行下列步骤:
步骤a:设置第二Hash结果且所述第二Hash结果的初始值为0,设置初始正整数k1且值为1,如果所述第一Hash结果大于所述筛选次数,则将所述第一Hash结果除以所述筛选次数得到的余数设置为第一Hash结果;
步骤b:比较所述第二Hash结果与所述第一Hash结果;
如果所述第二Hash结果小于所述第一Hash结果,则进入步骤c;
如果所述第二Hash结果大于或等于所述第一Hash结果,则进入步骤d;
步骤c:将所述第二Hash结果加上第k1个出接口的筛选因子获得第三Hash结果,设置所述第二Hash结果等于所述第三Hash结果,且将k1加上1获得k2,设置所述k1等于所述k2;进入步骤b;
步骤d:将所述k2减去1获得k3,将第k3个出接口确定为数据流转发的出接口。
结合第二方面或第二方面的第一种可能的实现方式至第十种可能的实现方式任一种方式,在第十一种可能的实现方式中,所述设备还包括:
更新单元,用于根据所述数据流转发的出接口对流信息表进行更新,所述流信息表用于指示所述数据流与所述数据流转发的出接口的映射关系。
结合第二方面或第二方面的第一种可能的实现方式至第十一种可能的实现方式任一种方式,在第十二种可能的实现方式中,所述获取单元具体用于:
根据所述M个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引;根据所述令牌桶索引在相应的令牌桶中获取所述M个出接口相应的当前的令牌值。
本发明实施例根据出接口的信息获取各个出接口的当前的令牌值,通过各个出接口的当前的令牌值确定筛选因子和筛选次数,根据筛选因子和筛选次数确定数据流转发的出接口。由于出接口的当前的令牌值与流量相关,因此根据当前的令牌值确定筛选因子和筛选次数,通过筛选因子和筛选次数可以将当前流量相对较大的出接口屏蔽掉,将当前流量相对较小或当前还没有流量的出接口选为数据流转发的出接口,从而实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一个实施例的流量负载分担的方法的流程图。
101,根据M个出接口的信息获取M个出接口相应的当前的令牌值,当前的令牌值由前一次的令牌值确定的,M为正整数。
102,根据当前的令牌值确定筛选次数和M个出接口中各个出接口的筛选因子。
103,根据筛选因子和筛选次数从M个出接口中确定数据流转发的出接口。
本发明实施例根据出接口的信息获取各个出接口的当前的令牌值,通过各个出接口的当前的令牌值确定筛选因子和筛选次数,根据筛选因子和筛选次数确定数据流转发的出接口。由于出接口的当前的令牌值与流量相关,因此根据当前的令牌值确定筛选因子和筛选次数,通过筛选因子和筛选次数可以将当前流量相对较大的出接口屏蔽掉,将当前流量相对较小或当前还没有流量的出接口选为数据流转发的出接口,从而实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
可选地,作为一个实施例,在步骤101之前,可以在FIB(ForwardingInformationBase,转发信息表)获取数据流转发可选用的M个出接口的信息。出接口的信息可以是出接口的标识,例如,M取值为3,3个出接口的标识分别是出接口1、出接口2和出接口3。应理解,本发明实施例对如何获取M个出接口的信息的方式不作限定。
可选地,作为另一个实施例,在步骤101中,当前的令牌值可以由前一次的令牌值和令牌更新因子确定的。其中,令牌更新因子包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。进一步地,当前的令牌值可以由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。例如,数据流转发可选用的出接口有4个,即M取值为4,分别是出接口1,出接口2,出接口3和出接口4,并且4个出接口带宽权重相同,即4个出接口带宽权重因子取值为1。假设4个出接口的前一次的令牌值均为0,前一次数据流转发的出接口为出接口1,且数据流的报文的长度为100(字节),则出接口1的当前的令牌值可以保持不变,即为0,出接口2、出接口3和出接口4的当前的令牌值均确定为100。相应地,在步骤102中,可选地,出接口1的当前的令牌值小于4个出接口当前的令牌值的平均值75,而出接口2、出接口3和出接口4的当前的令牌值均大于4个出接口当前的令牌值的平均值75。因此,可以确定出接口1的筛选因子为0,出接口2、出接口3和出接口4的筛选因子分别为1,筛选次数为3,表示当前数据流转发可选择的出接口个数,筛选因子等于0的出接口1被屏蔽。这样,可以通过其他出接口实现数据流分担,防止出接口1数据流拥塞的现象。
具体而言,如果前一次在M个出接口中的第K个出接口转发的数据长度为TokenF,则M个出接口中各个出接口的当前的令牌值可以由下列式子确定:
其中,TokenC1i为第i个出接口的当前的令牌值,TokenC2i为第i个出接口的前一次的令牌值,Portwi为第i个出接口的带宽权重因子;i为正整数且取值从1到M。
例如,数据流转发可选用的出接口有4个,即M取值为4,分别是出接口1,出接口2,出接口3和出接口4,并且4个出接口带宽权重相同,即4个出接口带宽权重因子取值为1。假设4个出接口的前一次的令牌值分别为0,100,100和100。前一次数据流转发的出接口为出接口2且数据流的报文长度为200(字节)。根据(1)式,可以得到出接口1的当前的令牌值为200,出接口2的当前的令牌值为100,出接口3的当前的令牌值为300,出接口4的当前的令牌值为300。相应地,在步骤102中,可以将当前的令牌值大于250的出接口的筛选因子确定为1,当前的令牌值小于或等于250的出接口的筛选因子确定为0,并将筛选因子为0的出接口屏蔽,即当前的数据流转发选择出接口3或出接口4,因此,能够实现数据流的分担。
另外,可以将各个出接口的初始令牌值设置为0。或者,各个出接口的初始令牌值还可以由出接口参数确定的,出接口参数包括至少下列之一:出接口类型、出接口带宽和出接口链路质量。例如,数据流转发可选用的出接口有3个,即M取值为3,分别是出接口1,出接口2和出接口3,出接口1带宽为B1,出接口2带宽为B2,出接口3带宽为B3,其中,B3<B2<B1。可以将出接口1的初始令牌值设置为Value1,出接口2的初始令牌值设置为Value2,出接口3的初始令牌值设置为Value3,其中,Value1<Value2<Value3。又例如,数据流转发可选用的出接口有2个,即M取值为2,分别是出接口1和出接口2,出接口1的链路质量比出接口2的链路质量好,可以将出接口1的初始令牌值设置为Value1,出接口2的初始令牌值设置为Value2,其中,Value1<Value2。等等。
应理解,上述例子仅仅是示例性的,而非对本发明实施例的限制。还应理解,上述例子中M的取值、出接口标识的符号、数据流的报文长度、出接口参数的选取以及令牌值的设置等等仅仅是示例性的,而非对本发明实施例的限制。需要指出的是,本发明实施例采用出接口的当前的令牌值指示出接口的当前流量负载的情况,在一种实现方式下,出接口的当前的令牌值越大指示出接口的当前流量负载越小,使得选择的数据流转发的出接口为当前的令牌值较大的出接口。在另一种实现方式下,本发明实施例还可以采用出接口的当前的令牌值越小指示出接口的当前流量负载越小的方式,使得选择的数据流转发的出接口为当前的令牌值较小的出接口。
可选地,作为另一个实施例,在步骤101中,可以根据M个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引,根据令牌桶索引在相应的令牌桶中获取M个出接口相应的当前的令牌值。例如,每个出接口号都分配有令牌桶且每个出接口的出接口号与令牌桶索引具有映射关系,根据FIB查到当前数据流转发时可选用的出接口有两个,出接口号分别是1和2,根据映射关系表查到出接口1的令牌桶索引为A,根据令牌桶索引A在相应的令牌桶中获取出接口1的当前的令牌值,根据映射关系表查到出接口2的令牌桶索引为B,根据令牌桶索引B在相应的令牌桶中获取出接口2的当前的令牌值。
可选地,作为另一个实施例,在步骤102中,可以根据当前的令牌值和误差允许因子确定筛选次数和M个出接口中各个出接口的筛选因子,误差允许因子用于指示M个出接口中各个出接口当前的流量负载的均衡情况。误差允许因子取值范围是大于0且小于或等于100%。例如,数据流转发可选用的出接口有2个,即M取值为2,分别是出接口1和出接口2,并且两个出接口的带宽权重相同,如果出接口1当前的流量负载与出接口2当前的流量负载之差小于出接口带宽的5%,则将误差允许因子取值为100%,如果出接口1当前的流量负载与出接口2当前的流量负载之差小于出接口带宽的10%且大于出接口带宽的5%,则将误差允许因子取值为90%,等等。这样,能够提高准确率。
应理解,上述例子中M的取值和误差允许因子的取值仅仅是示例性,而非对本发明实施例的限制。
具体而言,M个出接口中各个出接口的筛选因子可以由下列式子确定:
其中,TokenC1i为第i个出接口的当前的令牌值,FilterGi为第i个出接口的筛选因子,ErrorV为误差允许因子;i为正整数且取值从1到M,为向下取整运算符。
如果出接口的筛选因子大于1,则将筛选因子置为1。筛选次数Filter-Number为M个出接口中筛选因子等于1的出接口数目。
例如,假设M取值是3,第1个出接口的当前令牌值TokenC11为200,第2个出接口的当前的令牌值TokenC12为100,第3个出接口的当前的令牌值TokenC13为300,ErrorV为100%。由(2)式可以得到:第1个出接口的筛选因子FilterG1为0,第2个出接口的筛选因子FilterG2为0,第3个出接口的筛选因子FilterG3为1。筛选次数等于1只有第3个出接口,即Filter-Number等于1。
可选地,作为另一个实施例,在步骤103中,可以根据筛选因子、筛选次数以及现有的算法得到的结果确定数据流转发的出接口。现有的算法如:Hash算法、改进后的Hash算法(设置了虚拟Hash桶)或者RoundRobin算法等。
现有的算法以Hash算法为例进行说明,应理解,本发明实施例对此并不限定,现有的算法还可以是Hash算法之外其它算法。
进一步地,根据筛选次数判断M个出接口中是否存在需要屏蔽的出接口,需要屏蔽的出接口的当前流量负载大于流量阈值(例如出接口的当前的令牌值小于M个出接口当前的令牌值的平均值)。如果M个出接口中不存在需要屏蔽的出接口,则可以将由Hash算法得到的第一Hash结果确定为数据流转发的出接口。如果M个出接口中存在需要屏蔽的出接口,则可以根据筛选因子确定数据流转发的出接口,以使数据流转发的出接口为不需要屏蔽的出接口。
具体而言,如果筛选次数等于M或者所述筛选次数等于0,则可以确定第一Hash结果为数据流转发的出接口。如果所述筛选次数小于M且大于0,即M个出接口中存在需要屏蔽的出接口,则执行下列步骤:
步骤a:设置第二Hash结果且第二Hash结果的初始值为0,设置初始正整数k1且值为1,如果第一Hash结果大于筛选次数,则将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果。
步骤b:比较第二Hash结果与第一Hash结果。
如果第二Hash结果小于第一Hash结果,则进入步骤c。
如果第二Hash结果大于或等于第一Hash结果,则进入步骤d。
步骤c:将第二Hash结果加上第k1个出接口的筛选因子获得第三Hash结果,设置第二Hash结果等于第三Hash结果,且将k1加上1获得k2,设置k1等于k2;进入步骤b。
步骤d:将k2减去1获得k3,将第k3个出接口确定为数据流转发的出接口。
此外,步骤a至步骤d的算法可以表示如下:
intHash-Result2=0,k=1;
If(Hash-Result1>Filter-Number)
{
Hash-Result1=Hash-Result1%Filter-Number;
}
While(Hash-Result2<Hash-Result1)
{
Hash-Result2=Hash-Result2+FilterG-k;
k++;
}
Balance-Result=k–1;
其中,Balance-Result即为数据流转发的出接口。FilterG-k为第k个出接口的筛选因子,Hash-Result1为第一Hash结果,Filter-Number为筛选次数。
应理解,上述算法只是为了帮助本领域技术人员更易理解本发明,而非对本发明的限制,即无论以何种算法实现本发明均落入本发明的范围内。
例如,假设M取值是6,其中,第1个出接口的筛选因子为1,第2个出接口的筛选因子为0,第3个出接口的筛选因子为1,第4个出接口的筛选因子为1,第5个出接口的筛选因子为0,第6个出接口的筛选因子为1。筛选因子为0的出接口(当前流量负载大于流量阈值的出接口),即是需要屏蔽的出接口。筛选次数为筛选因子等于1的出接口数目,即为4。
情况1:第一Hash结果为1,小于筛选次数。在步骤b中,第二Hash结果为0,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上第1个出接口的筛选因子的得到第三Hash结果为2,设置第二Hash结果等于第三Hash结果,即第二Hash结果为1,k1加上1获得k2,设置k1等于k2,即k1值变为2,进入步骤b。在步骤b中,第二Hash结果为1,等于第一Hash结果,进入步骤d。在步骤d中,k2减去1的差为1,即数据流转发的出接口为第1个出接口。
情况2:第一Hash结果为2,小于筛选次数。在步骤b中,第二Hash结果为0,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上第1个出接口的筛选因子的得到第三Hash结果为2,设置第二Hash结果等于第三Hash结果,即第二Hash结果为1,k1加上1获得k2,设置k1等于k2,即k1值变为2,进入步骤b。在步骤b中,第二Hash结果为1,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上第2个出接口的筛选因子的得到第三Hash结果为1,即第二Hash结果为1,k1的值变为3,进入步骤b。在步骤b中,第二Hash结果为1,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上第3个出接口的筛选因子的得到第三Hash结果为2,即第二Hash结果为2,k1的值变为4,进入步骤b。在步骤b中,第二Hash结果为2,等于第一Hash结果。在步骤d中,k2减去1的差为3,即数据流转发的出接口为第3个出接口。
情况3:第一Hash结果为3,小于筛选次数。执行步骤a-d的过程与上述情况类似,此处不再赘述。在执行步骤a至步骤d后,得到数据流转发的出接口为第4个出接口。
情况4:第一Hash结果为4,等于筛选次数。执行步骤a-d的过程与上述情况类似,此处不再赘述。在执行步骤a至步骤d后,得到数据流转发的出接口为第6个出接口。
情况5:第一Hash结果为5,大于筛选次数。因此,在步骤a中,将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果,即第一Hash结果为1。执行步骤a至步骤d的过程与上述情况类似,此处不再赘述。在执行步骤a-d后,得到数据流转发的出接口为第1个出接口。
情况6:第一Hash结果为6,大于筛选次数。因此,在步骤a中,将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果,即第一Hash结果为2。执行步骤a至步骤d的过程与上述情况类似,此处不再赘述。在执行步骤a-d后,得到数据流转发的出接口为第3个出接口。
无论Hash算法得到的结果为哪一个出接口,通过本发明实施例,数据流转发的出接口均为不需要屏蔽的出接口,换句话说,数据流转发的出接口的当前的流量负载较小或者空闲,避免了数据流转发时选择到繁忙的出接口。因此,实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
应注意的是,上述例子仅仅是示例性的,而非对本发明实施例的限制。
可选地,作为另一个实施例,在步骤103之后,可以根据数据流转发的出接口对流信息表进行更新,流信息表用于指示数据流与数据流转发的出接口的映射关系。
具体而言,在流信息表中记录了数据流的标识与出接口标识的映射关系。如果当前转发的数据流未记录在流信息表中,则在流信息表中添加当前转发的数据流的标识与相应的出接口标识的映射关系。例如,数据流1的第一个报文转发的出接口为出接口1,如果流信息表中没有数据流1的任何信息,则将数据流1与出接口1的映射关系记录在流信息表中。如果当前转发的数据流记录在流信息表中且转发的出接口标识与记录在流信息表中的一致,则不对流信息表进行更新。例如,当前数据流1转发的出接口为出接口1,如果在流信息表中已记录数据流1与出接口1的映射关系,则不对流信息表进行更新。如果当前转发的数据流记录在流信息表中且转发的出接口标识与记录在流信息表中的不一致,则在超过时间阈值时或者在原记录在流信息表中与当前转发的数据流映射的出接口被屏蔽(例如筛选因子为0)时,将原记录在流信息表中出接口标识修改为当前数据流转发的出接口标识。例如,前一次数据流1的第一个报文转发的出接口为出接口1,在流信息表中记录了数据流1与出接口1的映射关系,当前数据流1的第二个报文转发的出接口为出接口2。因此,在超过时间阈值,即第一个报文与第二个报文转发的时间间隔超过了时间阈值(例如1秒),则将流信息表中的数据流1与出接口1的映射关系更新为数据流1与出接口2的映射关系。或者,出接口1的筛选因子为0,即出接口1被屏蔽,则将流信息表中的数据流1与出接口1的映射关系更新为数据流1与出接口2的映射关系。等等。
这样,能够避免数据报文在多个出接口上转发的乱序,从而提高数据传输效率。
下面结合图2的例子描述本发明的非限制性的实施方式。
图2是本发明另一个实施例的流量负载分担的方法的过程的示意性流程图。在图2的方法中,现有的算法以Hash算法为例进行说明,应理解,本发明实施例对此并不限定,即无论采用何种现有的算法结合本发明的方法均落入本发明的范围内。图2的方法以M等于4、误差允许因子取值为100%,以及4个令牌桶为例进行说明,还应理解,M的取值、误差允许因子取值以及令牌桶的个数仅仅是示例性的,而非对本发明的限制。
201,根据当前需要转发的数据流的信息查转发信息表,获取数据流转发可选用的M个出接口的信息。出接口的信息可以是出接口的标识,例如,M取值为4,4个出接口的标识分别是出接口1、出接口2、出接口3和出接口4。
202a,根据Hash算法获得第一Hash结果。
202b,确定筛选次数和M个出接口中各个出接口的筛选因子,简称为“均衡算法”。
应理解,本发明实施例对于步骤202a和步骤202b的操作顺序不作限定。
根据4个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引,根据令牌桶索引在相应的令牌桶中获取4个出接口相应的当前的令牌值。在令牌桶A中获取出接口1的当前的令牌值;在令牌桶B中获取出接口2的当前的令牌值;在令牌桶C中获取出接口3的当前的令牌值;在令牌桶D中获取出接口4的当前的令牌值。
当前的令牌值可以由前一次的令牌值和令牌更新因子确定的。其中,令牌更新因子包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。进一步地,当前的令牌值可以由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。例如,4个出接口带宽权重相同,即4个出接口带宽权重因子取值为1。假设4个出接口的前一次的令牌值分别为100、200、300和400,前一次数据流转发的出接口为出接口3,且数据流的报文的长度为100(字节),则根据上述(1)式得到:出接口1的当前的令牌值为200,出接口2当前的令牌值为300,出接口3的当前的令牌值为200以及出接口4的当前的令牌值为500。
应理解,上述例子中前一次的令牌值的设置以及数据流的报文的长度仅仅是示例性的,而非对本发明实施例的限制。
需要指出的是,本发明实施例采用出接口的当前的令牌值指示出接口的当前流量负载的情况,在一种实现方式下,出接口的当前的令牌值越大指示出接口的当前流量负载越小,使得选择的数据流转发的出接口为当前的令牌值较大的出接口。在另一种实现方式下,本发明实施例还可以采用出接口的当前的令牌值越小指示出接口的当前流量负载越小的方式,使得选择的数据流转发的出接口为当前的令牌值较小的出接口。
采用上述例子中获得的各个出接口的当前令牌值。出接口1(第1个出接口)的当前令牌值TokenC11为200,出接口2(第2个出接口)的当前的令牌值TokenC12为300,出接口3(第3个出接口)的当前的令牌值TokenC13为200,出接口4(第4个出接口)的当前的令牌值TokenC14为500,误差允许因子取值为ErrorV为100%。根据上述(2)式,可以得到:出接口1的筛选因子FilterG1为0,出接口2的筛选因子FilterG2为1,出接口3的筛选因子FilterG3为0,出接口4的筛选因子FilterG4为1。筛选次数等于1有出接口2和出接口4,即Filter-Number等于2。
根据筛选次数判断4个出接口中是否存在需要屏蔽的出接口,需要屏蔽的出接口的当前流量负载大于流量阈值(例如出接口的当前的令牌值小于4个出接口当前的令牌值的平均值300)。筛选次数2小于4,假设在步骤202a中得到的第一Hash结果为3。因此,执行上述步骤a至步骤d。
在步骤a中,设置第二Hash结果且第二Hash结果的初始值为0,设置初始正整数k1且值为1,第一Hash结果为3大于筛选次数2,则将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果,即第一Hash结果为1。
在步骤b中,第二Hash结果为0,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上出接口1的筛选因子的得到第三Hash结果为0,设置第二Hash结果等于第三Hash结果,即第二Hash结果为0,k1加上1获得k2,设置k1等于k2,即k1值变为2,进入步骤b。在步骤b中,第二Hash结果为0,小于第一Hash结果,进入步骤c。在步骤c中,第二Hash结果加上出接口2的筛选因子的得到第三Hash结果为1,即第二Hash结果为1,k1的值变为3,进入步骤b。在步骤b中,第二Hash结果为1,等于第一Hash结果。在步骤d中,k2减去1的差为3,即数据流转发的出接口为出接口2。
假设在步骤202a中得到的第一Hash结果为,在步骤a中,将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果,即第一Hash结果为2。执行步骤a至步骤d的过程与上述情况类似,此处不再赘述。在执行步骤a至步骤d后,得到数据流转发的出接口为出接口4。在步骤202a中经Hash算法得到的结果为其它出接口的情况可参考上述例子,不再赘述。
通过本发明实施例,数据流转发的出接口的当前的流量负载较小或者空闲,避免了数据流转发时选择到繁忙的出接口。因此,实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
另外,在步骤203之后,在204步骤中,可以根据数据流转发的出接口对流信息表进行更新,流信息表用于指示数据流与数据流转发的出接口的映射关系。例如,前一次数据流1的第一个报文转发的出接口为出接口3,在流信息表中记录了数据流1与出接口3的映射关系,当前数据流1的第二个报文转发的出接口为出接口2。而出接口3的筛选因子为0,即出接口3被屏蔽,则将流信息表中的数据流1与出接口3的映射关系更新为数据流1与出接口2的映射关系。又例如,前一次数据流1的第一个报文转发的出接口为出接口3,在流信息表中记录了数据流1与出接口3的映射关系,当前数据流1的第二个报文转发的出接口为出接口4。而出接口3的筛选因子为0,即出接口3被屏蔽,则将流信息表中的数据流1与出接口3的映射关系更新为数据流1与出接口4的映射关系。这样,能够避免数据报文在多个出接口上转发的乱序,从而提高数据传输效率。
应注意的是,上述例子仅仅是示例性的,而非对本发明实施例的限制。
本发明实施例根据出接口的信息获取各个出接口的当前的令牌值,通过各个出接口的当前的令牌值确定筛选因子和筛选次数,根据筛选因子和筛选次数确定数据流转发的出接口。由于出接口的当前的令牌值与流量相关,因此根据当前的令牌值确定筛选因子和筛选次数,通过筛选因子和筛选次数可以将当前流量相对较大的出接口屏蔽掉,将当前流量相对较小或当前还没有流量的出接口选为数据流转发的出接口,从而实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
图3是本发明一个实施例的流量负载分担的设备的结构框图。图3的设备300包括获取单元301和确定单元302。
获取单元301,用于根据M个出接口的信息获取M个出接口相应的当前的令牌值,当前的令牌值由前一次的令牌值确定的,M为正整数。
确定单元302,用于根据获取单元301获取的当前的令牌值确定筛选次数和M个出接口中各个出接口的筛选因子;还用于根据筛选因子和筛选次数从M个出接口中确定数据流转发的出接口。
本发明实施例根据出接口的信息获取各个出接口的当前的令牌值,通过各个出接口的当前的令牌值确定筛选因子和筛选次数,根据筛选因子和筛选次数确定数据流转发的出接口。由于出接口的当前的令牌值与流量相关,因此根据当前的令牌值确定筛选因子和筛选次数,通过筛选因子和筛选次数可以将当前流量相对较大的出接口屏蔽掉,将当前流量相对较小或当前还没有流量的出接口选为数据流转发的出接口,从而实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
设备300可实现图1和图2的实施例中涉及的操作,因此为避免重复,不再详细描述。
可选地,作为一个实施例,获取单元301还用于根据转发信息表FIB获取M个出接口的信息。
可选地,作为另一个实施例,获取单元301具体用于:根据M个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引;根据令牌桶索引在相应的令牌桶中获取M个出接口相应的当前的令牌值。
可选地,作为另一个实施例,当前的令牌值可以由前一次的令牌值和令牌更新因子确定的,令牌更新因子可以包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。进一步地,当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。
具体而言,如果前一次在M个出接口中的第K个出接口转发的数据长度为TokenF,则M个出接口中各个出接口的当前的令牌值可以由下列式子确定:
其中,TokenC1i为第i个出接口的当前的令牌值,TokenC2i为第i个出接口的前一次的令牌值,Portwi为第i个出接口的带宽权重因子;i为正整数且取值从1到M。
需要指出的是,本发明实施例采用出接口的当前的令牌值指示出接口的当前流量负载的情况,在一种实现方式下,出接口的当前的令牌值越大指示出接口的当前流量负载越小,使得选择的数据流转发的出接口为当前的令牌值较大的出接口。在另一种实现方式下,本发明实施例还可以采用出接口的当前的令牌值越小指示出接口的当前流量负载越小的方式,使得选择的数据流转发的出接口为当前的令牌值较小的出接口。
可选地,作为另一个实施例,初始令牌值可以由出接口参数确定的,出接口参数可以包括至少下列之一:出接口类型、出接口带宽和出接口链路质量。
可选地,作为另一个实施例,确定单元302具体用于:根据当前的令牌值和误差允许因子确定筛选次数和M个出接口中各个出接口的筛选因子,误差允许因子用于指示所述M个出接口中各个出接口当前的流量负载的均衡情况。这样,能够提高准确率。进一步地,确定单元302还具体用于:
确定FilterGi,
其中,TokenC1i为第i个出接口的当前的令牌值,FilterGi为第i个出接口的筛选因子,ErrorV为误差允许因子;i为正整数且取值从1到M,为向下取整运算符。
如果出接口的筛选因子大于1,则将筛选因子置为1。筛选次数Filter-Number为M个出接口中筛选因子等于1的出接口数目。
可选地,作为另一个实施例,确定单元302具体用于:根据筛选因子、筛选次数以及由现有的算法得到的结果(例如Hash算法得到的第一Hash结果)确定数据流转发的出接口。进一步地,确定单元302具体用于:根据筛选次数判断M个出接口中是否存在需要屏蔽的出接口,需要屏蔽的出接口的当前流量负载大于流量阈值。如果M个出接口中不存在需要屏蔽的出接口,则确定第一Hash结果为数据流转发的出接口。如果M个出接口中存在需要屏蔽的出接口,则根据筛选因子确定数据流转发的出接口,以使数据流转发的出接口为不需要屏蔽的出接口。
具体而言,确定单元302具体用于:
如果筛选次数等于M或者筛选次数等于0,则确定第一Hash结果为数据流转发的出接口。如果筛选次数小于M且大于0,则执行下列步骤:
步骤a:设置第二Hash结果且第二Hash结果的初始值为0,设置初始正整数k1且值为1,如果第一Hash结果大于筛选次数,则将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果。
步骤b:比较第二Hash结果与第一Hash结果。
如果第二Hash结果小于第一Hash结果,则进入步骤c。
如果第二Hash结果大于或等于第一Hash结果,则进入步骤d。
步骤c:将第二Hash结果加上第k1个出接口的筛选因子获得第三Hash结果,设置第二Hash结果等于第三Hash结果,且将k1加上1获得k2,设置k1等于k2;进入步骤b。
步骤d:将k2减去1获得k3,将第k3个出接口确定为数据流转发的出接口。
无论Hash算法得到的结果为哪一个出接口,通过本发明实施例,数据流转发的出接口均为不需要屏蔽的出接口,换句话说,数据流转发的出接口的当前的流量负载较小或者空闲,避免了数据流转发时选择到繁忙的出接口。因此,实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
可选地,作为另一个实施例,设备300还包括更新单元303,更新单元303用于根据数据流转发的出接口对流信息表进行更新,流信息表用于指示所述数据流与所述数据流转发的出接口的映射关系。这样,能够避免数据报文在多个出接口上转发的乱序,从而提高数据传输效率。
本发明实施例进一步给出实现上述方法实施例中各步骤及方法的装置实施例。图4示出了一种设备的实施例,在该实施例中,设备400包括处理器401和存储器402。处理器401控制设备400的操作,处理器401还可以称为CPU(CentralProcessingUnit,中央处理单元)。存储器402可以包括只读存储器和随机存取存储器,并向处理器401提供指令和数据。存储器402的一部分还可以包括非易失行随机存取存储器(NVRAM)。处理器401和存储器402通过总线系统410耦合在一起,其中总线系统410除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都标为总线系统410。此外,设备400还可以包括功发射器403和接收器404。.
上述本发明实施例揭示的方法可以应用上述的设备400,或者说主要由其中的处理器401和存储器402以实现。处理器401可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。
进一步,图5是本发明一个实施例的流量负载分担的设备的结构框图。图5的设备500包括处理器501和存储器502。
处理器501,用于根据M个出接口的信息获取M个出接口相应的当前的令牌值,当前的令牌值由前一次的令牌值确定的,M为正整数。将当前的令牌值存储在存储器502中。处理器501还用于根据存储器502存储的当前的令牌值确定筛选次数和M个出接口中各个出接口的筛选因子;还用于根据筛选因子和筛选次数确定数据流转发的出接口。
本发明实施例根据出接口的信息获取各个出接口的当前的令牌值,通过各个出接口的当前的令牌值确定筛选因子和筛选次数,根据筛选因子和筛选次数确定数据流转发的出接口。通过本发明提供的方法可以将当前流量相对较大的出接口屏蔽掉,将当前流量相对较小或当前还没有流量的出接口选为数据流转发的出接口,从而实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
设备500可实现图1和图2的实施例中涉及的操作,因此为避免重复,不再详细描述。
可选地,作为一个实施例,处理器501还用于根据转发信息表FIB获取M个出接口的信息。
可选地,作为另一个实施例,处理器501具体用于:根据M个出接口的出接口号与令牌桶索引的映射关系获取令牌桶索引;根据令牌桶索引在相应的令牌桶中获取M个出接口相应的当前的令牌值。
可选地,作为另一个实施例,当前的令牌值可以由前一次的令牌值和令牌更新因子确定的,令牌更新因子可以包括至少下列之一:前一次的出接口转发的数据长度,出接口类型、出接口带宽、出接口链路质量和出接口资源占用率。进一步地,当前的令牌值由前一次的令牌值、前一次的出接口转发的数据长度,以及出接口带宽权重因子确定的。
具体而言,如果前一次在M个出接口中的第K个出接口转发的数据长度为TokenF,则M个出接口中各个出接口的当前的令牌值可以由下列式子确定:
其中,TokenC1i为第i个出接口的当前的令牌值,TokenC2i为第i个出接口的前一次的令牌值,Portwi为第i个出接口的带宽权重因子;i为正整数且取值从1到M。
需要指出的是,本发明实施例采用出接口的当前的令牌值指示出接口的当前流量负载的情况,在一种实现方式下,出接口的当前的令牌值越大指示出接口的当前流量负载越小,使得选择的数据流转发的出接口为当前的令牌值较大的出接口。在另一种实现方式下,本发明实施例还可以采用出接口的当前的令牌值越小指示出接口的当前流量负载越小的方式,使得选择的数据流转发的出接口为当前的令牌值较小的出接口。
可选地,作为另一个实施例,初始令牌值可以由出接口参数确定的,出接口参数可以包括至少下列之一:出接口类型、出接口带宽和出接口链路质量。
可选地,作为另一个实施例,处理器501具体用于:根据当前的令牌值和误差允许因子确定筛选次数和M个出接口中各个出接口的筛选因子,误差允许因子用于指示所述M个出接口中各个出接口当前的流量负载的均衡情况。这样,能够提高准确率。进一步地,处理器501还具体用于:
确定FilterGi,
其中,TokenC1i为第i个出接口的当前的令牌值,FilterGi为第i个出接口的筛选因子,ErrorV为误差允许因子;i为正整数且取值从1到M,为向下取整运算符。
如果出接口的筛选因子大于1,则将筛选因子置为1。筛选次数Filter-Number为M个出接口中筛选因子等于1的出接口数目。
可选地,作为另一个实施例,处理器501具体用于:根据筛选因子、筛选次数以及由现有的算法得到的结果(例如Hash算法得到的第一Hash结果)确定数据流转发的出接口。进一步地,处理器501具体用于:根据筛选次数判断M个出接口中是否存在需要屏蔽的出接口,需要屏蔽的出接口的当前流量负载大于流量阈值。如果M个出接口中不存在需要屏蔽的出接口,则确定第一Hash结果为数据流转发的出接口。如果M个出接口中存在需要屏蔽的出接口,则根据筛选因子确定数据流转发的出接口,以使数据流转发的出接口为不需要屏蔽的出接口。
具体而言,处理器501具体用于:
如果筛选次数等于M或者筛选次数等于0,则确定第一Hash结果为数据流转发的出接口。如果筛选次数小于M且大于0,则执行下列步骤:
步骤a:设置第二Hash结果且第二Hash结果的初始值为0,设置初始正整数k1且值为1,如果第一Hash结果大于筛选次数,则将第一Hash结果除以筛选次数得到的余数设置为第一Hash结果。
步骤b:比较第二Hash结果与第一Hash结果。
如果第二Hash结果小于第一Hash结果,则进入步骤c。
如果第二Hash结果大于或等于第一Hash结果,则进入步骤d。
步骤c:将第二Hash结果加上第k1个出接口的筛选因子获得第三Hash结果,设置第二Hash结果等于第三Hash结果,且将k1加上1获得k2,设置k1等于k2;进入步骤b。
步骤d:将k2减去1获得k3,将第k3个出接口确定为数据流转发的出接口。
无论Hash算法得到的结果为哪一个出接口,通过本发明实施例,数据流转发的出接口均为不需要屏蔽的出接口,换句话说,数据流转发的出接口的当前的流量负载较小或者空闲,避免了数据流转发时选择到繁忙的出接口。因此,实现各个出接口的流量负载分担均衡,降低丢包率,提高数据流转发的可靠性。
可选地,作为另一个实施例,处理器501还用于根据数据流转发的出接口对流信息表进行更新,流信息表用于指示所述数据流与所述数据流转发的出接口的映射关系。这样,能够避免数据报文在多个出接口上转发的乱序,从而提高数据传输效率。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。