上文写了一篇关于计算机操作系统的文章了解计算机操作系统

为什么要了解计算机操作系统呢?是为了更好的理解虚拟化,也是好奇吧。
 
 
下面进入正题:
 

什么是虚拟机?

 
虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于虚拟机这个软件所创建的环境来操作其它软件。虚拟机(VM)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。
 
目的,模拟计算机系统环境
 

虚拟机比较

下列的软件产品可以用来虚拟硬件,故可用于各种操作系统之上。 
下图截自维基百科虚拟机的介绍,只截图了一部分,所以很多公司都开发了自己的虚拟机软件。

 

最知名的应该是VMware了,我们公司XEN和KVM都用过,换底层一般前端感触不是很深。

由于需要调底层接口,后端的感触应该更深。

通过上表,最后一项,私有也就是需要付费的,免费的功能会很少,我们公司用的都是GPL,即自有软件,即开源的。

 

什么是虚拟化?

虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

虚拟化技术是一个广义的术语,根据不同的对象类型可以细分为:

  • 平台虚拟化(Platform Virtualization):针对计算机和操作系统的虚拟化。
  • 资源虚拟化(Resource Virtualization):针对特定的系统资源的虚拟化,如内存、存储、网络资源等。
  • 应用程序虚拟化(Application Virtualization):包括仿真、模拟、解释技术等,如 Java 虚拟机(JVM)。

这里我们主要讨论的是平台虚拟化。

1960 中期,IBM 在 Thomas J. Watson Research Center (NY) 进行 M44/44X 计算机研究项目。M44/44X 项目基于 IBM 7044(M44)实现了多个具有突破性的虚拟化概念,包括部分硬件共享(partial hardware sharing)、时间共享(time sharing)、内存分页(memory paging)以及实现了虚拟内存管理的 VMM。

 中期发展的类型 I 和 类型 II跳过

直到上世纪 80~90 年代,Intel 公司(戈登·摩尔)提出了摩尔定律,Windows、Mac 等 PC(Personal Computer)电脑被广泛使用,Wintel 联盟势如破竹,还出现了神一般的 Linux 服务器操作系统。

种种原因,到底是 x86 赢得了时代的青睐,成为了服务器的行业标准。或许在那时 Intel 就已经开始思考为何 “生态” 这件事情了。

摩尔定律的传统定义是:半导体芯片上的晶体管密度,平均每 18-24 个月翻一番。

 

 

随着 x86 服务器和桌面部署的增长也为企业 IT 基础架构带来了新的难题:

  • 基础架构利用率低;
  • 基础架构成本高;
  • IT 运维成本高;
  • 故障切换和灾难保护不足;
  • 最终用户桌面的维护成本高昂。

而解决这些难题就是新时代赋予虚拟化技术的历史任务,整个 80~90 年代,虚拟化技术及公司如同雨后春笋般涌现。

伟大源自另一个伟大!

  1. 虚拟化的发展:纵观虚拟化技术的发展历史,可以看到它始终如一的目标就是实现对 IT 资源的充分利用。
  2. 虚拟化与云计算:虚拟化是 IT 资源的抽象,云计算则是基于虚拟化实现的更上层的对企业业务能力的抽象。
  3. 云计算与开源:开源是引诱开发者的苹果,而开发者则是企业的核心资产。云的世界,得开发者,得天下。

 

VMware、XEN、KVM、Doker区别

VMware

VMM模拟执行的就是CPU指令。对于虚拟机中的操作系统,VMM需要完整模拟底层的硬件设备,包括处理器、内存、时钟、I/O设备、中断等等,换句话说,VMM用纯软件的形式“模拟”出一台计算机供虚拟机中的操作系统使用。

这种完全模拟一台计算机的技术也称为全虚拟化,这样做的好处显而易见,虚拟机中的操作系统感知不到自己是在虚拟机中,代码无需任何改动,直接可以安装。而缺点也是可以想象:完全用软件模拟,转换翻译执行,性能堪忧!

这个模拟过程实际上相当的复杂,涉及到大量底层技术,并且如此模拟费时费力,于是催生出了半虚拟化,就是下面要解释的XEN。

 

 XEN

如果把操作系统中所有执行敏感指令的地方都改掉,改成一个接口调用(HyperCall),接口的提供方VMM实现对应处理,省去了捕获和模拟硬件流程等一大段工作,性能将获得大幅度提升。

这就是半虚拟化,这项技术的代表就是Xen,一个诞生于2003年的开源项目。

这项技术一个最大的问题是:需要修改操作系统源码,做相应的适配工作。这对于像Linux这样的开源软件还能接受,充其量多了些工作量罢了。但对于Windows这样闭源的商业操作系统,修改它的代码,无异于痴人说梦。

