人们通常所说的虚拟化技术,是指服务器虚拟化技术。
除此之外,虚拟化还有网络虚拟化、存储虚拟化,和应用虚拟化。
服务器虚拟化 (Server Virtualization)
服务器虚拟化:就是把物理服务器分割成几个较小的虚拟服务器,让CPU、内存、磁盘、I/0等硬件变成可以动态管理的“资源池”,这样就可以最大限度的利用资源。
下图:是一种企业虚拟化服务器的整体解决方案。可以看到,这个解决方案的主体部分是:8台安装了 VMware ESX Server的 PC 服务器。这个服务器就是直接安装在物理服务器的裸机上,把物理服务器上的处理器、内存、存储器和网络资源抽象到多个虚拟机里面。
服务器分类
服务器的分类标准非常多。比如,你可以按产品形态分类(塔式服务器、机架服务器、刀片服务器、机柜服务器等等);也可以按指令集架构分类。
如果是按指令集架构分类,那么可以分成3类:
1. CISC服务器(Complex instruction Set Computing):复杂指令集计算。
也被称为X86服务器,采用Intel、AMD或其它兼容X86指令集的处理器芯片,和Windows操作系统的服务器,是目前主流的服务器架构。
2. RISC服务器(Reduced Instruction Set Computing):精简指令集计算。
RISC服务器基于RISC处理器
3. EPIC服务器(Explicitly parallel Instruction Computing):显式并行指令计算。
EPIC服务器基于EPIC处理器。
⚠️:使用RISC或EPIC架构的服务器,又称非X86服务器。包括:大型机、小型机和UNIX服务器,并且主要采用UNIX的操作系统。
目前常用的服务器主要分为 UNIX服务器和x86服务器。
对UNIX服务器而言,没有统一的虚拟化技术。相比,x86服务器的虚拟化标准相对开放。
x86服务器的虚拟化技术
1. 完全虚拟化 (Full virtualization)
完全虚拟化会使用 hypervisor:是一种能够直接与物理服务器的磁盘空间和 CPU 进行通信的软件。
Hypervisor 监视着物理服务器的资源,保持每台虚拟服务器的独立性,让他们察觉不到其他虚拟服务器的存在。
在使用完全虚拟化方面,最大的限制就是 hypervisor 自身的处理需求。会降低应用速度,影响服务器性能。
2. 准虚拟化 (Paravirtualization)
半虚拟化最初是由IBM开发的。
准虚拟化/半虚拟化:也使用了Hypervisor。但是它的客户操作系统集成了虚拟化方面的代码。
就是说虚拟机不需要模拟硬件,而是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API。所以,就不需要Hypervisor耗费一定的资源进行翻译操作。总的来说,就让Hypervisor的工作负担变得非常的小,整体的性能也有很大的提高。
KVM、VMware、Hyper-V都支持半虚拟化。
3. 操作系统层虚拟化
就是在操作系统层面,增添虚拟服务器功能。
它没有独立的Hypervisor层。
要注意的就是,如果使用操作系统层虚拟化的话,所有虚拟服务器必须运行同一操作系统。
网络虚拟化
理解
网络虚拟化这个概念,相对于计算、存储虚拟化来说是比较抽象的。
在我们的印象中,网络就是由各种网络设备(如交换机、路由器)相连组成的一个网状结构,世界上的任何两个人都可以通过网络建立起连接。
如果你是按这个思路去理解网络虚拟化的话,可能会感觉云里雾里:这样一个庞大的网络如何实现虚拟化?
其实,网络虚拟化更多关注的是数据中心网络、主机网络这样比较「细粒度」的网络。所谓细粒度,是相对来说的,是深入到某一台物理主机之上的网络结构来谈的。
如果把传统的网络看作「宏观网络」的话,那网络虚拟化关注的就是「微观网络」。
从资源这个角度去理解,就会比较好理解一点。
所以,网络虚拟化的目的,是要节省物理主机的网卡设备资源。
传统网络架构
在传统网络环境中,一台物理主机包含一个或多个网卡(NIC,Network Interface Card),要实现与其他物理主机之间的通信,需要通过自身的 NIC 连接到外部的网络设施,比如交换机上面。
这种架构下,为了对应用进行隔离,往往是将一个应用部署在一台物理设备上(像前面讲的一样),这样会存在两个问题:
1)是某些应用,大部分情况可能处于空闲状态
2)是当应用增多的时候,只能通过增加物理设备来解决扩展性问题。
不管怎么样,这种架构都会对物理资源造成极大的浪费。
虚拟化网络架构
为了解决这个问题,可以借助虚拟化技术对一台物理资源进行抽象:把一张物理网卡虚拟成多张虚拟网卡(vNIC),通过虚拟机来隔离不同的应用。
虚拟机与虚拟机之间的通信,由虚拟交换机完成。
虚拟网卡和虚拟交换机之间的链路也是虚拟的链路。
所以,整个主机内部构成了一个虚拟的网络。
总结下来,网络虚拟化主要解决的是虚拟机构成的网络通信问题,完成的是各种网络设备的虚拟化,如网卡、交换设备、路由设备等。
网络虚拟化过程中主要诞生过 4 类过渡技术:虚拟局域网络(VLAN)、虚拟专用网络(VPN)、主动可编程网络(APN)、覆盖网络。
SDN(software-defined networking)软件定义网络
SDN是网络虚拟化的一种实现方式。
SDN的历史
首先就是OpenFlow。在2008年,斯坦福大学的Nick McKeown (尼克·麦基翁)教授等人提出了 OpenFlow 的概念。然后他们基于OpenFlow ,进一步提出了SDN的概念。2009年,SDN 概念入围Technology Review(技术评论)年度十大前沿技术,之后就获得了学术界和工业界的广泛认可和大力支持。2009年12月,OpenFlow 发布了他们的可用于商业化产品,就是1.0版本。
然后就是 Google:Google 就是对 SDN进行了改造。 Google的改造分为三个阶段。
从2010年春天到2012年初,Google的整个B4网络完全切换到了 OpenFlow 网络。经过改造之后,链路带宽利用率提高了3倍以上,接近100%。这个时候开始,SDN 开始爆发性发展。
SDN是什么
简单来说,SDN就是利用OpenFlow协议,把路由器的控制平面(control plane)分离出来了,改用软件方式实现。
SDN这个架构,可以让网络管理员在不动硬件设备的前提下,用中央控制的方式,重新规划网络。
具体来说,SDN网络就是在网络之上建立了一个SDN控制器节点:目的就是统一管理和控制下层设备的数据转发。所有的下级节点,管理功能被剥离(交给了SDN控制器),只剩下转发功能。
所以,对于上层应用来说,即使网络再复杂也是不可见的。管理者只需要像配置软件程序一样,进行简单部署,就可以让网络实现新的路由转发策略。如果是传统网络,每个网络设备都需要单独配置。
SDN的工作过程,是基于Flow(流)的。SDN控制器和下级节点之间的接口协议,就是OpenFlow。所以,只有支持OpenFlow的设备,才能被SDN控制器管理。
总的来说,采用SDN之后,整个数据网络的灵活性和可扩展性大大增加。同时,SDN简化网络配置、节约运维成本的特点。
NFV
NFV就是网络功能虚拟化。NFV的概念是随着云计算和SDN的出现而提出的。
网络功能虚拟化,这个词其实可以拆开来理解:网络功能是指移动通信网络设备的功能。而虚拟化呢,是一个云计算技术。
然后要知道,我们的移动通信网络,是由很多网元设备组成的。
以前,这些网元都是各个厂家自行设计制造的专用设备。但是现在,通信行业都在使用x86通用服务器,替换了厂商专用服务器。
所以 NFV的核心思想:就是把网络硬件设备,通过虚拟化技术,集成到通用的x86架构的服务器上面。
简单来说,就是把分散的网络硬件产品,集成到一个大盒子里面。然后每种产品相当于一个插件来使用。这样,对于服务提供商来说,只需要对设备进行一次性的投入,再通过软件,赋予硬件单独的网元的功能,就可以快速的实现整个网络的搭建。所以,运营商不再需要购买专用硬件设备,降低了硬件资金投入。
SDN & NFV
SDN和NFV的区别:
SDN更多的是一种概念,一个框架,而NFV是实际的应用。
打个比方,假如道路的宽窄是一定的,但是拥堵程度却各不相同。
SDN扮演的角色就是,让服务商通过判断不同时间段,或者不同区域的流量,来让用户“改道而行”,选择一条畅通的线路,然后提升效率。而NFV所能做到的,是在这个道路上,快速的新建一条道路。并且,在你通过之后,把道路取消,然后把资源释放到资源池,供其他网元应用。
还有就是,SDN中的虚拟化技术,和NFV有本质的区别。SDN虚拟的是设备,而NFV虚拟的是功能。
存储虚拟化 (Storage Virtualization)
存储虚拟化是在存储设备上加入一个逻辑层,通过逻辑层访问存储资源。
对管理员来说,可以很方便的调整存储资源,提高存储利用率。
对用户来说,集中的存储设备,可以提供更好的性能和易用性。
实现方式
存储虚拟化的实现方式一共三种:
裸设备+逻辑卷(juàn)
是最直接的存储控制方式,直接在通用块层上,划分存储块,通过管理这些单元,实现卷的维护操作。
逻辑卷
逻辑卷是在磁盘分区和系统之间增加一个逻辑层。当文件系统的容量觉得不够时,可以向逻辑卷增加新的分区来实现扩大容量的目的,而当文件系统过大又浪费时候,可以选择去除一些基本没有用的磁盘分区,用来减少容量。
其中,Linux就使用了LVM(逻辑卷管理器,Logical Volume Manager)。
从上图里,就能大概的理解一下物理卷,逻辑卷组,逻辑卷的概念:
物理卷 (Physical Volume, PV):物理卷可以是一个磁盘,也可以是磁盘中的一个分区。它为LVM提供了存储介质。
逻辑卷组 (Logical Volume Group, LVG):多个物理卷可以被逻辑的放到一个卷组里面。逻辑卷组在逻辑上是连续的,它可以由多块物理卷组成,然后就会组成一个逻辑上连续的大存储池,这就是VG。
物理区块 (Physical Partition):它是在逻辑上,再把一个卷组分割成连续的小块(注意,是逻辑上的分割,而不是物理上) 。
逻辑区(logical Partition):物理区块可以再次组成逻辑区块。
逻辑卷 (Logical Volume, LV): 若干逻辑区块,再经过连续组合成卷组,也就是LVM所提供的最终可用来存储数据的单位。(比如/home或者/usr等)。
存储设备虚拟化
通过存储设备的能力,实现卷的维护操作。
该技术的优点:和主机无关,不占用主机资源。
该技术的缺点:一般只能实现对本设备内磁盘的虚拟化。
主机存储虚拟化+文件系统
是指主机通过文件系统管理虚拟机磁盘文件。是目前业界采用较多的虚拟化方式。
应用虚拟化(Application virtualization)
大多数 IT 部门的一个共同点:需要向大量用户交付各种各样的应用程序。
但我们安装的应用程序越多,我们就越有可能看到冲突、兼容性问题和其他交付障碍。另外,应用程序可能需要不同版本的系统文件。
这时候就有了应用虚拟化,他就允许我们打包应用程序,然后创建一个虚拟应用。虚拟应用很容易部署到多台机器上,而且它不管你的现有的应用程序或系统的配置,它都可以工作。
应用虚拟化通常包括两层含义:
- 应用软件的虚拟化,就是上面说的情况
- 桌面的虚拟化
桌面虚拟化技术:把应用程序的人机交互逻辑 (应用程序界面、键盘及鼠标的操作、音频输入/输出、读卡器、打印输出等),从计算逻辑里分离出来。所以,客户端就不用安装软件,通过网络,就能连接到应用服务器上。
例子
因为疫情的原因,很多企业都要居家办公。
对于大部分企业,开始工作的前三步就是:打开电脑,连上企业 VPN,开始办公。
但是对于某些企业,这种远程工作模式就不太适用了,例如:设计院为了保护企业知识产权,是不允许员工把设计图纸下载到笔记本电脑上的;金融企业需要保护客户的业务机密,要求对用户的数据严格保密。
还有一个应用场景就是医院:医生可以在家里远程查看大型高分辨率医疗影像文件。通常,这些文件体积都很大,下载需要花很长时间,所以,在虚拟桌面上远程查看,可以大大提高了诊断效率。
另外,在医院里,为了节省有限的防护服,在非必要情况下医生也避免进入新冠肺炎病区,在隔离区通过远程访问虚拟桌面也可以完成诊断工作。
上面这些场景就是桌面虚拟化典型的应用场景。
VMware有个服务叫做VMware Horizon (以前称为 Horizon View)。可以为用户提供远程办公桌面环境。他的办公桌面运行在数据中心的服务器上,员工通过笔记本电脑上的 Horizon Client 来访问远程桌面。注意,企业的敏感数据始终保存在服务器上,这样就可以保证数据安全。
技术比较
4种虚拟化技术的比较。
其中,服务器虚拟化、桌面虚拟化相比来说,比较成熟。
总结
服务器虚拟化
服务器虚拟化最常见,就是把一台计算机(服务器)虚拟为多台逻辑计算机(就是虚拟机,Virtual Machine,VM)。
存储虚拟化
就是把硬盘划分LUN。
对于数据中心而言,就是把资源,集中形成池,按照客户需要,提供给物理机或者虚拟机需要的存储资源。
⚠️:LUN(Logical Unit Number,逻辑单元号,读作line)。比如说,2块500G的硬盘可以"虚拟化"成4块250G的硬盘,这4块硬盘就称为4个LUN。每个LUN在OS看来就是一块"真实"的硬盘。
⚠️:LUN这个概念要和上面讲的卷区分,卷对应的是我们常说的分区,比如说windows下的C盘、D盘,Linux下的/分区、/var分区,一个分区就是一个卷。
网络虚拟化
就是要节省物理主机的网卡设备资源。
应用虚拟化
就是上面写的:应用软件的虚拟化和桌面的虚拟化。
系统虚拟化
系统虚拟化的核心思想:用虚拟化软件,在一台物理机上虚拟出一台或多台虚拟机。
系统虚拟化分两种:
1. PC/ 服务器虚拟化:其实就是当你用VMware station的时候,可以在Windows 系统上建立Linux 系统。
2. 桌面虚拟化:主要解决的就是桌面环境。比如:苹果和Windows的桌面环境就不一样,或者手机的桌面也是不一样的。就可以用虚拟化技术,使用一台物理机,虚拟出不同的桌面环境。
步骤
(1) 利用虚拟化评估工具,实现资源整合:
就是要使用容量规划工具,决定每个系统的配置。
利用虚拟化评估工具,决定整合方案。
然后根据总容量需求,采用虚拟化进行整合。
(2)在服务器虚拟化的基础上,虚拟化I/O和存储:
其实就是实现存储虚拟化和I/O虚拟化。
其中,I/O虚拟化,如果按设备类型分的话,可以分为字符设备 I/O 虚拟化(键盘、鼠标、显示器)、块设备 I/O 虚拟化(磁盘、光盘)和网络设备 I/O 虚拟化(网卡)等。
(3)实现虚拟资源池的统一管理:
在虚拟化平台搭建完成后,还需要有效的管理。
(4)从虚拟化迈向云计算,通过云计算实现跨系统的资源动态调整:
云计算是系统虚拟化的最高境界。