法律状态公告日
法律状态信息
法律状态
2020-05-01
授权
授权
2018-02-23
实质审查的生效 IPC(主分类):H04L12/26 申请日:20171010
实质审查的生效
2018-01-26
公开
公开
技术领域
本发明涉及一种SDN负载均衡技术,具体涉及一种SDN架构下基于电梯调度算法的负载均衡方法。
背景技术
随着云计算和大数据的发展,网络服务对服务器端的要求越来越高。快速增长的数据访问量需要服务器具备大量并发访问的能力,服务器的处理和I/O能力成为了提供服务的瓶颈。在这样的背景下诞生了服务器集群。服务器集群在用户访问量超过单台服务器服务能力时,一般通过增加相同功能的服务器来满足海量用户的访问需求,在这种场景下如何将大量用户的访问流量分担到不同的服务器上成为决定整体业务服务质量的重要指标。
传统的方法虽然在一定程度上解决了负载均衡问题,但其有一定的局限性。基于DNS的负载均衡方案为服务器集群中的多个IP地址配置单个域名。当客户端请求域名服务时,域名服务器使用轮询方法为不同的客户端分配不同的服务器,以达到负载均衡的目的。基于DNS的负载平衡简单方便,但容易出现几个问题。例如,DNS服务器不知道服务器之间的区别,因此无法反映服务器的当前状态。基于传输层的负载平衡方案将客户端的请求直接发送到负载均衡服务器。负载均衡服务器将根据诸如LVS,VS/NAT解决方案将请求转发给后端服务器。尽管这种方法均衡了服务器负载,但它往往需要额外的硬件资源,从而也是昂贵的。
软件定义网络(SDN)是一种新兴的体系架构。该架构解耦了网络的控制平面和转发平面,控制平面负责生成转发策略并给应用层提供开发的接口,数据平面负责数据包的转发,使网络控制成为可直接编程的,从而实现了对网络流量的灵活控制。
传统的的负载均衡算法有轮询算法、随机算法、最小连接数算法等。轮询算法和随机算法为静态负载均衡算法,没有结合服务器的实时负载状态进行分流,负载效果较差。最小连接数算法为动态负载均衡算法,但最小连接数并不能准确反映服务器的实时负载状态,虽然较静态负载均衡算法效果有所提升但仍不够理想。部分动态负载均衡算法虽然对服务器的负载状态进行了监测,但是在进行监测时需要服务器参与计算,增加了服务器的额外负担,尤其是对于一个已经超负荷的服务器来说,将会产生恶性循环。此外,响应时间是用户体验最重要的因素,然而传统的服务器集群负载均衡方案由于受到硬件条件的限制,并不能真正利用服务器的响应时间进行负载均衡。
因此,在SDN架构下如何合理的对服务器的负载情况以及响应时间进行监测,并根据监测到的情况进行动态均衡的流量调度是当下研究需要解决的问题。
发明内容
发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种SDN架构下基于电梯调度算法的负载均衡方法。
技术方案:本发明的一种SDN架构下基于电梯调度算法的负载均衡方法,包括以下步骤:
(1)以时间T1为周期,通过控制器对交换机端口流量的统计分析获得每个服务器的当前负载ServerLoad和流量波动情况AverageLoad;
(2)以时间T2为周期,通过控制器获得服务器资源池中每个服务器的响应时间ServerResponseTime;
(3)结合每个服务器的负载情况及响应情况对每个服务器当前的性能进行评价,将评价结果记为WS,并按照WS对服务器分配电梯编号,此处电梯即是指服务器;
(4)当有客户端主机向服务器集群发出服务请求时,控制器收集请求流量的大小,并按照客户端主机访问服务器集群的顺序依次为客户端主机分配楼层编号,依次计算每个电梯在该楼层的平均载客量和往返时间,并将平均载客量和往返时间结合起来对每个电梯在该楼层的运输效率进行评价,将评价结果记为WC。通过控制器下发流表将流量请求引导至运输效率最高的电梯即服务器,楼层即是指客户端主机。
所述步骤(1)的具体过程为:
(1.1)控制器以时间T1为周期向交换机发送FLOW_REQUEST请求消息;
(1.2)交换机收到请求消息后向控制器回复STATISTICS_REPLY消息;
(1.3)控制器通过解析STATISTICS_REPLY消息得到与交换机所连服务器的当前负载信息ServerLoad,并将每一次获得的每个服务器的负载信息进行记录。选取计算流量波动情况的时间周期CollectPeriod,且CollectPeriod=k*T1,k为大于或等于1的整数,即选取的CollectPeriod是T1的正整数。计算在时间CollectPeriod内负载记录的平均值AverageLoad。
AverageLoad的计算公式为:
AverageLoad=(RecordLoad 1+RecordLoad 2+…+RecordLoad k)/k
其中,RecordLoad i表示每次记录的服务器当前负载的值,1≤i≤k,AverageLoad代表在时间周期CollectPeriod内负载记录的平均值,其在一定程度上反映了一段时间内服务器端流量的波动情况。
所述步骤(2)的具体过程为:
(2.1)控制器以时间T2为周期向交换机发送多个Packet-out消息并记录发送时间Tsend,Packet-out消息的数量与服务器集群中服务器数目相同,每个Packet-out消息均携带源地址为控制器IP且目的地址为各个服务器IP的数据包;
(2.2)交换机收到控制器发送的Packet-out消息后,解析出其携带的数据包后,再将解析后的数据包发送至其对应的服务器,此处的数据包的源IP地址为控制器的IP地址,目的IP地址为服务器的IP地址;
(2.3)各个服务器收到从控制器发送的数据包之后,模拟进行一次客户端请求(即是指模拟进行一次当客户端访问服务器时,服务器端的运行过程),完成请求后发送一个源地址为服务器IP且目的地址为控制器IP的数据包(该数据包的源IP地址为服务器的IP地址,目的IP地址为控制器的IP地址)。由于在交换机中没有源地址为服务器IP,目的地址为控制器IP的流表,因此交换机发送Packet-in消息到控制器,控制器通过解析Packet-in消息获得各个服务器数据包的到达时间Tarrive,这样控制器就能获得当前各个服务器的响应时间ServerResponseTime,获得响应时间:
ServerResponseTime=Tarrive-Tsend。
所述步骤(3)的具体过程为:
(3.1)对服务器集群中的每个服务器的负载情况及响应情况进行评价,评价公式为WS=ServerResponseTime*(ServerLoad*w1+AverageLoad*w2),
其中,
ServerResponseTime表示当前该服务器的响应时间;
ServerLoad表示当前该服务器的负载大小;
AverageLoad表示一段时间CollectPeriod内负载记录的平均值;
w1、w2表示权重因子,且w1+w2=1;
(3.2)根据服务器集群中每个服务器的WS的值从小到大进行排序,并依次分配电梯编号为1~N。
所述步骤(4)的具体过程为:
(4.1)当有客户端主机向服务器集群发出流量请求时,按照访问服务器集群的先后顺序为客户端主机分配楼层编号为1~M;
(4.2)控制器对请求流量的大小进行监测,并将测得的大小记作每一层的人数peoplePerFloor;
(4.3)依次计算每个电梯即服务器在该楼层的往返时间elevatorsCircuitTime和平均载客量avgElevatorLoad;
往返时间elevatorsCircuitTime的计算公式为:
elevatorsCircuitTime=(passFloorTime*maxFloor*2)+(waitFloorTime*floorServiced)
其中,passFloorTime表示模拟电梯经过一层楼的时间,maxFloor表示模拟一座电梯所能到达的最大楼层,waitFloorTime表示模拟电梯停等的时间,floorServiced表示模拟电梯停等的次数,elevatorCircuitTime表示模拟一座电梯总的往返时间,此处规定:所有电梯只在自己分配的楼层停等;
平均载客量avgElevatorLoad的计算公式为:
avgElevatorLoad=elevatorsCircuitTime*floorServiced*peoplePerFloor/rushHour
其中,peoplePerFloor表示客户端主机发出请求的流量大小,rushHour表示模拟完成运输一个高峰时间段所花费的时间,avgElevatorLoad表示模拟一座往返电梯的平均载人数;
(4.4)评价每个电梯在该楼层的运输效率,评价公式为:
WC=elevatorCircuitTime+(elevatorCircuitTime*elevatorsAvgLoad),
其中,WC越小,运输效率越高,将WC的最小值对应的电梯分配给该楼层;
(4.5)通过控制器下发流表将流量请求引导至该客户端主机所分配的服务器。
有益效果:与现有技术相比,本发明具有以下的优点:
(1)本发明考虑在实际场景中可能出现的用户访问量超过单台服务器服务能力,在通过增加相同功能的服务器来满足海量用户的访问需求时,如何将大量用户的访问流量分担到不同的服务器上的问题。本发明通过控制器对服务器负载信息及响应时间进行监测,并利用电梯调度算法中的“区域电梯分配”的思想,将SDN架构下的负载均衡问题抽象成为楼层分配电梯的问题,实现了对客户端流量的统筹调度及服务器集群的负载均衡。
(2)本发明考虑了结合服务器的实时负载情况以及响应时间进行负载均衡算法的设计。对于服务器来说,它的流量都是通过交换机端口传入的,所以在不需要服务器参与的情况下,控制器能够通过对交换机端口流量的统计分析获得交换机的负载情况;同时,本发明通过收集一个时间段内实时流量的均值来衡量该时间段内流量的波动情况。
(3)本发明还引入服务器的响应时间,通过记录控制器发送Packet-out数据包的时间以及在服务器端模拟完成一次客户端请求后由于返回的数据包在交换机中没有匹配流表产生的Packet-in消息的时间,对服务器的响应时间进行大致的衡量。通过引入多个衡量实时负载信息的值,使本方案所提出的负载均衡算法能够根据实时负载进行动态的流量调度。
(4)本发明通过结合实时负载信息和响应时间能够对服务器集群实现负载均衡,分流效果明显,提高了服务器集群的吞吐量。
附图说明
图1为本发明的整体流程图;
图2为实施例的功能模块示意图;
图3为本发明中步骤(1)的具体流程图;
图4为本发明中步骤(1)中控制器收集服务器负载信息的流程示意图;
图5为本发明中步骤(2)的具体流程图;
图6为本发明中步骤(2)中控制器收集服务器响应时间的流程示意图;
图7为本发明中步骤(3)和步骤(4)的具体流程图;
图8为实施例中仿真实验拓扑图;
图9为实施例中五分钟内服务器集群中各个服务器各个时间段的流量比折线图;
图10为实施例中五分钟内服务器集群中各个服务器收到的总流量柱状图。
具体实施方式
下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。
如图1所示,本发明的一种SDN架构下基于电梯调度算法的负载均衡方法,包含以下步骤:
(1)以时间T1为周期,通过控制器对交换机端口流量的统计分析获得每个服务器的当前负载ServerLoad和流量波动情况AverageLoad;
(2)以时间T2为周期,通过控制器获得服务器资源池中每个服务器的响应时间ServerResponseTime;
(3)结合每个服务器的负载情况及响应情况对每个服务器当前的性能进行评价,将评价结果记为WS,并按照WS对服务器分配电梯编号,此处电梯即是指服务器;
(4)当有客户端主机向服务器集群发出服务请求时,控制器收集请求流量的大小,并按照客户端主机访问服务器集群的顺序依次为客户端主机分配楼层编号,依次计算每个电梯在该楼层的平均载客量和往返时间,并将平均载客量和往返时间结合起来对每个电梯在该楼层的运输效率进行评价,将评价结果记为WC。通过控制器下发流表将流量请求引导至运输效率最高的电梯即服务器,楼层即是指客户端主机。
如图2所示,将本发明应用于数据中心网络系统中,该系统包括外部网络、网关、控制器、交换机集群和服务器集群。
步骤(1)的具体实施过程如下:
(1.1)控制器以时间T1为周期向交换机发送FLOW_REQUEST请求消息。OpenFlow协议提供了FLOW_REQUEST消息类型,该消息用于请求当前交换机的状态,包括流表、端口等信息;
(1.2)交换机收到请求消息后向控制器回复STATISTICS_REPLY消息。OpenFlow协议提供了STATISTICS_REPLY消息类型,该消息是交换机发送给控制器的消息,是对FLOW_REQUEST消息的响应;
(1.3)控制器通过解析STATISTICS_REPLY消息得到与交换机所连服务器的当前负载信息ServerLoad,并将每一次获得的每个服务器的负载信息进行记录。选取计算流量波动情况的时间周期CollectPeriod,且CollectPeriod=k*T1,k≥1。计算在时间CollectPeriod内负载记录的平均值AverageLoad。
AverageLoad的计算公式为:
AverageLoad=(RecordLoad 1+RecordLoad 2+…+RecordLoad k)/k
其中,RecordLoad i表示每次记录的服务器当前负载的值,1≤i≤k,AverageLoad代表在时间周期CollectPeriod内负载记录的平均值,其在一定程度上反映了一段时间内服务器端流量的波动情况。
步骤(2)的具体实施过程如下:
(2.1)控制器以时间T2为周期向交换机发送多个Packet-out消息并记录发送时间Tsend,消息数量与服务器集群中服务器数目相同。每个Packet-out消息分别携带着源地址为控制器IP,目的地址为各个服务器IP的数据包;
(2.2)交换机收到控制器发送的Packet-out消息后,解析出其携带的数据包再发送至其对应的服务器;
(2.3)各个服务器收到从控制器发送的数据包之后,模拟进行一次客户端请求,完成请求后发送一个源地址为服务器IP,目的地址为控制器IP的数据包。由于在交换机中没有源地址为服务器IP,目的地址为控制器IP的流表,因此交换机发送Packet-in消息到控制器,控制器通过解析Packet-in消息获得各个服务器数据包的到达时间Tarrive,这样控制器就能获得当前各个服务器的响应时间ServerResponseTime。获得响应时间的公式为:ServerResponseTime=Tarrive-Tsend。
步骤(3)的具体实施过程如下:
(3.1)对服务器集群中的每个服务器的负载情况及响应情况进行评价,评价公式为WS=ServerResponseTime*(ServerLoad*w1+AverageLoad*w2),
其中,
ServerResponseTime表示当前该服务器的响应时间;
ServerLoad表示当前该服务器的负载大小;
AverageLoad表示一段时间CollectPeriod内负载记录的平均值;
w1、w2表示权重因子,且w1+w2=1;
AverageLoad用来表示该服务器在一段时间内流量的波动情况。通过计算每个服务器的WS的值,结合服务器的当前流量、一段时间内流量的波动以及服务器的响应时间对服务器的实时性能进行评价,便于后续根据服务器的实时性能使用本发明所提出的方案进行分流。
(3.2)根据服务器集群中每个服务器的Ws的值从小到大进行排序,并依次分配“电梯”编号为1~N。
步骤(4)的具体实施过程如下:
(4.1)当有客户端主机向服务器集群发出流量请求时,按照访问服务器集群的先后顺序为客户端主机分配“楼层”编号为1~M;
(4.2)控制器对请求流量的大小进行监测,并将测得的大小记作“每一层的人数”peoplePerFloor;
(4.3)依次计算每个“电梯”(服务器)在该“楼层”(客户端主机)的“往返时间”elevatorsCircuitTime和“平均载客量”avgElevatorLoad。
“往返时间”elevatorsCircuitTime的计算公式为:
elevatorsCircuitTime=(passFloorTime*maxFloor*2)+(waitFloorTime*floorServiced)
其中,passFloorTime表示“模拟电梯经过一层楼的时间”,maxFloor表示“模拟一座电梯所能到达的最大楼层”,waitFloorTime表示“模拟电梯停等的时间”,floorServiced表示“模拟电梯停等的次数”,elevatorCircuitTime表示“模拟一座电梯总的往返时间”。规定:所有“电梯”只在自己分配的“楼层”停等。
“平均载客量”avgElevatorLoad的计算公式为:
avgElevatorLoad=elevatorsCircuitTime*floorServiced*peoplePerFloor/rushHour
其中,peoplePerFloor表示客户端主机发出请求的流量大小,rushHour表示“模拟完成运输一个高峰时间段所花费的时间”,avgElevatorLoad表示“模拟一座往返电梯的平均载人数”;
(4.4)评价每个”电梯“(服务器)在该”楼层“(客户端主机)的“运输效率”。评价公式为WC=elevatorCircuitTime+(elevatorCircuitTime*elevatorsAvgLoad)。WC越小,运输效率越高。将WC的最小值对应的”电梯“(服务器)分配给该”楼层“(客户端主机)。
(4.5)通过控制器下发流表将流量请求引导至该客户端主机所分配的服务器。
通过步骤(4.3)和步骤(4.4)的分流方式,能够结合服务器的实时性能状态更加高效的对流入服务器集群的流量进行统筹规划和分流。
实施例1:
下面通过仿真实验实施本发明的技术方案。
(1)使用Mininet创建了有4个性能相同的服务器,10个客户端的OpenFlow网络,如图8所示。服务器和客户端的IP及MAC情况如下所示:
h1:IP=10.0.0.1,MAC=00:00:00:00:00:01;
h2:IP=10.0.0.2,MAC=00:00:00:00:00:02;
…
h14:IP=10.0.0.14,MAC=00:00:00:00:00:14。
服务器集群对外暴露的虚拟IP为10.0.0.1。
(2)在控制器实施该方案后启动控制器。开启十个主机的虚拟终端,并使用命令连续不断的ping服务器集群对外暴露的虚拟IP 10.0.0.1来模拟网络高峰的情形。
(3)通过控制器端的数据采集,得到在上述高峰情况下五分钟内各服务器各个时间段接收到的流量比例,如图9所示。由实验结果可以看出使用电梯调度算法的各个服务器的流量比一直稳定在25%左右,服务器集群处于均衡的状态。
(4)通过控制器端的数据采集,得到在数据高峰情况下五分钟内各个服务器收集到的总流量,如图10所示。由实验结果可以看出各个服务器的流量大体在均值570.5KB附近,服务器流量极差为47KB,服务器集群中各个服务器的流量较为均衡,整个服务器集群有良好的吞吐量。
通过仿真实验和实验结果可以看出本发明的技术方案分流效果明显,能够提高服务器集群的吞吐量,实现了对客户端流量的统筹调度以及服务器集群的负载均衡。
机译: SDN架构及基于SDN架构的报文转发方法
机译: SDN架构及基于SDN架构的报文转发方法
机译: 基于SDN架构的工业通信流传输安全控制方法