云计算与虚拟化技术简介

本文简单介绍了云计算的概念以及虚拟化技术的基础,并介绍了虚拟化技术的几种实现方式和架构。

云计算的概念

在百度百科中,云计算的介绍是这样的:“云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。”

通俗地说,云计算就是服务商,将自己强大的计算资源进行抽象、并通过网络提供给用户使用,用户使用计算资源时,就不再是使用自己身边的那台计算机,而是在服务商的机房里,也就是用户看不见摸不着的“云”上。

根据云服务商提供的服务层次不同,云计算的服务模型可以分为三种服务。分别是IaaS(Infrastructure as a Service 基础架构即服务)、PaaS(Platform as a Service 平台即服务)、SaaS(Software as a Service 软件即服务),这三种云计算服务层次模型如下图所示

云计算服务层次模型

从这张图中可以清晰地看到,这个服务模型的分类是按照资源抽象的层级来划分的。从IaaS到PaaS再到SaaS,它们提供的服务越来越抽象,用户能控制的层级范围也越来越少。

  • SaaS,软件即服务

    由云服务商提供远程软件给客户使用,比如现在流行的云文档。户不需要自己去管理软件、数据,只是使用软件服务就好了。

  • PaaS,平台即服务

    由云服务商提供一个软件的运行时环境给客户使用,比如开发、运维应用程序的运行环境,用户负责维护自己的应用程序,但不能管理控制运行环境本身(操作系统、硬件,以及运作的网络基础架构等)。因此,这里的“平台”指的是软件的运行环境,即Runtime运行时。

  • IaaS,基础架构即服务

    将操作系统虚拟抽象出来提供给用户管理使用,用户可以完整地使用虚拟层以上的全部资源,比如操作系统、硬件、网络连接等,云服务商提供给用户的是一个完整的主机环境(虚拟的)。

虚拟化技术

基本概念

要实现云计算,就需要服务商能够把自己的计算资源虚拟抽象成很多份逻辑的计算资源,才能提供给很多用户去使用,这里面用到的关键技术就是虚拟化技术了。

如下图所示,在没有虚拟化技术以前,一个物理的主机上面只能运行一个操作系统,以及操作系统上的一系列运行环境和应用程序。而有了虚拟化技术之后,通过将物理主机虚拟成很多套虚拟的,逻辑上的物理主机,则可以向上支撑多个操作系统。因此通俗地说,虚拟化技术就是把一个物理主机,抽象成很多个逻辑上的物理主机的技术。

可见,虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。 from《KVM实战:原理、进阶与性能调优》

Hypervisor(VMM)

物力资源虚拟化示意

上图中的Virtual Machine Monitor(VMM) 即虚拟机监控器,就是为了实现虚拟化而引入的一个软件层,它也叫Hypervisor。它向下掌控实际的物理资源,向上呈现出N套逻辑的资源,让虚拟机误以为自己是在独享物理资源,实际上它只是独享了一套虚拟的、逻辑上的物理资源。为了实现这个操作,需要Hypervisor对虚拟机对物理资源的访问进行“偷梁换柱”——截取、重定向。Hypervisor运行的实际物理环境称为宿主机,它虚拟出来的逻辑主机称为客户机。

虚拟化技术的分类

软件虚拟化和硬件虚拟化

根据由软件还是硬件支持,可以将虚拟化技术划分为软件虚拟化和硬件虚拟化。

  • 软件虚拟化

    即使用软件模拟的手段来做VMM实现虚拟化。典型软件虚拟化实现是QEMU,在没有启动硬件虚拟化的时候,它可以通过软件的二进制翻译技术来实现虚拟化,仿真出目标平台客户机,它截取客户机的每一条指令,然后翻译成宿主机的指令交给真正的物理机去执行。这样的话运行效率就不会很高,而且实现的复杂度也较高,好处是可以呈现各种平台给客户计,只要有对应的二进制翻译支持就可以了。

  • 硬件虚拟化

    硬件虚拟化指的是,计算机硬件本身提供了虚拟化的支持,本身就可以让客户机的指令独立执行,这样就不需要Hypervisor去截获客户机的每一条指令再去执行。

    举例说明,x86架构有一个“non-root mode”去给客户机执行指令,这个“non-root mode”是一个受限制的物理执行环境,大部分时候客户机在这个环境中运行与原生系统在非虚拟化的物理环境中运行没什么两样,而VMM运行在“root mode”,拥有控制硬件平台的完整权限,仅在少数必要的时候,VMM会截取客户机的操作并作相应的处理,随后客户机返回并继续在“non-root mode”运行(这个过程感觉和“ring3通过系统调用陷入ring0最后再返回ring3”的过程挺相似的)。

    由此可见,硬件虚拟化的运行效率是远比软件虚拟化的运行效率要高的,而且可以大大简化Hypervisor的软件设计开发。Intel已经在自家x86 CPU上实现了硬件虚拟化的支持——即 Intel Virtualization Technology,简称Intel VT。

