【算法】资源角度考虑 新建服务器应该放到哪台宿主机-- 0103 更新

 

题来源,长期的工作经历中,我们发现有些宿主,内存剩余很多,但是磁盘却剩余不多了,有些正好相反。于是我设想通过程序来解决新建虚拟机时,宿主的选择问题。

 

   举例说明

  我设想4台资源情况不太相同的宿主机,宿主机的资源配比--磁盘内存 系数,也是可以计算的。虚拟机的需求是 5G内存,和80G 磁盘, 那么虚拟机需求的资源配比系数就是16 。表格第4行到第7行显示,我们可以判定 对于这个新建服务器的需求,宿主机1和2,相对来说磁盘是紧缺资源,反过来,宿主3和4 内存相对紧缺。用紧缺资源 除以对应的需求资源的值,得到一个紧缺资源倍数,也就是这台宿主剩下的资源可以,承载多少台类似的需求。本着 资源尽量平均的原则,以及宿主和需求的比例尽量匹配的原则,我粗略的设计了  紧缺资源倍数 作为分子 ,而 系数差异偏离程度作为分母,两者相除的简单公式(是在有点粗略)。经过表格中的展示可见,宿主2和宿主3 资源配比和需求的资源配比接近的情况下,宿主2 也能够承载更多, 18.75 / 0.0625 =300, 这个推荐值最高。所以 该虚拟机被推荐放到宿主2上。

 

 

===========================================================

1月3日更新的 python 基础算法 

代码版本 1 已经去除,下边是版本2 
# *-* coding:utf-8 *-*
# python 3

import numpy as np 

xen=np.array([[100,1000],[100,1500],[50,1000],[100,3000]])
vm_1=np.array([5,80])
temp=xen[0]-vm_1
print(xen[0]-vm_1)
# 后续要加入 xen资源大于vm资源需求的判断
def allocate(xen,vm,n):
    if xen[n][0]<=vm[0]:
        print('not enough MEM space!!!!!!,plz manual choose a XEN ')
    elif xen[n][1]<=vm[1]:
        print ('not enough Hard Disk Space !!!! ,plz manual choose a XEN')
    elif n<=4:
        xen[n]=xen[n]-vm
        print(xen[n])
        print('after allocate this vm , XEN resource are: ') 
        print(xen)
    else:
        print ('xen resource less than vm demanding resource!!! choose other one ')

#allocate(xen,vm_1,2)

# 后续添加 :检查 vm_1 的数据类型是否合规
#def arrange(vm_1):
#xen_ratio=np.array([[xen[0][1]/xen[0][0]],[xen[1][1]/xen[1][0]],[xen[2][1]/xen[2][0]],[xen[2][1]/xen[2][0]]])
# sort and return 
#vm_ratio = vm_1[1]/vm_1[0]

xen_score=[]
#"""
def choose(vm_1):
    xen_ratio=np.array([[xen[0][1]/xen[0][0]],[xen[1][1]/xen[1][0]],[xen[2][1]/xen[2][0]],[xen[2][1]/xen[2][0]]])
# sort and return 
    vm_ratio = vm_1[1]/vm_1[0]
    xen_score=[]
    for i in range(len(xen_ratio)):
        if xen_ratio[i]>= vm_ratio:
            print('choose MEM')
            key_resource=xen[i][0]
# 分子      紧缺资源就是内存,需要计算内存倍数      
            time_resource=xen[i][0]/vm_1[0]            
        else:
            print('choose HD')
            key_resource=xen[i][1]
# 分子      紧缺资源就是磁盘,需要计算内存倍数
            time_resource=xen[i][1]/vm_1[1]
#        print('time_resource is : %f'%time_resource)
##        print(time_resource)
# 分母,比例差异程度
        delta=abs(xen_ratio[i]-vm_ratio)/max(vm_ratio,xen_ratio[i])
#        print('delta is : %f'%delta)
##        print(delta)
# 分子除以分母,并写入队列
        score=time_resource/delta
        xen_score.append(score)
#        print('----score-----')
#        print(score)
# 获取最大值和位置
    n=xen_score.index(max(xen_score))
    print('you must allocate this VM to XEN            %s '%n)
    print(*xen_score)
    print ('------------------ over---------------')
    return(n)    


print('**************************************************************************')
allocate(xen,vm_1,choose(vm_1))
vm_2=np.array([10,1000])
allocate(xen,vm_2,choose(vm_2))


vm_3=np.array([10,100])
allocate(xen,vm_3,choose(vm_3))

allocate(xen,vm_1,choose(vm_1))

vm_4=np.array([5,200])
vm_5=np.array([20,100])
vm_6=np.array([80,800])
#  没有 前两个 检查 虚拟机 资源是否大于物理机现有的资源之前 ,出##现-20
vm_7=np.array([10,100])
vm_8=np.array([5,20])
vm_9=np.array([20,500])
vm_10=np.array([15,300])
vm_11=np.array([10,200])

allocate(xen,vm_4,choose(vm_4))
allocate(xen,vm_5,choose(vm_5))
allocate(xen,vm_6,choose(vm_6))
allocate(xen,vm_7,choose(vm_7))
allocate(xen,vm_8,choose(vm_8))
allocate(xen,vm_9,choose(vm_9))
allocate(xen,vm_10,choose(vm_10))
allocate(xen,vm_11,choose(vm_11))

 

这里 就是 偏离程度, min max ,以及 vm_ratio   和 xen_ratio[i] 的 选择会导致  匹配度有一些问题 ,但是 这次 是 整体结果不影响 

表中去的 条件判断 

min的情况:

max 的情况 :

 

 

--------------------------------  以上 ,1月 3日更新  

补充说明和其他想法:

a,宿主机磁盘资源可以分配90% 使用,并不是按照100%可以分配计算的。必须下表中的宿主1磁盘显示可以用1000G, 实际情况可能是 总共10,000G,可分配9000G, 在已经创建很多台服务器的情况下,实际分配了 8000G,也就是说,真实情况是一共剩余2000G ,只是我们为了安全起见,规定2000G磁盘,必须有1000G作为保留空间,用公式表示 :
free_HD= total_HD *90% - use_HD

b, 这里暂时忽略CPU分配阈值的计算,一方面是现有虚拟化技术支持CPU超分,比如40个CPU 我们可以分配给30个项目,其中每个项目分配4CPU ,这样CPU超分程度可以达到300%-100% =200%; 另一方面,就是现有基础平台环境下,经验显示cpu使用率很低,超分CPU,实际上不会影响到各个项目的正常运行

c,目前只对内存和磁盘,做这种类似“鸡兔同笼”式的分析,如果二维层面的却是验证可行,后续再推行到 包含CPU分配 ,以及网络带宽分配的问题上

d,之后一段时间,我准备将现有环境下,同一个网段的宿主机总体资源和 上边已经运行的虚拟机使用资源数据,用作程序参数,获得要给程序推荐的分配结果;另外, 按照新建虚拟机的不同的顺序,看看结果差异程度; 以及,涉及到虚拟机迁移场景中,程序的推荐是否合理

posted @ 2018-12-29 10:38  allen514519  阅读(122)  评论(0)    收藏  举报