关于虚拟化这块,自己其实也很迷,很多东西也只是知道个基本的原理。先简单说说。
随着计算机硬件技术的发展,物理资源的容量越来越大而价格越来越低,在既有的计算元件架构下,物理资源不可避免产生闲置和浪费。为了充分利用物理资源,提高效率,一个比较直接的办法就是更新计算元件以利用更加丰富的物理资源。但是,往往我们为了对稳定性和兼容性的追求,就并不情愿地对已经存在的计算元件做大幅度的变更,虚拟化就出来了,它通过引入一个新的虚拟化层,对下管理真实的物理资源,对上提供虚拟的系统资源,从而实现在扩大硬件容量的同时,简化软件的重新配置。
在x86平台的虚拟化技术中,新引入的虚拟化层通常被称为虚拟机监控器(VMM),也叫作hypervisor。虚拟机监控器运行的环境,也就是真实的物理平台,称之为宿主机,而虚拟出来的平台通常称为客户机,里面运行的系统对应地也称为客户机操作系统。
然后是各种虚拟化技术,可能比较乱,因为自己在学的时候也比较乱,emmmmm。
网络虚拟化
(关于网络虚拟化这块,详细的可以看这个 网站)
对物理网络及其组件进行一个抽象,并从中分离网络业务流量的一种,采用网络虚拟化可以将多个物理网络抽象成一个虚拟网络,或者将一个物理网络分割成多个逻辑网络。
1、网络功能虚拟化(NFV)
是从网络运营商的角度出发的一种软硬件分离的架构,主要是希望通过标准化IT虚拟化技术,采用业界标准的大容量服务器、存储和交换机承载各种各样的网络软件功能,实现软件的灵活加载,从而可以在数据中心,网络节点和用户端等不同的位置进行一个灵活的部署配置,NFV打破了网络物理设备层和逻辑业务层之间的绑定关系,每个物理设备被虚拟化的网元所取代,通过对虚拟网元进行一个配置来满足其需求。
2、传统网络虚拟化和发展
传统的网络虚拟化技术以VLAN和VPN(虚拟专用网)为代表,通过协议封装在物理网路上提供相互隔离的虚拟专用网络,随着软件虚拟化,软件定义网络(SDN)等技术的发展,利用分布式的软件技术实现网络功能集的合理抽象、分割以及灵活调度逐步成为网络虚拟化及网络功能虚拟化的主流实现模式。现阶段,叠加网络(overlay)组网技术、虚拟化流量调度技术等是网络虚拟化以及网络功能虚拟化技术的主要研究热点。
在网络技术领域,overlay指的是一种在网络结构上进行叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的前提下,实现应用在网络上的承载,并能与其他业务分离,目前主要应用于数据中心内部网络的大规模互联。
3、虚拟化资源调度
虚拟化资源调度技术借助SDN,NFV等理念实现对网络流量、业务功能等资源的虚拟化和智能调度,其中包括虚拟化流量调度和业务链。
(1)虚拟化流量调度
虚拟化流量调度技术是通过虚拟化技术突破目前ip网络分布式路由选路的局限,利用集中式路由计算与流量调度,实现全网流量动态均衡与网络结构优化。虚拟化流量调度技术主要应用于ip骨干网,重点包括如何合理定义ip路由功能集的抽象、集中式路由决策系统的实现方式,集中式系统的可靠性以及该种模式下的保护路径计算实时性算法等。目前虚拟化流量调度技术在朝着与SDN等新技术结合的方向发展,如通过新增路径计算单元/控制器(PCE/controller)系统来实现集中式路由决策系统。
(2)业务链
网络中的虚拟防火墙、负载均衡器、网关等业务处理功能被称为业务功能点,而流量经过一系列的业务功能点的处理,就形成了业务链。与虚拟化流量调度不同,业务链更侧重于解决虚拟网络中如何通过控制服务器对网络流量转发进行编程控制,将流量灵活的调配到某些个业务功能点进行处理,为用户无缝交付网络服务。
存储虚拟化
存储虚拟化是指为物理的存储提供一个抽象的逻辑视图,用户可以通过这个视图中的逻辑接口来访问被整合的存储资源。存储虚拟化主要有基于存储设备的虚拟化和基于网络的存储虚拟化两种。其中,磁盘阵列技术是基于存储设备的存储虚拟化的代表,该技术通过将多块物理磁盘组合成磁盘阵列,提供一个统一的、高性能的容错存储空间。网络附加存储(NAS)和存储区域网络(SAN)则是基于网络的存储虚拟化技术。对于用户而言,并不知道其真实的物理地址,对于管理者,能够在一个控制台上管理分散在不同位置的异构设备上的数据。
系统虚拟化
系统虚拟化实现了操作系统与物理计算机的分离,使得在一台物理设备上能够同时安装和运行一个或者是多个虚拟的操作系统,在操作系统内部的应用程序看来,与直接安装在物理计算机上的操作系统没有什么差异。它的核心就是使用虚拟化软件在一台物理机上虚拟出一台或者是多台虚拟机。
桌面虚拟化
桌面虚拟化将用户的桌面环境与其使用的终端设备解耦合。服务器上存放的是每个用户完整的桌面环境,用户可以使用不用的具有足够处理和显示功能的终端设备,通过网络访问该桌面环境。桌面个虚拟化将众多终端的资源集合到后台数据中心,以便对企业若干终端进行统一认证、统一管理和灵活的调配资源。
软件和硬件虚拟化
先放一张图:
在某本书中这样说的:从图中可以看出,实现虚拟化的重要一步就是,虚拟化层必须能够截获计算元件对物理资源的直接访问,并将其重定向到虚拟资源池中,根据虚拟化层是用纯软件的方式还是利用物理资源提供的机制来实现这种“截获并重定向”,我们分成软件虚拟化和硬件虚拟化。
1、软件虚拟化
就是用软件的方法在现有的物理平台上实现对物理平台访问的截获和模拟,常见的是:QEMU,它是通过纯软件来仿真x86平台处理器的取指、解码和执行,客户机的指令并不在物理平台上执行。由于所有的指令都是软件模拟的,因此性能比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。
VMware的软件虚拟化则使用动态二进制翻译的技术,VMM在可控制的范围内允许客户机的指令在物理平台上直接运行,但是,客户机指令在运行前会被VMM扫描,其中敏感的指令会被动态替换成可以在物理平台上直接运行的安全指令,或者替换成对VMM的软调用。这样做的好处就是比纯软件虚拟化性能要好,但是丧失了跨平台的能力。
2、硬件虚拟化
简单的说,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持。以X86平台的虚拟化为例,支持虚拟技术的X86 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易将客户机置于一个受限制的模式下去运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。VMM还可以利用硬件虚拟化的增强机制,将客户机在受限模式下实现对一些特定资源的访问,完全由硬件重定向到VMM指定的虚拟资源,整个过程不需要暂停客户机的运行和VMM软件的参与。
由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,简化了VMM设计,性能更加强大。
半虚拟化和全虚拟化
1、半虚拟化
软件虚拟化 可以在缺乏硬件虚拟化支持的平台上完全通过VMM软件来实现对各个虚拟机的监控,以保证它们之间彼此隔离和独立。但是付出的代价就是软件复杂度的增加和性能上的损失。减轻这种负担的一种办法需要改动客户操作系统,使他以为自己运行在虚拟环境下,能够与VMM进行协同工作,这种方法叫做准虚拟化或者半虚拟化。本质上,它弱化了虚拟机对特殊指令的被动截获要求,将其转化成客户机操作系统的主动的通知,但是这需要修改操作系统的源码来实现。
比如Xen:操作系统作为虚拟服务器在Xen hypervisor上运行之前,它必须在内核层面进行某些改变,所以像Windows这些因为不公开源码,所以是无法修改其内核的。(Vmware通过动态二进制技术,将敏感指令翻译成受监管的、安全的具有相同功能的指令去执行,但是这种消耗了太多的CPU时钟周期,Xen解决方式是通过修改虚拟机的操作系统发出一个超级调用的指令去给VMM。)
2、全虚拟化
全虚拟化为客户机提供了完整的虚拟X86平台,包括处理器、内存和外设,支持任何理论上可在物理平台上运行的操作系统,为虚拟机的配置提供了最大程度的灵活性。这样的好处就是:不需要对客户机操作系统做任何修改即可正常运行任何非虚拟化环境中已经存在了的基于X86平台的操作系统和软件。