相关资料已经足够多了,网上其他的文章多数年代久远,本文试图换个角度看虚拟化。


在虚拟化架构层面,分为两种,裸金属和寄居式。

在虚拟化技术层面,分为三代,指令翻译(模拟)、OS辅助和硬件辅助


第一代  vmware


vmware不多说,是最早的x86虚拟化厂商,是传统企业虚拟化领域的霸主。凭借第一代虚拟化的核心技术:指令翻译,这样的黑科技风靡一时,技术成熟稳定,非开源,性能较好,vmware vsphere是典型的裸金属架构虚拟化技术。


vmware成功之处在于起步早,产品体验好,深入人心,生态完善。爆款vmware workstation 是IT技术人桌面虚拟化首选,不会vmware都不好意思说自己是搞IT的。


vmware的缺点是免费产品阉割严重,商业授权昂贵,也不符合软件行业的开源趋势,并且随着云计算市场的膨胀,企业虚拟化市场逐渐萎缩虚拟化技术经过指令翻译、OS辅助,硬件辅助三代发展,硬件辅助虚拟化技术已经完全成熟占据主流vmware的技术优势不再


跟微软类似,vmware很可能会逐渐没落。不同之处在于,微软是个胖子,大力改革,可能在别处获得新生从而成功转型。而vmware专耕一处,转型可能性比较小。


第二代  Xen


xen是一个开源虚拟化软件,以第二代虚拟化核心技术:半虚拟化起家,目前同时支持两种虚拟化技术,包括半虚拟化和全虚拟化。


所谓半虚拟化,也叫超虚拟化,或OS辅助虚拟化,通过定制的Linux内核可以更好的利用CPU资源,避免完全虚拟化带来的损耗,所以性能比全虚拟化要好。因此xen的半虚拟化必须对客户机操作系统进行修改,出于竞争关系,这通常被宣传kvm优越性的舆论认为是一个缺点。其实xen的半虚拟化可以近似看作是一种原始的容器技术,docker也需要对操作系统进行显性的修改,并没有人认为这是缺点,因为docker发明了配套的镜像和仓库。所以从现在看,需要对客户机操作系统进行修改,并不能算是xen半虚拟化的缺点。xen的半虚拟化真正的缺点是隔离不够彻底,不够安全。每次xen发生的重大漏洞,几乎都与半虚拟化有关。docker将容器发扬光大,也同样面临不够安全的问题。


xen的全虚拟化,与vmware的重要区别是,客户操作系统的CPU指令是硬件辅助模拟出来的,而非指令翻译的来。


xen在架构上属于裸金属虚拟化,hypervisor直接运行在硬件之上,管理硬件资源。xen 的hypervisor管理程序被称为dom0,实际上一个特权虚拟机,负责调度底层的hypervisor和转发特权指令。其他普通虚拟机称为domU。微软的hyper-V技术跟xen架构高度相似,至今被认为是微软借与思杰技术合作而抄袭得来。另外,在CPU性能普遍过剩的年代,xen全虚拟化与号称高性能的kvm的单实例性能不相上下,差距在10%以内甚至更少,xen甚至因为架构原因在多实例情况下的稳定性上更有优势。对完全虚拟化的支持,表明xen试图向第三代虚拟化技术(硬件辅助)进化。


与裸金属架构不同的另一种架构是寄居,即操作系统嵌套,目前所有的桌面级虚拟化软件都是寄居架构。通常认为,裸金属虚拟化性能和稳定要胜过寄居式虚拟化技术。因为裸金属虚拟化下的hypervisor更精简,专为虚拟化而生。


一个需要勘误的是,xen比kvm稍晚进入linux内核。并不是网上所说kvm是内核模块,而xen不是。但xen的架构决定xen只能部分进入linux内核,也就是dom0的部分。


xen当时在整个虚拟化领域的实力,虽然不及vmware,在企业虚拟化市场也不算太成功,高峰时期份额在15%-20%左右,但是凭借开源的优势,另辟蹊径开辟了vps以及稍后的云计算领域。早期的vps厂商、谷歌、亚马逊、阿里云等巨头都曾是xen大客户,都运行着数以百万计的实例,xen高峰时期的市场占有率在90%-95%。


xen 是开源虚拟化的先锋,起源很早,当时世界上开源虚拟化技术几乎没有,白茫茫一片,intel VT技术也远未普及。

于是xen自身实现了一整套虚拟化生态,包括指令模拟转发,设备模拟,资源调度等等。随着技术的发展,开源界先后出现了qemu、libvirt等优秀工具后,xen没有及时调整,导致包袱越来越大,代码难以维护。每次xen漏洞爆发后,损失的不光是声誉,还有市场份额。


另外,思杰并不是一个很好的技术领导,总在商业化和开源之间摇摆,手中的王牌xen/xenserver以及cloudstack都被悉数败光,在红帽的强力宣传下,于是kvm 逐渐崛起,xen败局已定。


第三代  kvm


kvm是第三代虚拟化技术,核心是硬件辅助虚拟化,架构特点是分工明确,类似web架构中的LAMP。CPU虚拟化由intel硬件提供支持,设备模拟由qemu-kvm负责,libvirt负责网络和存储,linux kernel负责资源调度。kvm是近年来主流的虚拟化技术。


kvm是一种典型的寄居式的全虚拟化技术,得益于红帽的深厚的内核功底和领导能力,经过多年优化,目前是市场上性能最好也最被看好的虚拟化技术。kvm也顺势成称为openstack的首选hypervisor和一等公民。


与xen不同,kvm是专属Linux的虚拟化技术,kvm虽然有寄居架构的劣势,但解耦的非常好,在非常简单灵活的同时,又能有针对性的优化,linux kernel又非常成熟健壮,所以整体稳定性和性能都非常好。kvm的崛起离不开红帽的持续投资和身体力行的强力推荐,也有政治的成分,据称linus大神不喜欢xen运行在kernel 下面。


kvm也存在缺点,严重依赖Intel VT/AMD-V技术,寄居架构缺陷不再多说,架构分散,细节对技术人员的要求也更高。技术不错但缺乏产品性,没有对标vmware vcenter或xenserver这样的产品,所以对企业虚拟化不友好。kvm很少单独使用,通常是作为组件被其他产品集成,管理工具也都比较重型,最典型的就是openstack。


目前kvm的市场份额日新月异,尤其是在日益膨胀的云计算领域,谷歌、亚马逊、阿里等巨头纷纷转向kvm,超越取代xen是迟早的事情。


(vmware/xen/kvm的完全虚拟化是针对CPU而言,出于性能考虑,在网卡和存储上大量使用半虚拟化或硬件透传技术)


第四代 docker


讲完虚拟化技术上的三代,接着讲虚拟化架构上的创新。我将它“看作”是虚拟化技术上的第四代。


前面讲过,通常认为,裸金属架构会比寄居架构性能和稳定性要更好。难道寄居架构就真的不堪一击了吗?


容器技术,也被看作是一种轻量级虚拟化技术,或者说是另类的虚拟化技术,也符合广义上的虚拟化含义,它是天然的寄居架构。容器技术经过发展多年也十分成熟稳定,采用软件隔离代替硬件模拟,性能完爆传统虚拟化,docker的持续火爆让人们对容器刮目相看。docker无论在可移植性,性能,自动化等方面体现出的巨大优越性,颠覆了传统的部署方式,可以极大提高生产力。与之配套的k8s编排引擎,更是将docker的自动化推向了新的高度。


docker的缺点在于隔离较差,安全性堪忧,但并不妨碍人们对效率的追求,目前kata-container项目正在试图融合传统虚拟机和容器的优势,我们拭目以待。