发明内容
本发明实施例提供了一种虚拟机部署策略制定的方法,用于制定将多个虚拟机部署到多个物理机中的部署策略。本发明实施例还提供了与之相应的设备,以实现将最大流较大的虚拟机部署在通信代价较小的物理机中,从而更好地利用网络资源,提高虚拟机集群的性能。
第一方面,本发明实施例提供了一种虚拟机部署策略制定的方法,根据当前网络状态构造流量需求矩阵和网络代价矩阵,所述流量需求矩阵包含所述多个虚拟机中每个虚拟机与其他虚拟机之间的网络流量需求,所述网络代价矩阵包含所述多个物理机中每个物理机与其他物理机之间最短网络路径的通信代价;根据所述流量需求矩阵,计算出所述多个虚拟机中每个虚拟机与其他至少一个虚拟机之间流量需求的最大流;根据所述虚拟机之间的流量需求最大流和所述网络代价矩阵,获得将所述多个虚拟机部署在所述多个物理机中的部署策略,所述部署策略使流量需求的最大流较大的虚拟机部署在通信代价较小的物理机中。
在一种可能的设计中,根据所述流量需求矩阵的密度,选择采用并行方式或者串行方式根据所述流量需求矩阵计算出所述多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流。
在一种可能的设计中,根据所述流量需求矩阵的密度,确定所述密度是否满足预设的条件,如果是,则根据所述流量需求矩阵采用并行方式计算出多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流;否则,根据所述流量需求矩阵采用串行方式计算出多个虚拟机中每个虚拟机之间流量需求的最大流。
在一种可能的设计中,所述流量需求矩阵为n×n的矩阵,矩阵中非零元素个数q,确定所述密度是否满足预设的条件为:e>nlogn。
在一种可能的设计中,所述流量需求矩阵为n×n的矩阵,矩阵中非零元素个数q;定义流量需求矩阵的密度值d=q/(n×n);所述预设的条件为所述密度值d大于预先设定值。
在一种可能的设计中,将所述多个虚拟机部署在所述多个物理机中的部署策略可以是a)选择虚拟机之间的网络流量需求的最大流最大的两个虚拟机中的任意一个虚拟机,根据所述网络代价矩阵,选择物理机之间最短网络路径的通信代价最小的两个物理机中的任意一个物理机,确定将所述虚拟机部署在所述物理机中;b)选取一个已经确定部署的虚拟机A,获取所述与虚拟机A之间的网络流量需求的最大流最大的虚拟机B,确定将所述虚拟机B部署到可部署的物理机中与部署了所述虚拟机A的物理机通信代价最小的物理机中,重复b)步骤,直到所有的虚拟机均确定要部署到的物理机,从而获得将所述多个虚拟机部署在所述多个物理机中的部署策略。
在一种可能的设计中,获取确定部署了所述虚拟机A的物理机的剩余资源信息,如果所述物理机剩余资源足以部署所述虚拟机B,确定将所述虚拟机B部署在所述物理机中,如果所述物理机剩余资源不足以部署所述虚拟机B,则确定将所述虚拟机B部署在于所述物理机通信代价最小的其他物理机中。
在一种可能的设计中,并行方式计算最大流时,选择任意一个虚拟机作为中心节点,其他虚拟机作为与该中心节点相连接的叶子节点,构造一个星型树;启动多个线程,其中,a)每个线程选取所述最大流树中一个叶子节点,根据所述流量需求矩阵并行计算出所述叶子节点与与所述叶子节点相连接的节点之间的最大流,并根据所述最大流更新所述最大流树;所述每个线程重复a)步骤直到最大流树中全部叶子节点均被进程选取,从而构造出所述虚拟机流量需求最大流树;所述虚拟机流量需求最大流树包含了所述虚拟机与其他虚拟机之间流量需求的最大流。
在一种可能的设计中,所述叶子节点编号为2至n,所述步骤a)中选取的叶子节点为s,与所述叶子节点相连接的节点为t;所述根据所述最大流更新所述最大流树包括:根据所述最大流,将最大流标注在所述节点s与所述节点t的链路上,并得到所述节点s与所述节点t的最小割;依次判断编号大于所述节点s编号的其他叶子节点,若所述其他叶子节点与所述节点t相邻,且所述其他叶子节点与所述叶子节点s在同一个割集中,则删除所述最大流树中所述其他叶子节点与所述节点t之间的链路,增加所述其他叶子节点与所述节点s之间的链路。
在一种可能的设计中,构造网络代价矩阵时,获取物理机网络拓扑信息;根据所述物理机网络拓扑信息,获得所述多个物理机之间的最短路径信息,所述最短路径信息包括物理机之间的链路数量;根据所述物理机之间的链路数量和所述链路的链路带宽信息,确定所述多个物理机之间的通信代价;根据所述通信代价,构造网络代价矩阵。
在一种可能的设计中,根据所述最短路径信息和带宽状态信息,确定所述多个物理机之间的通信代价时,所述最短路径信息包括链路数量m和每条条链路的带宽C,所述链路带宽信息包含每条链路的剩余带宽b,所述物理机两两之间的通信代价R根据如下公式获得:
其中,bk为所述最短路径上第k条链路的剩余带宽,Ck为所述最短路径上第k条链路的带宽,ω1,ω2为预设的加权系数。
第二方面,本发明还提供了一种虚拟机部署策略制定的设备,本发明实施例提供了一种虚拟机备份装置,所述装置用于指定虚拟机部署策略,该装置具有实现上述方法中备端虚拟机行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。其中,数据处理模块用于用于根据当前网络状态构造流量需求矩阵和网络代价矩阵,最大流计算模块用于计算出所述多个虚拟机中每个虚拟机与其他至少一个虚拟机之间流量需求的最大流,最大流最小代价匹配模块用于根据所述虚拟机之间的流量需求最大流和所述网络代价矩阵。
又一方面,本发明实施例提供了一种制定虚拟机部署策略的装置,装置的结构中包括处理器,所述处理器被配置为支持装置执行上述方法中相应的功能。所述装置还可以包括存储器,所述存储器用于与处理器耦合,其保存必要的程序指令和数据。
再一方面,本发明实施例提供了一种计算机存储介质,用于存储为上述方面所述的装置所用的计算机软件指令,其包含用于执行上述方面所涉及的程序。
可见,根据当前网络状态构造流量需求矩阵和网络代价矩阵,并根据网络需求矩阵获得虚拟机之间流量需求的最大流,从而根据最大流和网络代价矩阵,获得将流量需求的最大流大的虚拟机部署在通信代价小的物理机中的部署策略。由于该部署策略使得流量需求的最大流大的两个虚拟机所在的物理机之间的通信代价尽可能的小,因此,可以减少虚拟机时间网络传输所需要的网络资源,从而节省了物理机的网络资源消耗,从而减少了物理机之间的网络流量和网络延时,提高了系统整体的资源利用率。
具体实施方式
本发明实施例提供一种制定虚拟机部署策略的方法,以实现根据当前网络状态动态制定出虚拟机部署策略,从而节省虚拟机之间网络传输所消耗的网络资源。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了方便理解本发明实施例,首先在此介绍本发明实施例描述中会引入的概念。
流量需求矩阵:根据网络拓扑环境、网络资源的分配以及网络应用的需求,虚拟机之间会产生不同的网络流量需求。网络流量需求是虚拟机之间所需要传输的数据流量的需求。在描述网络流量需求时,可以采用虚拟机之间的需要传输的数据流量的大小来进行描述,也可以采用传输所需数据流量的网络资源进行描述。存储有虚拟机网络拓扑中的虚拟机之间的流量需求的矩阵,称之为流量需求矩阵。可以理解的是,矩阵只是描述虚拟机之间流量需求的一种方式,根据相同或者相近的思想,可以采用二维数组、树形结构等多种其他的数据结构来描述所述流量需求,并起到与本发明中所采用的流量需求矩阵相同的作用。
网络代价矩阵:指网络拓扑中物理机之间网络通信代价所构成的矩阵。根据不同的网络拓扑环境和网络资源,网络拓扑中的物理机之间有不同的网络代价。网络代价是指两个物理机之间进行通讯时,所需要消耗的网络资源。衡量两个物理机之间的网络代价有多种方式,例如,可以通过两个物理机之间的网络路径所通过的交换机个数或者网络节点个数来衡量;也可以根据所经过的链路数量来衡量。在本发明中,还提供了一种通过最短路径和带宽状态信息来衡量通信代价的方法。可以理解的是,矩阵只是描述物理机之间网络通信代价的一种方式,根据相同或者相近的思想,可以采用二维数组、树形结构等多种其他的数据结构来描述所述网络代价,并起到与本发明中所采用的网络代价矩阵相同的作用。
流量需求的最大流:根据虚拟机之间的流量需求,可以求得两个虚拟机之间流量需求的最大流。由于在网络拓扑中,每个虚拟机可能与其他多个虚拟机之间存在流量需求,只根据虚拟机两两之间的流量需求不能够准确的判断出在网络中流量需求最大的虚拟机节点。因此,可以通过虚拟机之间流量需求的最大流来判断虚拟机作为网络节点时与其他虚拟机的流量需求的大小。具体的,在对虚拟机分别计算与其他虚拟机流量需求的最大流后,流量需求的最大流最大的两个虚拟机可以认为是在网络中流量需求最大的两个节点。
虚拟机部署策略:即将虚拟机部署到物理机中的策略。正如现有技术中所介绍,虚拟机的部署策略会影响到网络系统的整体资源利用。为了便于理解,结合图1中列举了一种不同虚拟机部署策略的情景。如图1所示交换机为10G能力的交换机,仿真主机(SimulatorHost)向虚拟机1发送9G的数据,虚拟机1将数据平均转发给虚拟机2、虚拟机3、虚拟机4,每个流量3G。现有技术中进行调度时发现每台主机资源都满足需求,因此随机选择一台主机,例如主机4部署虚拟机1,由于部署策略不能感知网络流量需求,这样放置实际会导致数据流量超过交换机2和交换机3之间的链路带宽(该链路需要承载从仿真主机到虚拟机1上的9G的流量需求,以及从虚拟机1到虚拟机3以及虚拟机4的分别3G的流量需求,总共流量需求为15G,超过了交换机所能承载的最大流量),即从而出现网络性能瓶颈。如果将虚拟机1和虚拟机4互换位置(则所述链路仅需承担虚拟机1到虚拟机2、虚拟机4分别3G的流量需求,总共流量需求为6G,在交换机最大流量承载范围内),就可以满足网络资源的需求。
结合图2,是本申请实施例中一种制定虚拟机部署策略的设备的系统结构图。所述设备部署在Openstack云计算平台上,OpenStack包含两个主要模块:Nova和Swift,Nova为虚拟服务器部署和业务计算模块。其中,本发明所述装置可以集成在融合调度器Scheduler中,用于根据业务输入的虚拟机资源请求、服务器的资源情况和网络拓扑,计算出虚拟机的最佳放置位置。融合调度器与硬件资源管理器Hardware Mgt相连接,硬件资源管理主要负责采集网络状态,以及服务器硬件资源信息、系统的网络拓扑信息,并将信息上报给融合调度器。融合调度器和硬件资源管理器可以以插件的方式集成或者拓展在Nova模块中。
需要说明的是,本发明实施例提供的方法可以应用于集成在网络设备上的特定装置,也可以由网络设备中的一个或多个模块所实现,或者由单独的网络设备实现且该网络设备连接于网络拓扑之中。
参阅图3,是本发明提供的一种制定虚拟机部署策略的方法,所述方法包括:
S301、根据当前网络状态构造流量需求矩阵和网络代价矩阵。
当前网络状态包括当前网络的网络拓扑信息、网络资源使用情况、虚拟机数量以及虚拟机网络流量需求。其中,网络拓扑信息可以通过外部进行设定或者通过软件定义网络(Software Defined Network,SDN)来获得,网络资源的使用情况例如链路带宽可以通过Openstack云计算平台的监控服务获得,或者通过SDN获得;虚拟机数量以及流量需求可以通过外部输入预先设定,也可以通过采集到业务规模和网络流量的关系,根据大数据进行预测虚拟机不同业务规模下虚拟机之间的业务需求流量。
流量需求矩阵是根据虚拟机的数量以及虚拟机之间的流量需求生成的。用来描述多个虚拟机中每个虚拟机与其他虚拟机之间的网络流量需求。
网络代价矩阵是根据网络拓扑信息和网络资源使用情况所生成的,用来描述网络代价矩阵包含所述多个物理机中每个物理机与其他物理机之间最短网络路径的通信代价。物理机之间的最短路径可以根据网络拓扑信息,通过Floyd算法、Dijkstra算法、队列优化(Shortest Path Faster Algorithm,SPFA)算法等现有算法计算得到。根据物理机之间的最短路径,获得该路径上的通信代价。在获得了一个网络拓扑中物理机之间两两的最短路径的通信代价即可得到网络代价矩阵。
前述中已经介绍,描述通信代价可以有多种方式。例如,在一种实现方式中,可以采用最短路径中的链路数量来作为通信代价;或者,可以通过链路所通过的交换机或者节点的数量来描述通信代价。
S302、根据所述流量需求矩阵的密度,计算出所述多个虚拟机中每个虚拟机与其他至少一个虚拟机之间流量需求的最大流。
根据流量需求矩阵中虚拟机之间的流量需求,可以计算得到虚拟机之间的流量需求的最大流。具体的,根据流量需求矩阵可以还原出虚拟机之间的流量需求图,即以每个虚拟机作为一个节点,虚拟机之间的网络需求作为节点之间链路的最大流量,从而计算两个节点之间的最大流。计算最大流的方法可以采用现有的最大流计算算法,如增广路算法(augment path)、预推进算法(push label)、推进与重标记算法(Push-Relabel)等,也可以采用本发明在后文中所提供的算法。
通过不同的算法计算或者以不同的数据结构存储的最大流,可以包含不同的信息。例如,将虚拟机之间的最大流计算出并存储在一个矩阵中时,每个虚拟机的最大流可以只包括该虚拟机与其他虚拟机之间的流量需求的最大流,由于并不是所有虚拟机之间都存在流量需求,即并不是所有虚拟机之间都存在流量需求的最大流。在矩阵中,非零元素对应的两个虚拟机则代表了该两个虚拟机之间存在流量需求最大流;也可以通过本发明在后文中所提供的最大流树的构建方法计算得到的最大流,存储在一个最大流树中,两个虚拟机节点之间存在连接关系即意味这两个虚拟机之间存在流量需求最大流。
S303、根据所述流量需求最大流和所述网络代价矩阵,获得将所述多个虚拟机部署在所述多个物理机中的部署策略。
根据虚拟机的流量需求最大流和网络代价矩阵中物理机之间的网络代价,按照流量需求的最大流大的虚拟机部署在通信代价小的物理机中的原则,将虚拟机部署到物理机中。流量需求的最大流大的虚拟机是两台虚拟机之间的流量需求最大流的值比较大,通信代价小的物理机是指两台物理机之间的通信代价比较小。流量需求最大流大的虚拟机部署在通信代价小的物理机中,即是指将流量需求最大流比较大的两台虚拟机尽可能放置在通信代价比较小的物理机中。可以理解的是,当两台虚拟机可以放置在同一台物理机中时,认为两台虚拟机所放置的物理机的通信代价是最小的。
具体的,在一种实施方式下,当放置第一个虚拟机时,可以选择所有虚拟机之间流量需求的最大流最大的两个虚拟机中的一个,将其放置所有物理机之间通信代价最小的两个物理机中的一个中。再判断该物理机是否能部署将另一个虚拟机,如果能,则将该虚拟机部署到该物理机中,否则,将该虚拟机放置到与该物理机通信代价最小的另一台物理机中。之后,再选取已经部署的一台虚拟机,选择该虚拟机流量需求的最大流值最大的一台未部署的虚拟机,将其放置到与已经部署的虚拟机所在的物理机通信代价最小的物理机中。重复该步骤直到所有的虚拟机都部署到了物理机中。
可见,在本发明实施例中,根据当前网络状态构造流量需求矩阵和网络代价矩阵,并根据网络需求矩阵获得虚拟机之间流量需求的最大流,从而根据最大流和网络代价矩阵,获得将流量需求的最大流大的虚拟机部署在通信代价小的物理机中的部署策略。由于该部署策略使得流量需求的最大流大的两个虚拟机所在的物理机之间的通信代价尽可能的小,因此,可以减少虚拟机时间网络传输所需要的网络资源,从而节省了物理机的网络资源消耗,从而减少了物理机之间的网络流量和网络延时,提高了系统整体的资源利用率。
下面结合更多的附图,对本发明的实施例做进一步的说明。
图4是本发明实施例提供的计算虚拟机之间流量需求的最大流的流程示意图。结合图4对所述最大流的计算方法进行说明。
S401、根据流量需求矩阵的密度,选择采用并行方式或者串行方式根据所述流量需求矩阵计算出所述多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流。
流量需求矩阵的密度,是指流量需求矩阵中的非零元素占矩阵中总元素个数的比例。流量需求矩阵的密度反映了需要部署的虚拟机之间的存在流量需求的虚拟机的比例,流量需求矩阵的密度越高,则说明需要部署的虚拟机之间存在流量需求的虚拟机的比例越高,从而使得虚拟机之间的流量需求关系越复杂。相应的,也会使得计算所述流量需求矩阵中的流量需求最大流更加复杂。由于并行方式和串行方式的计算效率和所需要的计算资源不同,因此,根据流量需求矩阵的密度来选择不同的执行方式,可以更有效的提高计算效率或者提高计算资源的利用率。
在一种实施方式中,根据所述流量需求矩阵的密度,确定所述密度是否满足预设的条件,如果是,则采用并行方式计算出多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流;否则,采用串行方式计算出多个虚拟机中每个虚拟机之间流量需求的最大流。
在一种具体的实现方式中,预设的条件可以获取所述流量需求矩阵为n×n的矩阵,矩阵中非零元素个数q,当e>nlogn时,则满足预设的条件。
在另一种具体的实现方式中,预设的条件可以根据获取所述流量需求矩阵为n×n的矩阵,矩阵中非零元素个数q来确定。定义流量需求矩阵的密度值d=q/(n×n),当所述密度值d大于预先设定值时,则认为所述密度满足了预设的条件。
S402、当判断采用并行方式时,根据所述流量需求矩阵采用并行方式计算出多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流。
并行方式计算虚拟机之间流量需求的最大流,是指应用算法来计算虚拟机之间的流量需求的最大流时,启用多个线程同时运行,从而提高算法的执行效率。对于采用不同的算法,执行并行方式的具体实施方式可以不同。例如,当以矩阵作为数据结构存储最大流时,可以启用多个线程,并行的计算每个虚拟机节点与其他节点之间的流量需求的最大流,并将计算结果添加到矩阵中。
在一种具体的实现方式中,可以采用最大流树作为数据结构存储虚拟机之间的流量需求的最大流。最大流树中每个节点代表一个虚拟机,节点之间的链路的值为虚拟机之间流量需求的最大流。在最大流树中,仅存在链路连接的节点之间才存储流量需求的最大流,因此相对于矩阵作为数据结构的方式而言,减少了最大流数据的数据量,从而减小了获取部署策略的复杂度。
并行方式构造存储虚拟机之间的流量需求的最大流的最大流树的实现方式可以为:每个线程选取所述最大流树中一个叶子节点,根据所述流量需求矩阵并行计算出所述叶子节点与相邻节点的最大流,并根据所述最大流的信息更新所述最大流树。所述每个线程重复该步骤直到最大流树中全部叶子节点均被进程选取,从而构造出所述虚拟机流量需求最大流树。
具体的,将叶子节点编号为2至n,选取的叶子节点为s,相邻节点为t;
根据所述最大流,将最大流标注在所述叶子节点s与相邻节点t的链路上,并得到所述叶子节点s与相邻节点t的最小割;依次判断编号大于所述叶子节点s编号的其他叶子节点,若所述其他叶子节点与所述相邻节点t相邻,且所述其他叶子节点与所述叶子节点s在同一个割集中,则删除所述最大流树中所述其他叶子节点与所述节点t之间的链路,增加所述其他叶子节点与所述节点s之间的链路。
下面结合图5给出并行方式构造虚拟机之间的流量需求的最大流的最大流树的一种更为具体的实现方式。
启动主线程;
S5001、主线程创建一棵星型树,以一个虚拟机作为中心节点,其他虚拟机作为叶子节点,并将叶子节点编号为2至n。
启动子线程,并行执行如下的步骤:
S5002、选取2至n个叶子节点中未被计算过的节点为源节点s,
S5003、判断S5002步骤能否取到未被计算过节点,若取不到则退出线程。
S5004、设置标志位flag为false。
S5005、判断flag是否为true,如果是,则认为所选取的节点s计算完成,,重新执行步骤S5002,否则执行S5006;
S5006、在星型树中选择一个与s节点相邻的节点为目的节点t,计算s与t之间的最大流,并由此得到最小割。
S5007、进入临界区,锁定星型树,使得其他子线程在锁定期间不能对星型树进行修改。
S5008、判断节点s与节点t是否相邻。如果s,t不相邻,则重新执行步骤S5005。由于并行计算时,星型树可能会被其他子线程修改,需要重新判定以确定s与t是否仍然相邻。
S5009、将最大流标注在星型树中s节点与t节点间的链路上
S5010、将flag标记为true。对于每一个编号大于源节点s的节点i,如果在星形树中t与i是邻居,但是i与s在同一个割集中,则去除星型树中i与t之间的链路,增加i与s之间的链路。
S5011、退出临界区,解锁星型树,重新执行步骤s5005。
S5012、当所有线程退出后,得到的树就是最大流树。
在本实现方式中,每个线程并行的计算所选取的节点与相邻节点的最大流,并在临界区中将星型树锁定后进行更新,从而在提高了计算效率的同时,保证了星型树不会并行修改而产生冲突。
为了方便理解,现结合图6,给出结合上述算法的一次具体的流程。如图所示,假设一共有6个虚拟机节点,节点之间双向流量需求均为1,则601为节点1-6之间的的流量需求图,该流量需求图对应的流量需求矩阵为一个6×6的所有元素均为1的矩阵。结合上述算法,构造出星型树如602所示。
选择一个非中心节点,节点2,计算节点2到与之相连接的节点的最大流,此处为与节点1的最大流,计算结果为3,并得到最小割集节点1、3、5和节点2、4、6;
选择编号大于2的节点,如果该节点与节点2是邻居,且在同一个割集中,则去除该节点与节点1的连接,增加给节点与节点2的连接。选择完全部节点后,可得到树603;
再一次选择未计算的非中心节点,直到全部节点都进过上述两个步骤的计算,可得到最后的最大流树604。
则在该最大流树中,相邻节点之间存在流量需求的最大流,可用于根据该最大流树进行虚拟机的部署。在后文中给出了根据该树进行部署的具体方式。
S403、当判断采用串行方式时,根据所述流量需求矩阵采用串行方式计算出多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流。
串行方式计算虚拟机之间流量需求的最大流,是指应用算法来计算虚拟机之间的流量需求的最大流时,启用单个线程串行的执行算法,从而节省系统的运算资源。
在一种具体的实现方式中,参考S402的介绍,可以采用最大流树作为数据结构存储虚拟机之间的流量需求的最大流。结合图7,给出了在一种可列举的方式中,串行计算构造存储虚拟机之间的流量需求的最大流的最大流树的一种更为具体的实现方式。
S601:创建一棵星型树,以第1个节点为中心,其他节点为叶子节点并编号2至n。
S602:依次选取编号为2至n的节点为源节点(s),重复做步骤S603和S604。
S603:在星型树中选择一个与s节点相邻的节点为目的节点(t),计算s与t之间的最大流,并由此得到最小割。将最大流标注在星型树中s节点与t节点间的链路上。
S604:对于每一个编号大于源节点s的节点i,如果在星形树中t与i是邻居,但是i与s在同一个割集中,则去除星型树中i与t的连接,增加i与s的连接。
将2至n个节点全部执行完上述S603、S604步骤,得到的树就是虚拟机之间的流量需求的最大流的最大流树。
本步骤的实现方式与前述实现方式中的原理类似,可以参照前述的流程进行理解。
在本实现方式中,只需要要一个线程即可完成最大流树的构建,对于流量需求矩阵密度比较小的情况,能够节约计算资源。
可见,在本实施例中,通过根据流量需求矩阵的密度,动态的选择串行或者并行方式计算储虚拟机之间的流量需求的最大流的最大流树,从而使得当流量需求矩阵的密度比较大从而造成算法复杂度比较高时,可以采用并行方式提高运算效率,减少生成最大流树所需要的时间;当流量需求矩阵的密度比较小时,相应算法复杂度也比较低,则可以采用串行方式构造最大流树,从而节省运算资源。
图8是本发明实施例中一种根据当前网络状态构造网络代价矩阵的实施例的流程图。
S801、获取物理机网络拓扑信息;
物理机的网络拓扑信息包含在前述的网络状态信息之中,可以通过外部进行设定或者通过软件定义网络(Software Defined Network,SDN)来获得。
S802、根据所述物理机网络拓扑信息,获得所述多个物理机之间的最短路径信息,所述最短路径信息包括物理机之间的链路数量;
最短路径信息是指两个物理机之间进行通信的最短路径上的路径信息。最短路径是指两台物理机进行通信时最小的物理路径。根据不同的判定标准,最短路径可能是不同的,例如,以链路长度作为路径长度时,链路长度最短的物理路径为最短路径,而以节点数作为路径长度时,链路中节点数最少的路径为最短路径。
S803、根据所述物理机之间的链路数量和所述链路的链路带宽信息,确定所述多个物理机之间的通信代价,根据所述通信代价,构造网络代价矩阵。
在一种实现方式中,所述最短路径信息包括链路数量m和每条条链路的带宽C,所述链路带宽信息包含每条链路的剩余带宽b,所述物理机两两之间的通信代价R根据如下公式获得:
其中,bk为所述最短路径上第k条链路的剩余带宽,Ck为所述最短路径上第k条链路的带宽,为预设的加权系数。根据所获得的物理机之间的通信代价构造通信代价矩阵。
图9是本发明实施例中一种根据所述流量需求最大流和所述网络代价矩阵,获得将所述多个虚拟机部署在所述多个物理机中的部署策略的方法的流程示意图。
S901、根据所述流量需求最大流,选择虚拟机之间的网络流量需求的最大流最大两个虚拟机中的一个虚拟机,根据所述网络代价矩阵,选择物理机之间最短网络路径的通信代价最小的两个物理机中的一个物理机,将所述虚拟机部署在所述物理机中。
具体的,根据最大流所存储的数据结构的不同,可以有多种选择虚拟机之间的网络流量需求的最大流最大两个虚拟机中的一个虚拟机的方法。例如,当最大流存储在最大流树的数据结构中时,选择最大流树中最大流值最大的链路上的两个虚拟机节点中的一个;或者,当最大流已矩阵方式存储,且保存了虚拟机两两之间的最大流时,可以选择两两之间最大流值最大的一组虚拟机中的一个,或者选择跟其他虚拟机之间的最大流值之和为最大的虚拟机。
S902、选取一个已经部署的虚拟机A,获取所述与虚拟机A之间的网络流量需求的最大流最大的虚拟机B,将所述虚拟机B部署到可部署的物理机中与部署了所述虚拟机A的物理机通信代价最小的物理机中。
重复S902步骤,直到所有的虚拟机均部署到物理机中,从而获得将所述多个虚拟机部署在所述多个物理机中的部署策略。
在一种实现方式中,在将所述虚拟机B部署到可部署的物理机中与部署了所述虚拟机A的物理机通信代价最小的物理机中时,可以获取部署了所述虚拟机A的物理机的剩余资源信息,如果所述物理机剩余资源足以部署所述虚拟机B,将所述虚拟机B部署在所述物理机中,如果所述物理机剩余资源不足以部署所述虚拟机B,则将所述虚拟机B部署在于所述物理机通信代价最小的其他物理机中。
前述实施方式可以有多重具体的实现方式。在选取一个已经部署的虚拟机A时,可以每次选取上一次完成部署的虚拟机,如果该虚拟机已经没有与之相连的未部署的虚拟机,则选择上上一次完成部署的虚拟机,由此,可以通过深度优先遍历完成全部虚拟机的部署;或者,可以在优先将与已经部署的虚拟机相连接的全部虚拟机部署完成后,从而通过广度优先遍历完成全部虚拟机的部署。或者,可以根据虚拟机之间的最大流关系,综合决策出能尽可能的将两两之间最大流更大的虚拟机部署到网络代价较小的物理机中。
图10是本发明上述实施例中所涉及的一种制定虚拟机部署策略设备1000的结构示意图。所所述装置部署在虚拟机网络平台上,可以是多个承载虚拟机的物理机中的一个,也可以是单独的物理机。物理机(或者称为服务器)包括计算机软件(包括操作系统、虚拟化软件等)和硬件(包括计算硬件,例如x86、ARM,存储硬件,网络硬件等)组成,每个计算节点上允许运行多台虚拟机。所述设备部署在Openstack云计算平台上,OpenStack包含两个主要模块:Nova和Swift,Nova为虚拟服务器部署和业务计算模块。其中,本发明所述装置可以集成在融合调度器Scheduler中,用于根据业务的输入的虚拟机资源请求、服务器的资源情况和网络拓扑,计算出虚拟机的最佳放置位置。融合调度器与硬件资源管理器HardwareMgt相连接,硬件资源管理主要负责采网络状态,包括集服务器硬件资源信息、采集或者注入系统的网络拓扑信息,并将网络状态上报给融合调度器。融合调度器和硬件资源管理器可以以插件的方式集成或者拓展在Nova模块中。
因此,所述设备可以独立的硬件的方式来实现,也可以是由物理机的处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于用户设备中。所述设备包括如下模块:
1001数据处理模块,用于根据当前网络状态构造流量需求矩阵和网络代价矩阵,所述流量需求矩阵包含所述多个虚拟机中每个虚拟机与其他虚拟机之间的网络流量需求,所述网络代价矩阵包含所述多个物理机中每个物理机与其他物理机之间最短网络路径的通信代价;
1002最大流计算模块,用于根据所述流量需求矩阵的密度,计算出所述多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流;
可选的,所述最大流计算模块具体用于:根据所述流量需求矩阵的密度,选择采用并行方式或者串行方式计算出所述多个虚拟机中每个虚拟机与其他虚拟机之间流量需求的最大流。
1003最大流最小代价匹配模块,根据所述流量需求最大流和所述网络代价矩阵,获得将所述多个虚拟机部署在所述多个物理机中的部署策略,所述部署策略使流量需求的最大流大的虚拟机部署在通信代价小的物理机中。
结合前述实施例,数据处理模块可以执行步骤S301、S701-S703的方法以及其可选的实现方式。最大流计算模块可以执行步骤S302、S401-S403、S5001-S5012、S601-S604的方法以及其可选的实现方式。最大流最小代价匹配模块可以执行S303、S801、S802的方法以及其可选的实现方式。
图11是本发明述实施例的一种计算机系统1100的另一种结构示意图。所述计算机系统在虚拟机网络中,用于根据业务的输入的虚拟机资源请求、服务器的资源情况和网络拓扑,计算出虚拟机的最佳放置位置。所述计算机系统包括处理器1101,以及与所述处理器相连接的存储器1102;
其中,所述处理器调用所述存储器中存储的指令以用于:
根据当前网络状态构造流量需求矩阵和网络代价矩阵,所述流量需求矩阵包含所述多个虚拟机中每个虚拟机与其他虚拟机之间的网络流量需求,所述网络代价矩阵包含所述多个物理机中每个物理机与其他物理机之间最短网络路径的通信代价;
根据所述流量需求矩阵,计算出所述多个虚拟机中每个虚拟机与其他至少一个虚拟机之间流量需求的最大流;
根据所述虚拟机之间的流量需求最大流和所述网络代价矩阵,获得将所述多个虚拟机部署在所述多个物理机中的部署策略,所述部署策略使流量需求的最大流较大的虚拟机部署在通信代价较小的物理机中。
在一些具体的实施例中,所述的处理器还可调用所述存储器中存储的指令以用于实现前述实施例中S301-S303、S401-S403、S5001-S5012、S601-S604、S701-S703以及S801、S802的方法以及其可选的实现方式的功能。
在实施例中,所述装置根据当前网络状态构造流量需求矩阵和网络代价矩阵,并根据网络需求矩阵获得虚拟机之间流量需求的最大流,从而根据最大流和网络代价矩阵,获得将流量需求的最大流大的虚拟机部署在通信代价小的物理机中的部署策略。由于该部署策略使得流量需求的最大流大的两个虚拟机所在的物理机之间的通信代价尽可能的小,因此,可以减少虚拟机时间网络传输所需要的网络资源,从而节省了物理机的网络资源消耗,从而减少了物理机之间的网络流量和网络延时,提高了系统整体的资源利用率。
同时,所述装置通过根据流量需求矩阵的密度,动态的选择串行或者并行方式计算储虚拟机之间的流量需求的最大流的最大流树,从而使得当流量需求矩阵的密度比较大从而造成算法复杂度比较高时,可以采用并行方式提高运算效率,减少生成最大流树所需要的时间;当流量需求矩阵的密度比较小时,相应算法复杂度也比较低,则可以采用串行方式构造最大流树,从而节省运算资源。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的数据传输方法、设备以及数据传输系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。