
原创 侵权必究
通过前面两篇文章,我们已经对于云计算,有了一个比较全面的认知和了解,包括云计算的特征、交付、部署、优势、驱动、架构、组件和应用等,根据云计算的组件,我们知道一个完整的云计算中心主要包括:计算资源及对应的虚拟化技术、存储资源及对应的虚拟化技术和网络资源及对应的虚拟化技术。
接下来我们就按照这个顺序,逐一讲解云计算的三大组件,首先就是计算资源及对应的虚拟化技术。
1.虚拟化技术的起源
虚拟化技术并不是一种全新的技术,恰恰相反,虚拟化技术早在20世纪60年代就诞生了,但是虚拟化技术诞生之初并没有得到广泛应用,直至20世纪70年代,大型机成为主要的计算资源时,因为大型机价格昂贵,如果同一时间只能单个用户使用大型机,对于大型机的资源是很浪费的,人们开始思考能不能多用户共享使用大型机以充分使用大型机资源。
多用户共享使用大型机以充分使用大型机资源,就是最早期的虚拟化技术,凭借该技术,虽然多个用户同时使用大型机,但是对于每个用户来说就好像独占使用大型机一样,虚拟化一词也是由此而来。
基于此,虚拟化技术的准确定义为:虚拟化技术是一种可以在一台计算机(服务器)上运行多任务(多用户),并且多任务(多用户)之间相互隔离的技术。
在大型机时代,虚拟化技术因为能够充分提高大型机的资源使用率而风靡一时,但是随着个人计算机PC的普及,虚拟化技术反而没落了下去,因为个人计算机价格便宜,完全可以一个任务/用户运行在一台计算机上,也就是One application per server的文化。
此外如果一个任务非常巨大,单台计算机难以完成,则可以借助于分布式计算,将巨型任务划分为多个小任务,每个小任务由一台计算机完成,这样海量计算机就可以协同完成该巨型任务,这实际就是集群技术,所以集群技术的定义是:集群技术指组织机构部署和管理的大量计算机(服务器)协同工作,完成特定的计算功能和服务,其性能远超单台计算机(服务器)的能力。
但是从20世纪90年代开始,随着计算机性能的飞速提升,在一台计算机上运行一个任务(一个用户)对于计算机资源无疑是很大的浪费,因为现代计算机完全可以多任务(多用户)运行。公司企业往往会在数据中心部署海量计算机(服务器)资源,但是这些服务器的资源利用率却非常低(因为一个服务器只运行一个任务),于是人们开始思考如何能够共享使用这些服务器资源,让一台服务器运行多任务(多用户)以提升服务器资源的使用率,这时虚拟化技术又盛装登场了。
所以,IT信息技术完成了天下大势合久必分分久必合的阶段性转变,从最初的大型机集中计算到中期的个人计算机分布计算,再到现代的数据中心服务器集中计算,虚拟化技术也是一路浮沉,但是无论如何,虚拟化技术受到了越来越多的关注,因为它可以极大提升服务器的资源使用率。
最后说明一点,以上描述中反复提到了计算机和服务器的概念,这其实是等价的概念,计算机分为大型机(大型计算机)、中型机(中型计算机)、小型机(小型计算机)和微型机(也就是个人计算机),而服务器可以是大中小三型其中任何一种,因为大型机和中型机价格昂贵,公司企业一般选择小型机或个人计算机,作为服务器使用,所以对于计算机和服务器,这两个概念不需要严格区分。
2.池化技术的流派
在上一段里,我们已经了解了虚拟化技术以及集群技术,实际上无论是虚拟化技术还是集群技术,都属于池化技术,只是看任务大小,灵活选择虚拟化技术或者集群技术,他们的关系是这样的:
如上图所示,如果是小型任务,该任务并不会占用服务器太多资源,一台服务器可以同时运行多个任务,这时可以采用虚拟化技术中的虚拟机虚拟化或者容器虚拟化,将每个小型任务放在一个虚拟机(或容器)里运行,多个小型任务放在多个虚拟机(或容器)里运行,以充分提高服务器资源使用率。
如果是中型任务,该任务可能刚好需要占用一台服务器资源,则可以直接使用单机运行该任务,即该服务器只运行该任务。如果是大型任务,一台服务器不足以运行该任务,则可以使用分布式计算和集群技术将大型任务划分为多个小任务,每个小任务由一台计算机完成,这样海量计算机就可以协同完成该巨型任务。
一个比较有意思的现象是,几乎所有人都听过虚拟化技术,但是对于集群技术却所知甚少,这是因为绝大多数计算任务都是小型任务,几乎所有公司企业的计算任务都是小型任务,所以绝大多数公司企业更加需要的是一种虚拟化技术,把一台服务器虚拟化为多个虚拟机(或容器),将多个小型任务放到虚拟机(或容器)内运行,以充分提高服务器资源使用率。
但是也有公司需要处理大型任务,比如某是提供网络搜索服务的,但是每一次网络搜索都是一个大型任务,因为需要搜索整个Internet的网络资源,还要按照相关性&准确性将搜索结果呈现给用户,这时就需要借助集群技术完成网络搜索服务。
此外,还有一些典型任务本身就是大型任务,比如大数据分析,需要分析海量数据,这样的任务,单台服务器肯定很难完成,也需要使用集群技术和分布式计算,大名鼎鼎的Hadoop就是一个分布式计算平台,它使用的是名为Map-Reduce的方法,Map将大型任务划分为多个小任务,Reduce将多个小任务的执行结果汇总,汇总为大型任务的执行结果。
3.X86架构
说到虚拟化技术,就少不了提到一个关键名词:X86架构,目前的虚拟化技术主要是针对X86架构的虚拟化技术,因为通用服务器基本都是X86架构的,即在X86平台基础上,虚拟化多个虚拟机(或容器)以运行多任务(多用户)。
所以在讲解具体虚拟化技术前,有必要先了解下X86架构,这个架构定义了4种级别来实现和硬件资源的交互,级别越低,优先级越高,也就越接近硬件;一般来说,操作系统运行在级别0,也就是离底层硬件最接近,可以直接调用底层硬件资源,而设备驱动运行在级别1和2,应用程序运行在级别3。
4.虚拟化技术的分类
虚拟化技术类别众多,主要分为如下几类虚拟化技术,包括:
全虚拟化:在全虚拟化中,虚拟化层位于级别0,和硬件直接交互,客户操作系统(Guest OS)运行在虚拟化层之上(级别1),所以客户操作系统不能直接调用底层硬件资源,客户操作系统发出的相关指令,会首先被虚拟化层截取翻译后再发给底层硬件。
全虚拟化的特点是,运行在虚拟化层之上的客户操作系统,不需要进行任何修改就可以直接运行,采用全虚拟化方案的虚拟化技术有:VMware的ESXi技术以及Linux的KVM/QEMU技术。
半虚拟化:在半虚拟化中,客户操作系统和虚拟化层都运行在级别0,都可以和硬件直接交互,在全虚拟化方案中,因为客户操作系统发出的指令都需要经虚拟化层转化后再发给底层硬件,这个过程不可避免的产生了一定的开销,而这个开销对于一些时延敏感性应用是致命的。
所以借助半虚拟化方案,客户操作系统利用Hypercall技术直接与底层硬件交互,以完成一些时延敏感性应用,同时仍然借助虚拟化层完成其它非时延敏感性应用。
半虚拟化方案虽然解决了全虚拟化方案必然产生延迟开销的问题,但是半虚拟化方案中,各客户操作系统之间是相互感知的,所以客户操作系统需要进行修改才能运行在半虚拟化方案中,这无疑增加了半虚拟化方案的实施难度,采用半虚拟化方案的虚拟化技术主要是XenServer。
硬件辅助虚拟化:x86芯片制造商(Intel和AMD)为了更好的支持虚拟化方案,将虚拟化技术(Intel-VT和AMD-V)直接集成到了芯片内部,使得底层芯片在虚拟化方案里可以提供更高的性能和吞吐量,硬件辅助虚拟化无疑是全虚拟化方案的福音;
之前讲解全虚拟化方案提到过,全虚拟化方案的缺点就是因为客户操作系统发出的指令都需要虚拟化层截取翻译,会因而产生开销,降低应用程序的运行效率,但是随着硬件辅助虚拟化技术(Intel-VT和AMD-V)的推出,全虚拟化方案的效率问题得到了全部解决,所以全虚拟化结合硬件辅助虚拟化的方案得到了越来越多的使用。
操作系统级虚拟化:这种虚拟化方案很特别,它不是全虚拟化或者半虚拟化那样,不同任务运行在不同客户操作系统内,而是所有任务都共享运行在一个操作系统内,但是这个操作系统需要确保不同任务之间的相互隔离,使得不同任务之间相互不感知,就好像运行在系统内一样。
因为操作系统需要确保不同任务之间的资源隔离和相互不感知,所以操作系统需要进行修改,这种虚拟化方案就是容器虚拟化方案,目前主要技术有:Linux容器,和Docker。
总得来说,目前主要是三类虚拟化技术方案:全虚拟化 + 硬件辅助虚拟化、半虚拟化和容器虚拟化,其中全虚拟化原本存在效率有损耗的缺点,但是借助硬件辅助虚拟化之后,效率问题得到全面解决,所以全虚拟化 + 硬件辅助虚拟化方案几乎没有缺点,而半虚拟化需要修改客户操作系统,容器虚拟化也需要修改操作系统,但是容器虚拟化也有其优点,后续再详细讲解。
5.虚拟化层(Hypervisor)分类
在上述虚拟化方案(除去容器虚拟化)里不难发现,实现虚拟化最重要的组件是虚拟化层,虚拟化层也被称为VMM(Virtual Machine Manager,虚拟机管理器)或者Hypervisor(虚拟机管理程序),现在一般都称为Hypervisor,所以后续我们也统一使用该叫法。
Hypervisor主要分为两个类型,如下:
Type-2 Hypervisor:该类Hypervisor运行在宿主操作系统(Host OS)之上,这类Hypervisor实现简单,著名的开源虚拟化方案KVM就是使用的Type2-Hypervisor,因为KVM采用的是全虚拟化+硬件辅助虚拟化方案,结合Type2-Hypervisor,KVM结构如下:
Type-1 Hypervisor:该类Hypervisor直接集成了宿主操作系统,不再需要底层操作系统,可以直接和底层硬件资源交互,优点是去除底层操作系统,直接和底层硬件交互效率高,缺点是这个Hypervisor因为需要集成宿主操作系统以及设备驱动程序,所以代码复杂。
著名的XEN虚拟化方案就使用的Type1-Hypervisor,因为XenServer采用的是半虚拟化方案,结合Type1-Hypervisor,XenServer架构如下:
综上,两大开源虚拟化方案KVM和XEN,前者使用【全虚拟化+硬件辅助虚拟化】和【Type2-Hypervisor】,后者使用【半虚拟化】和【Type1-Hypervisor】。
因为【半虚拟化】相较于【全虚拟化+硬件辅助虚拟化】需要修改客户操作系统,而【Type1-Hypervisor】相较于【Type2-Hypervisor】需要集成宿主操作系统,所以XEN虚拟化方案实施难度要远远高于KVM,同时KVM借助硬件辅助虚拟化,效率上和XEN实际不相上下。
