DPDK技术奠定了NFV领域数据包转发性能提升的基础,那么软硬件解耦后,在通用服务器上实现各功能网元,资源层面的隔离和共生问题就是需要虚拟化技术来解决。虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
1、什么是虚拟化
坦白地说,虚拟化就是欺骗。随着个人计算机的普及,“虚拟化”这个广泛使用的术语已经脱离了其技术本身,成为一种共同语言、流行文化和理念。自20世纪90年代互联网热潮的早期,任何与Web相关的活动均被称为“虚拟”,通过菲利浦•狄克的科幻小说、让•鲍德里亚的后现代主义研究,以及电影(如《黑客帝国》和《盗梦空间》)的影响,模拟现实的概念已经深入人心。
在技术领域,虚拟化是指利用“欺骗”技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
传统构架是在每台物理机器上仅能拥有一个操作系统,而且多数情况下仅有一个负载。很难在服务器上运行多个主应用程序,因为如果这样做,则可能会产生冲突和性能问题。实际上,当前计算的最佳做法是每个服务器仅运行一个应用程序以避免这些问题。但是,这么做的结果是大多数时间利用率很低。如前面所讨论,我们浪费了所购买的大部分计算能力。您必须在浪费硬件和降低风险间寻找平衡。随着业务的增长,随之而来的成本压力也变化,相关管理效率也会变低,需消耗的资源也会变大。
企业实施虚拟化战略的核心目的就是提高IT部门作为业务支撑部门的工作效率,达到节约成本与提高效率并重的目的。虚拟化的重要使命之一就是提高管理效率,从而降低成本、提高硬件使用率,把管理变得更加轻松。虚拟化的主攻方向集中在减少实体服务器的部署数量,并将实体机器上的操作系统及应用程序,无缝转移至虚拟机器上,以便集中管理这些不同平台的虚拟环境。
传统构架下,APP:OS:Phy = 1:1:1。这样子就造成资源利用率低,为不造成资源浪费,会增加APP部署。进而产生的影响就是不同应用之间的资源抢占,隔离性差。而OS主要提供应用运行的环境,在资源调度方面相对薄弱,不能完全有效解决以上问题。
为在不造成冲突的前提下提高资源利用率,最好是在一个OS上部署一个APP,于是就出现了虚拟化的技术。在一台主机上部署多个虚拟客户机并安装OS,每个OS安装一个APP,这样就解决了问题。APP:OS:Phy = n:n:1。
虚拟化之后实现了上层操作系统与下层硬件的解耦,就是说操作系统不再依赖物理的硬件,而是在VMM层上建立OS,由VMM层来实现OS对硬件的需求。
1.1 虚拟化的几个重要概念
宿主机(Host Machine):指物理机资源,被Hypervisor用来执行一个或多个虚拟机器的电脑称为主机。
客户机(Guest Machine):指虚拟机资源,在Hypervisor之上运行多个虚拟机器则称为客户机。
Guest OS和Host OS:如果将一个物理机虚拟成多个虚拟机,则称物理机为Host Machine,运行在其上的OS为Host OS;多个虚拟机称为Guest Machine,运行在其上的OS为Guest OS。
Hypervisor:通过虚拟化层的模拟,虚拟机在上层软件看来就是一个真实的机器,这个虚拟化层一般称为虚拟机监控机(Virtual Machine Monitor,VMM)。需要注意一点:在VMware的ESX虚拟化架构中VMM只是Hypervisor中一个进程,因此在这种场景下VMM不等于Hypervisor。
2、什么是Hypervisor(VMM)
维基百科的定义如下:Hypervisor,又称虚拟机器监视器(英语:virtual machine monitor,缩写为 VMM),是用来建立与执行虚拟机器的软件、固件或硬件。
通俗的讲:hypervisor是一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟机监视器(virtual machine monitor)。
hypervisor是所有虚拟化技术的核心,非中断的支持多工作负载迁移是hypervisor的基本功能。当服务器启动并执行hypervisor时,会给每一台虚拟机分配适量的内存,cpu,网络和磁盘资源,并且加载所有虚拟机的客户操作系统。当前主流的Hypervisor有微软的Hyper-V,VMware、Xen和KVM,但在电信云NFV领域主要用到的就是KVM,在后续虚拟化技术分类中,会专门讲解KVM的相关部署和优化,同时为加深大家对KVM的理解,也会讲 一点Xen的知识,毕竟在KVM广泛应用之前,云架构底层的虚拟化技术都是Xen。
2.1 虚拟化和hypervisor到底什么关系?
虚拟化就是通过某种方式隐藏底层物理硬件的过程,从而让多个操作系统可以透明地使用和共享它。这种架构的另一个更常见的名称是平台虚拟化。在典型的分层架构中,提供平台虚拟化的层称为 hypervisor (有时称为虚拟机管理程序 或 VMM)。来宾操作系统称为虚拟机(VM),因为对这些 VM 而言,硬件是专门针对它们虚拟化的。如下图示:
在上图中可以看到,hypervisor 是提供底层机器虚拟化的软件层(在某些情况下需要处理器支持)。并不是所有虚拟化解决方案都是一样的(详见Hypervisor分类部分)。客户机操作系统(GuestOS)对机器的底层资源的访问通过VMM来实现。hypervisor 面对的对象不是客户机中的进程,而是整个客户操作系统(GuestOS)。
hypervisor主要可以划分为两大类:类型1和类型2,以及在此基础上的混合类型和操作系统类型。
类型1:这种hypervisor是可以直接运行在物理硬件之上的。也就是说它不需要宿主机操作系统(HostOS)的支持,本身就可以管理底层硬件的资源,其本质是在Hypervisor中嵌入了一个精简的Linux操作系统内核。Xen 和 VMWare 的 ESXi 都属于这个类型,这种虚拟化类型的模型如下图所示,其特点就是需要硬件的支持,转发性能强(因为少了HostOS这一层转发),VMM就是HostOS。
类型2:这种hypervisor运行在另一个操作系统(运行在物理硬件之上)中。也就是说这种类型的Hypervisor是部署在HostOS之上的,从HostOS角度来看,其上层的所有VM都对应Hypervisor这一个进程。从VM的角度来看,其访问底层硬件资源需要Hypervisor和HostOS共同配合完成。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。这种虚拟化类型的模型如下图所示,其特点就是比较灵活,比如支持虚拟机嵌套(嵌套意味着可以在虚拟机中再运行hypervisor),但是转发性能明显不如类型1。
目前,随着转发性能提升需求和应用的微服务化架构需求,在类型2的基础上又演进出混合类型虚拟化和基于HostOS的操作系统虚拟化。
混合虚拟化:通过在主机的操作系统中增加虚拟硬件管理模块,通过虚拟硬件管理模块来生成各个虚拟机。属于类型2虚拟化的一种增强模型。特点是相对于类型2虚拟化,没有冗余,性能高,可支持多种操作系统。但是,需要底层硬件支持虚拟化扩展功能。现阶段的KVM和Hyper-V都属于这种增强型类型2虚拟化技术。
操作系统虚拟化:没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。最重要的前提是:如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户账户),其本质就是操作系统上面应用程序的一个进程,主要在应用的微服务化架构场景中使用。特点是:简单、易于实现,管理成本非常低。但是,隔离性差,多个虚拟化实例共享同一个操作系统。最典型就是目前炙手可热的容器技术Docker和Virtuozzo。
3、虚拟化的特征和优势
从前面描述可知,虚拟化技术就是一个“大块的资源”逻辑分割成“具有独立功能的小块资源”,这个功能通过Hypervisor来实现。对于服务器领域而言,通过Hypervisor将一个物理服务器虚拟化成若干个小的逻辑服务器,每个逻辑服务器具有与物理服务器相同的功能,所有逻辑服务器的资源总和等于物理服务器的全部资源。
因此,运行在Hypervisor上的逻辑服务器,其本质就是由物理服务器上一个个文件组成。相对物理服务器,天生具备分区、隔离、封装和相对硬件独立四大特征。
1)分区:在单一物理服务器同时运行多个虚拟机。分区意味着虚拟化层为多个虚拟机划分服务器资源的能力;每个虚拟机可以同时运行一个单独的操作系统(相同或不同的操作系统),使您能够在一台服务器上运行多个应用程序。每个操作系统只能看到虚拟化层为其提供的“虚拟硬件”(虚拟网卡、CPU、内存等),以使它认为运行在自己的专用服务器上。
2)隔离:在同一服务器虚拟机之间相互隔离。虚拟机是互相隔离的。例如:一个虚拟机的崩溃或故障(例如,操作系统故障、应用程序崩溃、驱动程序故障,等等)不会影响同一服务器上的其它虚拟机;一个虚拟机中的病毒、蠕虫等与其它虚拟机相隔离,就像每个虚拟机都位于单独的物理机器上一样。可以通过资源控制以提供性能隔离,比如:可以为每个虚拟机指定最小和最大资源使用量,以确保某个虚拟机不会占用所有的资源而使得同一系统中的其它虚拟机无资源可用;可以在单一机器上同时运行多个负载/应用程序/操作系统,而不会出现因为传统 x86 服务器体系结构的局限性发生DLL冲突等问题。
3)封装:整个虚拟机都保存在文件中,可以通过移动文件的方式来迁移虚拟机。封装意味着将整个虚拟机(硬件配置、BIOS 配置、内存状态、磁盘状态、CPU 状态)储存在独立于物理硬件的一小组文件中。这样,只需复制几个文件就可以随时随地根据需要复制、保存和移动虚拟机。
4)相对硬件独立:无需修改即可在任意服务器上运行(主要基于全虚技术的虚拟机,半虚技术的虚拟机只支持开源操作系统,如Linux)。因为虚拟机运行于虚拟化层之上,所以只能看到虚拟化层提供的虚拟硬件,无需关注物理服务器的情况。这样,虚拟机就可以在任何 x86 服务器(IBM、Dell、HP等)上运行而无需进行任何修改。这打破了操作系统和硬件以及应用程序和操作系统/硬件之间的约束。
同时,由于Hypervisor的存在,使得虚拟机又具备同质、高效和资源受控的3个特点。
1)同质 (Equivalence),即VM的运行环境和物理机的环境在本质上是相同的,表现上可以有一些差异。如CPU的ISA必须一致(实际可以不一致),CPU core的个数可以不同。
2)高效 (Efficiency),即VM的性能必须接近物理机。因此,常见的模拟器 (boches, simics ...) 就不能称为VM。为达此目的,软件在 VM 上运行时,大多数指令要直接在硬件上执行,只有少量指令需要 VMM 的模拟或处理。
3)资源受控 (Resource control),即Hypervisor对物理机的所有资源有绝对的控制力。
物理资源在经过Hypervisor虚拟化后,在资源利用率、独立性、运行效率和安全性等方面与传统物理服务器相比均有不同的优势。
1)资源利用率:虚拟化前每台主机一个操作系统,系统的资源利用率低。虚拟化后,主机与操作系统不一一对应,按需分配使用,系统的资源利用率高。
2)独立性:虚拟化前软硬件紧密结合,硬件成本高昂且不够灵活。虚拟化后,操作系统和硬件不相互依赖,虚拟机独立于硬件,能在任何硬件上运行。
3)程序运行效率:虚拟化前同一台主机上同时运行多个程序容易产生冲突,运行效率较低。虚拟化后,操作系统和应用程序被封装成单一个体,不同个体间不冲突。同一台机器上运行多个程序,效率高。
4)安全性:虚拟化前,故障影响范围大,安全性较差。虚拟化后,通过资源的池化,有强大的安全和故障隔离机制。
4、虚拟化技术的发展
最近几年,随着云计算技术广泛应用,虚拟化技术也被大家所关注。其实,虚拟化技术的出现要早于云计算技术约半个世纪。在上世纪60年代,虚拟化技术就已经在大型机上有所应用,在1999年小型机上出现逻辑分区的概念,这就是存储虚拟化的雏形。而到了2000年,在x86平台上VMware首先提出了平台虚拟化技术的概念,以及后续随着CPU速度越来越快,Intel和AMD分别在CPU指令架构中引入虚拟化指令,在服务器领域和数据中心范围内虚拟化技术得到的极大发展,从而催生了云计算技术的出现。可以说,虚拟化技术是云计算技术得以实现并推广落地的重要基石,同时,随着云计算技术的演进,虚拟化技术也同样在不断演进,从最早的计算虚拟化发展到目前的应用虚拟化,两者是一种相辅相成,螺旋式推进的关系。
云计算技术从诞生到当前,共经历了3个阶段,分别称为云计算1.0、云计算2.0和云计算3.0,在不同的阶段,虚拟化技术的表现形式和关注点也不相同,两者关系如下图所示:
在云计算1.0时代,主要是将传统IT硬件基础设施转换为虚拟化基础设施,来提升资源利用率。该阶段的关键特征体现为:通过计算虚拟化技术的引入,将企业IT应用与底层的基础设施彻底分离解耦,将多个企业IT应用实例及运行环境(客户机操作系统,GuestOS)复用在相同的物理服务器上,并通过虚拟化集群调度软件,将更多的IT应用复用在更少的服务器节点上,从而实现资源利用效率的提升。
在云计算2.0时代,主要是向云租户提供池化资源服务和精细化自动管理,推动企业业务的云化演进。该阶段的关键特征体现为:不仅通过计算虚拟化完成CPU、内存、裸金属服务器等池化资源的集中管理和自动调度,同时引入存储虚拟化和网络虚拟化技术,实现数据中心内部存储资源和网络资源的池化集中管理和统一调度。面向内部和外部的租户,将原本需要通过数据中心管理员人工干预的基础设施资源复杂低效的申请、释放与配置过程,转变为一键式全自动化资源发放服务过程。这个阶段大幅提升了企业基础设施资源的快速敏捷发放能力,缩短了基础设施资源准备周期,实现资源的按需弹性供给。为企业核心业务走向敏捷,更好地应对瞬息万变的竞争与发展奠定了基础。云计算2.0阶段面向云租户的基础设施资源服务供给,可以是虚拟机形式,可以是容器(轻量化虚拟机),也可以是物理机形式。该阶段的企业云化演进,暂时还不涉及基础设施层之上的IT应用与中间件、数据库软件架构的变化。
在云计算3.0时代,面向应用开发者及管理维护者提供分布式微服务化应用架构和大数据智能化服务。
该阶段的关键特征体现为:企业IT应用架构逐步开始去IOE化,依托开源增强、跨不同业务应用领域高度共享的数据库、中间件平台服务层以及功能更加轻量化解耦、数据与应用逻辑彻底分离的分布式无状态化架构,从而实现支撑企业业务敏捷化、智能化以及资源利用效率提升。
5、数据中心内部虚拟化技术分类
目前,在数据中心内虚拟服务器、虚拟网络、虚拟存储、虚拟设备和其他“虚拟技术”等已对传统基础设施产生了逆袭。在上述云计算的三个阶段,使得虚拟化技术和云计算技术得到极大发展的关键就是2.0时代,主要的特征就是从计算虚拟化走向存储虚拟化和网络虚拟化。
从支撑云计算按需、弹性分配资源,与硬件解耦的虚拟化技术的角度来看,云计算早期阶段主要聚焦在计算虚拟化领域。事实上,计算虚拟化技术早在IBM 370时代就已经在其大型机操作系统上诞生。技术原理是通过在OS与裸机硬件之间插入虚拟化层,来在裸机硬件指令系统之上仿真模拟出多个370大型机的“运行环境”,使得上层“误认为”自己运行在一个独占系统之上,实际上是由计算虚拟化引擎在多个虚拟机之间进行CPU分时调度,同时对内存、I/O、网络等访问也进行访问屏蔽。
后来,当x86平台演进成为在IT领域硬件平台的主流之后,VMware ESX、XEN、KVM等依托于单机OS的计算虚拟化技术才将IBM 370的虚拟化机制在x86服务器的硬件体系架构下实现,并且在单机/单服务器虚拟化的基础上引入了具备虚拟机动态迁移和HA调度能力的中小集群管理软件,比如:VMware的vCenter/vSphere、Citrix的XEN Center和华为的FusionSphere等,从而形成当前的计算虚拟化主体。
与此同时,作为数据信息持久化载体的存储已经逐步从服务器计算中剥离出来,与必不可少的CPU计算能力一样,在数据中心发挥着至关重要的作用。现在数据中心内部不再封闭,内部服务器互访和对外部互联网访问需求,使得存储和网络也同计算一样,成为数据中心IT基础设施不可或缺的“三大要素”。就数据中心端到端基础设施解决方案而言,不仅需要计算资源的按需分配、弹性伸缩、与硬件解耦的需求,对存储资源和网络资源需求同样如此,因此,存储虚拟化和网络虚拟化技术应运而生。
对于普通x86服务器来说,CPU和内存资源虚拟化后再将其以vCPU/vMemory的方式,按需供给用户/租户使用。计算计算虚拟化中仅存在资源池的“大分小”的问题。然而对于存储来说,由于硬盘的容量有限,而客户/租户对数据容量的需求越来越大,因此必须对数据中心内多个分布式服务器存储资源,比如:服务器内的存储资源、外置SAN/NAS等进行“小聚大”的整合,组成存储资源池。这个存储资源池,可能是单一厂家提供的同构资源池,也可以是被存储虚拟化层整合成为跨多厂家异构的统一资源池。各种存储资源池均能以统一的块存储、对象存储或者文件存储格式进行访问。数据存储虚拟化示意图如下所示:
对于数据中心网络来说,网络对于业务应用,作为连接服务器节点的计算和存储资源是一种实实在在的资源需求。传统数据中心内部,网络交换功能都是在物理交换机和路由器设备上完成的,网络功能对上层业务应用而言仅仅体现为一个一个被通信链路连接起来的孤立的“盒子”,无法动态感知来自上层业务的网络功能需求,完全需要人工配置的方式来实现对业务层网络组网与安全隔离策略的需要。
在云时代多租户虚拟化的环境下,不同租户对于边缘的路由及网关设备的配置管理需求也存在极大的差异化,即使物理路由器和防火墙自身的多实例能力也无法满足云环境下租户数量的要求,如果采用与租户数量等量的路由器与防火墙设备,成本上无法接受。于是,伯克利大学的Nick Mckeown教授提出将网络自身的功能从专用封闭平台迁移到服务器通用x86平台上来,SDN概念从此诞生。
网络资源虚拟化后,服务器节点的应用VM连接差异化,就可由云操作系统来自动化地创建和销毁,并通过一次性建立起来的物理网络连接矩阵,进行任意两个网络端节点之间的虚拟通讯链路建立,以及必要的安全隔离保障,从而实现业务驱动的网络自动化管理配置,大幅度降低数据中心网络管理的复杂度。从资源利用率来看,任意两个虚拟网络节点之间的流量带宽,都需要通过物理网络来交换和承载,只要不超过物理网络的资源配额上限(一般建议物理网络按照无阻塞的CLOS模式来设计实施),一旦虚拟节点被释放,其所对应的网络带宽占用也将被同步释放,因此也就相当于实现对物理网络资源的最大限度的“网络资源动态共享”。通俗点讲,网络虚拟化让多个盒子式的网络实体第一次以一个统一整合的“网络资源池”的形态,出现在业务应用层面前,同时与计算和存储资源之间,也有了统一协同机制。网络虚拟化示意图如下图所示:
上面基础设施虚拟化技术的“三要素”是电信云领域需要重点关注的三个分类,属于云计算中IaaS服务部分的内容。
除此之外,还有基于PaaS和SaaS的桌面虚拟化技术,这部分内容因电信云领域目前不涉及,因此在本站的云计算分类中会有相关介绍,这里不再赘述。后续,会在NFV关键技术分类中按照计算虚拟化、存储虚拟化和网络虚拟化三大部分逐一介绍,并会重点KVM的部署和性能调优。