对于已经拥有云平台或者云GIS平台的用户来说,只需几分钟就可以创建一个自定义操莋系统和计算参数配置的虚拟机是一件非常容易的事情但是很少有用户关心云主机配置类型的选择,也就是说我创建的虚拟机需要多少個CPU和多少G内存多少存储,可能是刚刚从传统模式转换到云环境很多思想还是禁锢在传统模式下,我要的虚拟机配置越高越好
其实我們为什么使用云计算,主要还是希望将原来闲置的资源利用率进行大规模的提高通过更多的虚拟机参与工作提高工作效率,如果说我们還是沿用传统模式创建一个非常高配置的虚拟机或者对虚拟机的配置不“斤斤计较”,那基本还是走传统模式的老路无非是以前物理機资源利用率不高,现在是虚拟机资源利用率不高(当然了,我也不是说每个虚拟机我们都非常精确的抠配置)
由上图左可以看到我們由原来的宿主机+OS的传统模式,升级到宿主机+OS+Hypervisors+云平台的云化模式虽然我们可以提供资源利用率,创建很多VM但是我们VM的资源配置与传统模式的资源配置完全不是一个级别,也就是说我们VM的所谓的CPU+内存只能称之为vCPU+vRAM他是通过软件定义计算的技术将原来的物理CPU和物理内存进行虛拟化,相关的性能效率肯定不敌传统模式的性能
PS,插播一下基础知识关于CPU虚拟化
前面提到的hypervisor是在OS层之上的,主要包括KVM 、Xen、Esxi等例如OpenStack僦是基于KVM的,而且KVM已经内置到linux内核中那么如果通过KVM创建一个虚拟机,我们可以看到这个虚拟机其实就是一个qemu-kvm进程,与其他Linux进程已有被調度
每个虚拟机可能包含几个vCPU,所谓的vCPu就是qemu-kvm进程中的多个线程如上上图,右图所示
在这个例子中,宿主机有两个物理 CPU上面起了两個虚机 VM1 和 VM2。
从这个例子可以看出并不是我只有两个物理CPU,我的虚拟机只能使用2个CPU虚拟机的vCPU的总数可以超过物理CPU的数量,这个叫CPU的超配(OverCommit)这个在以前博客也提到过。
一般情况下OpenStack默认的CPU超配比例为1:16,也就是一个CPU Core可以超配16个vCPU当然,现在各大厂商默认的规则以Intel CPU为例,为了保证vCPU的性能默认按照1:4的比例超配比较合理。内存也可以超配1:1.5.
按照这个思路我们可以推算一个物理硬件配置环境下,可以提供多少个虚拟机(nCPU+nRAM)计算能力也要记得为OS和云平台预留资源,同时不要忘记CPU也可以超线程
对于超配需要注意的是,超配越多相关vCPU的性能越差,对于超配如果同一时刻,所有超配后的虚拟机的负载一般这是我们希望看到的,用超配生成更多的VM工作如果说所有超配过後的虚拟机还是满载运转,反而会影响整体的性能这个时候你需要为宿主机的资源进行扩容了。
回过头来我们继续说选择虚拟机的配置关于虚拟机的配置,我的建议你需要了解你虚拟机的操作系统以及在该操作系统中的应用,该应用的特性是计算密集型的,还是消耗内存的由于虚拟机的CPU不讲究频率,只讲究vCPu所以如果你的应用支持多进程操作,可以适当多提供vCPU数量否则,2个CPU即可对于内存,如果Windows应用4GB即可当然所有的建议都还需要测试来验证。
关于虚拟机的硬盘量如何选择呢
一般情况下,虚拟机的存储只需要为OS预留足够的存儲资源即可所有的数据建议都以块存储的形式提供,这样既可以保障数据的安全又可以保证块存储的扩容,而且如果应用非常耗费磁盤I/O也可以添加基于SSD的块存储提供IO读写效率。
不建议用户创建比较大的内置硬盘的虚拟机一方面我们时刻提醒自己,虚拟机是不可靠的随时可能有问题,一旦虚拟机崩溃有可能导致数据丢失另外,云计算经常会提到动态迁移如果你的虚拟机过大,势必会导致虚拟机遷移效率过低(当然如果共享存储不会有这个问题)
虚拟机的配置极限是多少?
一般情况下虚拟机的配置不可能超过宿主机的物理配置(包括超配),特别是不能超过内存资源最大虚拟机的消耗不能超过宿主机资源的75%,不然会有极大的风险