您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 云计算 > 正文

技术栈 | 浅聊著名的云计算虚拟化

发表于:2018-12-19 作者:卢柳 来源:启迪云计算

云计算(cloud computing),根据维基百科的解释为:是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。其中重点在于共享和按需。

在大多数情况下,我们不能完全利用到我们花费重金购买的物理设备的所有资源。

  • 如何将有限的计算资源做到共享和按需,发挥其最大的作用并攫取回我们在物理设备所投入的资金?
  • 如何将多个廉价的或老旧设备归集到一起,以发挥他们的剩余价值?
  • 如何将本地的设备共享给千里之外的同事?

云计算概念提出目的亦是包含了要解决这些问题的答案。

目前我们主要依靠虚拟化技术来解决将不可切割的硬件资源抽象和转换成可二次配置的单元,以实现更好的配置现有的计算、存储和网络等资源。可见现今的云计算落地方案基本上依靠于虚拟化技术。

虚拟化技术最早是IBM公司在上世纪60年代末所提出的,当时 IBM 公司为实现多用户对大型计算机同时交互访问而开发的一套被称之为虚拟机监视器(Virtual Machine Monitor 简称为 VMM)的软件。在现在的虚拟化技术中,VMM 是运行在硬件服务器和操作系统中间层的软件,它方便同时有多个相同或不同的操作系统和应用共享底层硬件基础设施。在云计算中常提及的Hypervisor与 VMM 具有相同含义,其实质是一种资源配置的管理技术。

虚拟化根据针对的对象不同还可分为平台虚拟化,应用程序虚拟化,资源虚拟化等。平台虚拟化是针对物理硬件及操作系统层面而言的,根据其实现方式又可分为完全虚拟化、半虚拟化、操作系统级虚拟化以及硬件辅助虚拟化等。

完全虚拟化(Full virtualization简称 FV )

是指虚拟机模拟了完整的底层硬件,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。在 CPU 的完全虚拟化实现机制中主要依靠了特权级压缩和二进制翻译(BT)技术等来实现的。

这些技术出现的原因和 CPU 实现机制有很大关联。CPU 对于指令进行了分级处理,对于高敏感指令有单独的执行区域称之为内核态,用户的代码不能直接访问内核态,而这些高敏感代码则需要执行在内核态中,客户操作系统是无法直接访问内核态的,所以需要依靠这些技术来解决客户机的高敏感指令的执行障碍。敏感指令在操作系统和硬件之间被捕捉处理,客户操作系统无需修改,所有软件都能在虚拟机中运行。使用完全虚拟化技术的公司及产品有:IBM CP/CMS,VirtualBox,VMware Workstation,Parallels, QEMU,Hyper-V 等。

Paravirtualization 简称 PV

类似于全虚拟化。它也是使用VMM分享存取底层的硬件,区别在于它的客户操作系统集成了虚拟化方面的代码。也就是说半虚拟化技术需要安装的客户机的操作系统要进行定制。这无疑是让用户使用受到很大的限制。使用该种虚拟化的架构曾有 Xen 等,但现在还使用这种虚拟化技术的已经不多。

操作系统级虚拟化(OS-level virtualization)

也有人称之为容器化,是操作系统自身的一个特性,它允许多个相互隔离的用户空间实例的存在。例如Parallels Virtuozzo Containers、OpenVZ、LXC以及类Unix系统上的chroot,Solaris上的Zone都是使用了该技术。这种虚拟化技术在当前应用还是比较多的,例如当前售卖 VPS 的商家中有部分就是使用的 OpenVZ 的架构;主流的 Docker 是基于 LXC 开发的一种容器工具;Android 手机的双域功能基本上多是基于 LXC 技术实现的。但是这种技术有很大的限制那就是客户机内核版本不能升级,操作系统类型也得和宿主机相同,这让用户对客户机系统和内核的选择受到了很大的限制,如前文所讲它的本质依旧是用户空间实体和组管理。但随着技术的发展,它在轻量化的应用场景上应该也有着不错的前景。

硬件辅助虚拟化(Hardware virtualization)

利用硬件(主要是CPU)辅助处理敏感指令以实现完全虚拟化的功能,客户操作系统无需修改。例如VMware Workstation,Xen,KVM产品或架构都是应用了该技术。当前市场中的几乎所有的主流硬件都是支持硬件辅助虚拟化技术的。VMM 技术的出现,可能要归功于 X86 架构从诞生时带来的问题——不支持虚拟化。

CPU 的演进一直兼容着之前的指令集,在 X86 架构的祖先 Intel 8086 诞生时没有设计虚拟化相关的指令,所以X86 架构在一段时间里都是不支持硬件虚拟化的。直至 Intel 在 2005 年发布了 IVT技术,如果你不细究也可以认为就是 VT-x 。Intel 的 VT-x 技术为 CPU 添加上了虚拟化技术的一个指令集,VT-x有助于提高基于软件的虚拟化解决方案的灵活性与稳定性。

通过按照纯软件虚拟化的要求消除 VMM 代表客户操作系统来听取、中断与执行特定指令的需要,不仅能够有效减少 VMM 干预,还为 VMM 与客户操作系统之间的传输平台控制提供了有力的硬件支持,这样在需要 VMM干预时,将实现更加快速、可靠和安全的切换。对应的 AMD 发布了相应的自家硬件辅助虚拟化技术称之为 AMD-V。

X86架构的硬件辅助虚拟化结合Linux全虚拟化解决方案已是当前主流成熟的虚拟化解决方案,这也是为什么我们在好多的云产品部署要求中可以看到 CPU 需要支持基于Intel VT /AMD-V以上X86指令集架构的原因。

我们对于云产品的选择上会去看它的出生,当前现状以及未来情况。就以上几点而言 KVM 无疑是比较好的选择。它虽生在了以色列,但是过继给了Red Hat这个开源社区的领军人物。之后Red Hat便舍弃 Xen开始全面扶持 KVM,从 RHEL6 开始 KVM便被默认内置于内核中。而且 KVM 也针对 Linux 平台做了优化。在性能上继承了Linux很好的性能和伸缩性;在性能方面,在15年的一篇关于KVM的性能测试的文章上描述KVM 的性能相比宿主机而言仅下降了1.5%以内。KVM拓展性也非常好,客户机和宿主机都可以支持非常多的 CPU数量和非常大的内存,可以过载使用 CPU和内存,还可借助 KSM 技术实现对内存的过量使用,且保证性能依旧非常不错。KVM 社区活跃,可见未来前景依旧不错。

由于KVM仅是一个简单的虚拟化模块,它的易用性并不高。这里我们可以使用OpenStack来作为它的一个上层建筑,用以更便捷的实施、部署以及使用。OpenStack适用于各种规模的集群环境,它丰富的功能几乎支持所有的虚拟化管理程序,不论是开源的(Xen与KVM)还是厂商的(Hyper-V与VMware),这个特色让它可以满足公共云和私有云用户及运营商的需求。

目前而言,有95%的OpenStack平台由 KVM驱动,这让它开箱使用时就能拥有不俗的表现。 OpenStack社区活跃,让其技术更易跟上科技发展的潮流技术,从而能够继续引领时代发展的步伐。所以说选择OpenStack作为云计算解决方案不失为一个明智的选择。