我目前的工作是做aiops,为基础设施的运维指标数据提供基于算法的分析,提前发现业务运维的故障,降低故障的解决时间。对于基础设施的底层接触不多,但是希望把底层摸透。
虚拟机是什么?
虚拟机(英文:virtual machine),在计算机科学中的体系结构中,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于虚拟机这个软件所创建的环境来操作其他软件。虚拟机(vm)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算系统,能提供物理计算机的功能。
目的,模拟计算机系统环境。
虚拟机比较
下列的软件产品可以用来虚拟硬件,所以可以用在各种操作系统。
私有是付费的,免费的功能会很少,GPL是开源的,即自有软件。
什么是虚拟化?
虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分隔、组合为一个或多个电脑配置环境。
虚拟化技术是一个广义的术语,根据不同的对象类型可以细分为:
- 平台虚拟化(platform virtualization):针对计算机和操作系统的虚拟化。
- 资源虚拟化(resource virtualization):针对特定的系统资源的虚拟化,如内存、存储、网络资源等。
-
应用程序虚拟化(application virtualization):包括仿真、模拟、解释技术等,如java虚拟机(JVM)。
1960中期,IBM在Thomas J.Watson Reasearch 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服务器和桌面部署的增长也为企业IT基础架构带来了新的难题:
- 基础架构利用率低
- 基础架构成本高
- IT运维成本高
- 故障切换和灾难保护不足
- 最终用户桌面的维护成本高昂
而解决这些难题就是新时代赋予虚拟化技术的历史任务,整个80-90年代,虚拟化技术及公司如雨后春笋般涌现。
1.虚拟化的发展:纵观虚拟化技术的发展历史,可以看到它始终如一的目标就是实现对IT资源的充分利用。
2.虚拟化与云计算:虚拟化是IT资源的抽象,云计算则是基于虚拟化实现的更上层的对企业业务能力的抽象。
3.云计算与开源:开源是引诱开发者的苹果,而开发者则是企业的核心资产。
Vmware、Xen、KVM、Docker区别
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技术的支撑,隔离操作系统文件、网络等资源,在原生操作系统上隔离出一个单独的空间,将应用程序至于其中运行,这个空间的形态上类似于一个容器将应用程序包含在其中,故取名容器技术。
举个不是太恰当的比喻,一套原来是三居室的房子,被二房东拿来改造成三个一居室的套间,每个一居室套间里面都配备了卫生间和厨房,对于住在里面的人