半虚拟化和全虚拟化

根据客户机是否知晓自己运行在虚拟环境中,是否需要作出修改配合VMM,可以讲虚拟化技术划分为半虚拟化(准虚拟化)和全虚拟化。

  • 半虚拟化(Para-Virtualization)

    半虚拟化也叫准虚拟化。它是让客户机意识到自己整运行在虚拟环境中,并做出一些修改以配合VMM,这就是半虚拟化。半虚拟化可以提升性能、简化VMM,而且不太需要硬件虚拟化的支持,从而使得VMM的软件设计是可以跨平台的。半虚拟化其实是减弱了VMM对客户机某些特殊指令截获的要求,而是通过对虚拟机操作系统进行修改(修改源代码、或装驱动),使其主动去通知VMM。典型的半虚拟化技术是virtio,使用virtio需要在宿主机/VMM和客户机里都相应的装上驱动。

  • 全虚拟化(Full-Virtualization)

    与半虚拟化相反的是全虚拟化,它坚持的目标是“客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里”,客户机的操作系统完全不需要改动,所有软件都能正常在虚拟机中运行。因此,全虚拟化需要模拟出完整的、和物理平台一模一样的平台给客户机以达到这个目标。
    在全虚拟化中,VMM主动去捕获客户机的敏感指令并处理,而不需要修改客户机,不需要客户机关注这个过程(与半虚拟化相反)。这增加了VMM的复杂度。

在硬件虚拟化兴起之前,纯软件实现的全虚拟化的性能完败于半虚拟化(VMM和客户机操作系统协同运作,效率当然更高),而在硬件虚拟化兴起后,硬件虚拟化辅助实现的全虚拟化全面超过了半虚拟化,但是以virtio为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性(比如硬件虚拟化是需要依赖具体硬件的支持),因此依然受到广泛的欢迎。

Type1和Type2虚拟化

从软件框架的角度上,根据VMM虚拟化层是直接位于硬件平台上,还是在一个宿主操作系统上,将虚拟化分为Type1虚拟化和Type2虚拟化,它们的软件架构分别如下图所示。

Type1虚拟化和Type2虚拟化

又或者阿里云大学课程-虚拟化技术入门中用到的一张图:

Type1虚拟化与Type2虚拟化

  • Type1虚拟化

    Type1的Hypervisor也叫native或者bare-metal Hypervisor。从图中可以看到,Type1的Hypervisor直接运行在硬件上,没有所谓的宿主机操作系统(或者说Hypervisor本身就是宿主机操作系统)。它们直接控制硬件资源以及客户机。典型的Type1 Hypervisor有Xen和VMware ESXi。

  • Type2虚拟化

    Type2的Hypervisor需要运行在一个宿主机操作系统上,如VMware Workstation或者VMware Fusion这种个人桌面虚拟机;又或者是运行在宿主操作系统里,比如KVM,以内核模块的形式存在于Linux内核中。

    这类Hypervisor通常就是宿主机操作系统中的一个应用程序,和其他应用程序一样,可以同时运行在宿主机操作系统上,都受宿主机操作系统的维护和管理,比如VMware Workstation是windows或者Linux中的一个应用程序,VMware Fusion是MacOS系统中的一个应用程序。客户机是在宿主机操作系统上的一个抽象,通常抽象为宿主机操作系统中的一个进程。

将KVM归为Type1或Type2是有争议的它是以内核模块的的形式加载进内核,与kernel同运行在内核层,因此可以认为它是将Linux kernel转变成了一个Type1的Hypervisor。而在逻辑上,它受制于kernel,所有对硬件资源的管理都是通过kernel去做的,所以归为Type2。

参考资料

《KVM实战:原理、进阶与性能调优》

阿里云大学 虚拟化技术入门

百度百科:云计算

End of article
感谢阅读 ♪(^∇^*)

相关文章

评论区