VMware从5.5版本开始引入对硬件辅助虚拟化的支持,随后在2011年的8.0版本中正式全面支持。于是乎,我们在创建虚拟机的时候,可以选择要使用哪一种虚拟化引擎技术,是用原先的二进制翻译执行,还是基于硬件辅助虚拟化的新型技术。

同一时期的XEN从3.0版本也加入对硬件辅助虚拟化的支持,从此基于XEN的虚拟机中也能够运行Windows系统了

 

KVM-QEMU

有了硬件辅助虚拟化的加持,虚拟化技术开始呈现井喷之势。VirtualBox、Hyper-V、KVM等技术如雨后春笋般接连面世。这其中在云计算领域声名鹊起的当属开源的KVM技术了。

KVM全称for Kernel-based Virtual Machine,意为基于内核的虚拟机。

在虚拟化底层技术上,KVM和VMware后续版本一样,都是基于硬件辅助虚拟化实现。

不同的是VMware作为独立的第三方软件可以安装在Linux、Windows、MacOS等多种不同的操作系统之上,而KVM作为一项虚拟化技术已经集成到Linux内核之中,可以认为Linux内核本身就是一个HyperVisor,这也是KVM名字的含义,因此KVM技术只能在Linux服务器上使用

KVM技术常常搭配QEMU一起使用,称为KVM-QEMU架构。前面提到,在x86架构CPU的硬件辅助虚拟化技术诞生之前,QEMU就已经采用全套软件模拟的办法来实现虚拟化,只不过这种方案下的执行性能非常低下。

KVM本身基于硬件辅助虚拟化,仅仅实现CPU和内存的虚拟化,但一台计算机不仅仅有CPU和内存,还需要各种各样的I/O设备,不过KVM不负责这些。这个时候,QEMU就和KVM搭上了线,经过改造后的QEMU,负责外部设备的虚拟,KVM负责底层执行引擎和内存的虚拟,两者彼此互补,成为新一代云计算虚拟化方案的宠儿。

 

容器技术-LXC & Docker

不同于虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。

XC技术就是这种方案的一个典型代表,全称是LinuX Container,通过Linux内核的Cgroups技术和namespace技术的支撑,隔离操作系统文件、网络等资源,在原生操作系统上隔离出一个单独的空间,将应用程序置于其中运行,这个空间的形态上类似于一个容器将应用程序包含在其中,故取名容器技术。

举个不是太恰当的比喻,一套原来是三居室的房子,被二房东拿来改造成三个一居室的套间,每个一居室套间里面都配备了卫生间和厨房,对于住在里面的人来说就是一套完整的住房。

容器技术的好处是轻量,所有隔离空间的程序代码指令不需要翻译转换,就可以直接在CPU上执行,大家底层都是同一个操作系统,通过软件层面上的逻辑隔离形成一个个单独的空间。

容器技术的缺点是安全性不如虚拟化技术高,毕竟软件层面的隔离比起硬件层面的隔离要弱得多。隔离环境系统和外面的主机共用的是同一个操作系统内核,一旦利用内核漏洞发起攻击,程序突破容器限制,实现逃逸,危及宿主计算机,安全也就不复存在。

 

超轻虚拟化 firecracker

虚拟完整的计算机隔离性好但太过笨重,简单的容器技术又因为太过轻量纯粹靠软件隔离不够安全,有没有一个折中的方案同时兼具两者的优点,实现既轻量又安全呢?

近年来,一种超轻虚拟化的思想开始流行开来,亚马逊推出的firecracker就是一个典型的代表。

firecracker将虚拟化技术的强隔离性和容器技术的轻量性进行融合,提出了一个microVM的概念,底层通过KVM虚拟化技术实现各个microVM的强隔离,而隔离的虚拟机中运行的是一个个精简版的微型操作系统,砍掉了大量无用的功能,专为容器设计的微型OS。

超轻虚拟化如今成为一个新的浪潮,除了AWS的firecracker,谷歌的gVisor, Intel主导的NEMU也在向这个领域开始发力。

 

云计算

云计算(Cloud Computing)是一种基于互联网的计算方式。

即用户可以通过互联网获得按需即取的计算资源。而虚拟化则是云计算的基石,一个云计算的应用必定是构建在虚拟化的基础上的。

同时云计算相比并行计算、分布式计算的科学目的而言更偏向于商业目的,利用虚拟化的多路复用实现其商业模式。

虚拟化和云计算往往容易混淆,简单来讲,虚拟化描述的是一项技术,云计算则描述的是一项商业服务。

 

版权声明:本文为youqiancheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/youqiancheng/p/14687356.html