提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
实时负载均衡调度
实时负载均衡调度针对考虑数据中心虚拟机动态分配的实时负载均衡需求而设计,易于操作且性能良好。
1. 问题描述和模型建立
将虚拟机的分配建模成一种改进的区间调度问题,并且假设每个虚拟机请求的处理时间是固定的。如果一系列的请求1,2…,n,则第i个请求 对应的开始时间为si,结束时间为fi,容量需求为ci。另外还有以下前提假设:
1) 一般情况下,所有的数据都是确定的,时间被格式化为一个个时隙。比如将整个[0,T]时间段分割成了一个个长度为s0的时隙,时隙的数量则为k=T/s0。开始时间si和结束时间fi是整数时刻。因此,一个请求可以用时隙表示成(开始时间,结束时间)。
2) 所有的任务都是独立的。没有前置约束,除了开始时间和结束时间外。
3) 每个请求的容量的需求是一个属于(0,1]的正实数,物理机的容量已经标准化为1
4) 每个虚拟机被分配到某一台物理机上,当请求被整理时,中断这个请求并将它迁移到另一台物理机上是不被允许的,除非在特定指明的条件下。
定义(1) 传统的固定处理时间的间隔调度问题(ISP):
有一系列的请求1,2,…,n,第i个请求对应的开始时间为si,结束时间为fi,每个请求的容量需求为1,在那段固定的处理时间完全占用一台计算机的容量。
定义(2) 容量共享下的间隔调度(ISWCS):
和传统区间调度的唯一区别在于物理机可以被不同的请求共享,如果所有请求分配在同一台物理机上又未导致过载情况的发生。
定义(3) 容量共享下的间隔调度(ISWCS):
共享一致时隙间隔的ISWCS:时隙的一个子集中,任何时刻中容量需求都没有超过一台物理机的总容量,那么这些请求可以共享这台物理机的容量。
考虑有一系列相同的物理机(PM),以及n个虚拟机(VM)请求,每个请求有一个处理时间,负载均衡的目标就是将每个请求分配到物理机上,使得在所有物理机上的负载达到均衡的状态。定义makespan为调度的总时间,用来度量负载均衡。
定理(1)
在寻找最小化makespan的分配中,离线调度问题一般情况下都是NP-问题(子集求和问题)
定义(4)
在分配VM到PM的过程中,我们用A(i)表示分配到PMi的VM请求的集合,j是A(i)中有最大负载的虚拟机的ID
L
i
=
max
j
∈
A
(
i
)
(
c
j
×
t
j
)
L_i = \max_{j \in A(i)} (c_j \times t_j)
Li=j∈A(i)max(cj×tj)
其中,cj是VMj的CPU请求,tj是请求j的执行时间,负载均衡的目标是最小化所有PM的最大负载。
2. 负载均衡调度算法的度量指标
根据文献[1],文献介绍了一个综合负载均衡指标和一个负载均衡算法。
B
=
a
×
N
1
i
×
C
i
N
1
m
×
C
m
+
b
×
N
2
i
×
C
i
N
2
m
×
C
m
+
c
×
N
3
i
×
C
i
N
3
m
×
C
m
+
d
×
Net
i
Net
m
B = a \times \frac{N_{1i} \times C_i}{N_{1m} \times C_m} + b \times \frac{N_{2i} \times C_i}{N_{2m} \times C_m} + c \times \frac{N_{3i} \times C_i}{N_{3m} \times C_m} + d \times \frac{\text{Net}_i}{\text{Net}_m}
B=a×N1m×CmN1i×Ci+b×N2m×CmN2i×Ci+c×N3m×CmN3i×Ci+d×NetmNeti
其中,i是一个PM的编号,m是所选择基准参考物理机的ID,N1是CPU性能,N2是内存参数,N3是带宽参数,C和M是CPU和内存的利用率,D是硬盘的传送率,Net是网络吞吐量,a、b、c、d分别是CPU、内存、硬盘和网络的加权值,初始值为1。优化目标是找到拥有最小B值的PM来分配请求。在设计算法时要考虑以下参数:
1)PM资源,包括一台PM所提供的CPU、内存和存储数值
2)VM资源,包括一台VM所提供的CPU、内存、存储和开始结束时间(生命周期)
3)时隙:时间段0~T分成等长的部分,tk-tk-1
4)Capacity-Makespan,PM的最高平均利用率。因此所有PM的capacity-makespan可以表示如下:
capacity-makespan
=
max
i
(
L
i
)
\text{capacity-makespan} = \max_i (L_i)
capacity-makespan=imax(Li)
(就是典型的车间调度问题)
5)Skew(负载均衡效率)
skew
(
capacity-makespan
)
=
min
∑
j
∈
A
(
i
)
(
c
j
×
t
j
)
max
∑
j
∈
A
(
i
)
(
c
j
×
t
j
)
\text{skew}(\text{capacity-makespan}) = \frac{\min \sum_{j \in A(i)} (c_j \times t_j)}{\max \sum_{j \in A(i)} (c_j \times t_j)}
skew(capacity-makespan)=max∑j∈A(i)(cj×tj)min∑j∈A(i)(cj×tj)
一般来说,这个值越大,负载均衡效果越好。
定理(2)
使用优先级队列的数据结构,算法的计算复杂度时O(nlog2m),其中n是VM请求的个数,m是PM请求的个数
3.算法流程
输入:VM请求(一般为VM类型、开始时间,结束时间和需要容量等参数定义),请求i的开始时间和结束时间的区间标记正Ii
输出:将每个请求分配给PM,并同时分配请求的区间到PM
d=0;
for j= from l to n do
对于所有物理机,找到一个具有最小容量-跨度的,记录为PM_lowest
if若请求i仍能共享PM_lowest的容量,则分配该任务给它
else 找到下一个容量-跨度最小的物理机
d=d+1;
分配该任务到PM_d
endif
endfor
流程解释:
1) 最小容量-跨度,即capacity-makespan ,也就是虚拟机的最大负载。(个人理解:最大负载就是cpu请求和执行时间的乘积中的最大值,只要容量不超且符合时间约束就可以一直分配请求给该虚拟机。)
2) 分配完任务再对物理机的集合进行更新(优先队列),这一步时间复杂度应该为O(log2m)
[1] Design and implementation of load balancing in web server cluster system