我的实验随笔:Linux篇(8):计算虚拟化技术简介
现在,我们就一台服务器,上面需要跑很多应用进行实验,这些应用安装、卸载、调试过程中,容易在服务器上留下很多残留信息。我是永远不知道哪个文件夹里还藏着一个日志文件,哪个系统目录里还躺着一个没卸载干净的库文件。时间一长,服务器就像个堆满杂物的房间,越来越乱,越来越慢。我比较有洁癖,不希望在物理服务器中留下太多残渣。那怎么办?这时候,计算虚拟化技术就成了我的救星。它的核心思想特别简单——隔离。类似一个大平层,我们在这个大平层中隔出了很多房子——很多二手房东就是这么做的。隔离有两种方式。一种是“重隔离”,代表方向是虚拟机,另一种是“轻隔离”,现在比较流行的是容器,也就是大家常说的Docker。一、虚拟机
它是在物理服务器上用软件模拟出一整套虚拟硬件,包括CPU、内存、硬盘、网卡等等,然后在这套虚拟硬件上安装一个完整的操作系统。我们在虚拟机里装再多的软件、做再乱的实验,折腾得再狠,最多也就是把虚拟机自己搞崩了,对物理服务器和其他虚拟机毫发无伤。我相信,计算机系的大学生,没少在电脑上安装VMware workstation干事^_^,这个就是虚拟机。实验做完,直接把虚拟机删掉,所有残留——系统文件、环境变量、安装包、日志,全都灰飞烟灭,我们的物理服务器回归清爽。(一)虚拟机的几种方式
虚拟机主要抽象的,是硬件层面。打个比方,一个大平层,隔了很多个房间,每个房间里都有一个小卧室、小卫生间、小客厅、小厨房,等等,俨然一个小套房。它主要有三种实现方式。一种是全虚拟化,这是基于软件实现的虚拟化,它不需要修改客户操作系统,比如我们的Windows、Linux等,直接把虚拟化软件装上去就能跑,兼容性最好,但性能稍有损耗,因为虚拟机里面的系统如果需要调用物理服务器上的硬件,需要经过虚拟化软件的翻译,再给服务器上的操作系统进行调用,产生了一定的开销。经典的如VMware Workstation、微软Virtual PC,这个就是全虚拟化技术的代表。我们平时做实验对性能要求没那么极致,用起来完全够用。另一种是半虚拟化,这需要修改操作系统内核,能够让虚拟机通过指令直接调用一些硬件,从而减少了虚拟化的开销。相比全虚拟化性能更好,但兼容性差一些,Windows这种闭源系统就玩不转。经典的如Xen,这个就是半虚拟化技术的代表。随着时代发展,后面又产生了硬件辅助虚拟化这条路线,其实就是CPU直接帮忙加速,既不用改系统,性能又接近物理机,算是“全虚拟化的高性能版本”。如我们后面要安装的KVM等。随着万物互联时代的到来,虚拟化技术进一步扩展到移动终端、嵌入式和车载设备等资源受限的平台,一系列嵌入式、轻量级虚拟化被提出来,例如QNX Hypervisor、Jailhouse、Xvisor、PikeOS和OKL4等。但是这些也脱离不了上面三种,或者说全虚拟化和半虚拟化这两种的分类。我们了解一下就可以了。二、Docker
Docker,也就是容器技术,它的思路跟虚拟机完全不一样,它只是利用Linux内核的一些特性,把进程、文件、网络等资源打包起来,外面看不见里面,里面也看不见外面。Docker是对操作系统层面进行了虚拟化,每个容器看起来像一台独立的机器,但实际上所有容器共用宿主机的操作系统内核。还是以大平层举一个不恰当的例子,大平层里的隔间,不再是用砖头垒起隔开了,是而是用布帘隔离开间,大家共用卫生间、客厅、厨房等,但是还是能保证一定的私密性。这带来的好处特别明显。首先是轻量,一个虚拟机镜像动辄几个GB,而一个Docker镜像可能只有几十MB甚至更小。其次是启动快,虚拟机启动要几分钟,Docker容器几乎是秒级启动,点一下就能用。再次是数量多,一台物理服务器上跑十个虚拟机可能就有点吃力了,但跑上百个容器轻轻松松。当然,轻量也有代价。Docker的隔离性不如虚拟机那么彻底,毕竟所有容器共用同一个内核,万一哪个容器里的程序把内核搞崩溃了,整个物理服务器都得重启,所有容器跟着遭殃。而虚拟机各自有独立的内核,一个崩了不影响别的。三、回到最开始的需求
做个实验、不想留残渣,这两种方案都管用,但取舍不同:- 如果需要完整的操作系统环境,或者对隔离性要求比较高,怕某个实验把系统搞崩,那就用虚拟机,稳妥,干净,用完即删。
- 如果做的是应用级别的实验,希望快速拉起、快速销毁,而且对空间和启动速度有要求,那就用Docker,轻便,灵活,同样用完即删。
还记得环境吗?里面有一块8G显存的P4显卡。这张显卡是支持虚拟化技术的,也就是可以把一张显卡切成2张4G显存的显卡使用,也就是GPU虚拟化。如果想把这张显卡(硬件)进行切分(虚拟化),我们应该用的是啥?嗯,虚拟机后面我们会在这台服务器上同时安装KVM和Docker,两个都体验一下。另外,题目是叫计算虚拟化,后面我们又提到了GPU虚拟化,还有什么其他的虚拟化技术吗?有,比如存储虚拟化、网络虚拟化、桌面虚拟化等等。某某虚拟化,用英文来表述,常常就是software define XXX,用软件定义某某,因为虚拟化,常常是用软件来定义的,比如software define network,软件定义网络,等等,当然,这个软件定义,比如虚拟化这个概念,又扩大了一些,现在可以说,万物皆可软件定义,software define everything。这个可以写出好大一篇文章。希望我后面能把这个坑填上。