云计算与大数据技术应用
上QQ阅读APP看书,第一时间看更新

3.1 虚拟化技术简介

虚拟化技术其实很早以前就已经出现了,虚拟化的概念也不是最近几年才提出来的。虚拟化技术最早出现于20世纪60年代,那时候的大型计算机已经支持多操作系统同时运行,并且相互独立。如今的虚拟化技术不再是仅仅只支持多个操作系统同时运行这样单一的功能了,它能够帮助用户节省成本,同时提高软硬件开发效率,为用户的使用提供更多的便利。尤其近年来,虚拟化技术在云计算与大数据方向上的应用更加广泛。虚拟化技术有很多分类,针对用户不同的需求涌现出了不同的虚拟化技术与方案,如网络虚拟化、服务器虚拟化、操作系统虚拟化等,这些不同的虚拟化技术为用户很好地解决了实际需求。

3.1.1 虚拟化技术的概念

虚拟化技术是一个广义的术语,对不同的行业或不同的人有着不同的意义。在计算机科学领域中,虚拟化技术意味着对计算机资源的抽象。虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。也就是说,虚拟化技术是模拟真正的(或者称物理的)计算机资源,例如CPU、内存、存储、网络等用户可见的物理的硬件资源。用户通过虚拟化技术在使用这些资源时,除了不能物理接触以外,其他都与使用物理计算机没有任何区别。

虚拟化技术可以实现大容量、高负载或者高流量设备的多用户共享,每个用户可以分配到一部分独立的、相互不受影响的资源。每个用户使用的资源是虚拟的,相互之间都是独立的,虽然这些数据有可能存放在同在一台物理设备中。以虚拟硬盘来说,用户使用的是由虚拟化技术提供的虚拟硬盘,而这些虚拟硬盘对于用户来说就是真实可用的硬盘,这些虚拟硬盘在物理存储上可能就是两个不同的文件,但用户只能访问自己的硬盘,不能访问别人的硬盘,所以他的各自的数据是安全的,是相互不受影响的。甚至各个用户使用的网络接口都是不一样的,所使用的网络资源也是不一样的,使用的操作系统也不一样。

使用虚拟化技术可以将很多零散的资源集中到一处,而使用的用户则感觉这些资源是一个整体。如存储虚拟化技术则可以实现将很多的物理硬盘集中起来供用户使用,用户使用时看到的只是一块完整的虚拟硬盘。

使用虚拟化技术可以动态维护资源的分配,动态扩展或减少某个用户所使用的资源。用户如果产生了一个需求,如需要添加更多的硬盘空间或添加更多的网络带宽,虚拟化技术通过更改相应的配置就可以很快地满足用户的需求,甚至用户的业务也不需要中断。

随着虚拟化技术在不同的系统与环境中的应用,它在商业与科学方面的优势也体现得越来越明显。虚拟化技术为企业降低了运营成本,同时提高了系统的安全性和可靠性。虚拟化技术使企业可以更加灵活、快捷与方便地为最终的用户进行服务,并且用户也更加愿意接受虚拟化技术所带来的各种各样的便利。为更加直观地感受与认识虚拟化,下面对一个计算机系统有无使用虚拟化技术进行一个简单的对比,如图3-1所示。

图3-1 虚拟化软硬件框架对比

a) 未应用虚拟化技术 b) 应用虚拟化技术

如图3-1a所示,未应用虚拟化技术时,操作系统直接安装在硬件上,而应用程序则运行在操作系统中。应用程序独占整个硬件平台;应用虚拟化技术时,则多了一层虚拟化中间层,用于提供对硬件的模拟,这样在该虚拟化层上可以装多个操作系统和多个应用程序,它们之间相互独立,如图3-1b所示。

虚拟化技术可以同时模拟出多个不同的硬件系统,而操作系统则安装在虚拟出来的硬件系统之上,操作系统与应用程序将不再独占整个硬件资源,从而实现了多个操作系统可同时运行的效果。

一个计算机系统在应用虚拟化技术前后的对比,如表3-1所示。

表3-1 虚拟化技术应用前后的对比

3.1.2 虚拟化技术的分类

虚拟化是一个抽象的概念,针对不同的行业,不同的需求,可以有不同的解决方案。现在最流行的虚拟化技术包括服务器虚拟化、网络虚拟化、存储虚拟化、操作系统虚拟化等。

虚拟化技术根据用途不同,也形成了自己的分层结构,如图3-2所示。从下往上,分别是网络虚拟化、存储虚拟化、服务器虚拟化、操作系统虚拟化、服务虚拟化、桌面虚拟化、应用程序虚拟化以及用户体验虚拟化。每一层都有相对应的用途范围,不同的用户根据需求,选择不同的虚拟化技术即可。这个分层结构,实际也就是虚拟化技术的一种分类。

图3-2 虚拟化技术的分类

1.网络虚拟化

网络虚拟化将网络资源进行整合,简单来说,就是将硬件与软件的网络设备资源,以及网络功能整合为一个统一的、基于软件可管理的虚拟网络。网络虚拟化是一种包含至少部分是虚拟网络连接的计算机网络。虚拟网络连接是指,在多个计算设备间不包含物理连接,而是通过网络虚拟化来实现的网络连接。有两种常见的虚拟网络:基于协议(如VXLAN、VLAN、VPN和VPLS等)的虚拟网络和基于虚拟设备(如在Hypervisor内部的网络连接虚拟机)的虚拟网络。网络虚拟化经常应用到大型的服务器中,如云计算服务器。当前在网络虚拟化中比较成熟的整体方案则是软件定义网络(Software Defined Network,SDN)与网络功能虚拟化(Network Function Virtualization,NFV)等。

SDN起源于园区网,成熟于数据中心,关注于网络控制面和转发面的分离,处理的是OSI模型中的2-3层,SDN优化网络基础设施架构,如以太网交换机,路由器和无线网络等;NFV始于大型运营商,关注网络转发功能的虚拟化和通用化,处理的是OSI模型中的4-7层,NFV优化网络的功能,如负载均衡,防火墙,WAN网优化控制器等。

2.存储虚拟化

存储虚拟化,即整合所有存储资源为一个存储池,对外提供逻辑存储接口,用户通过逻辑接口进行数据的读写,不论有多少个硬件存储设备,对外看到的只有一个。存储虚拟化最通俗的理解就是对存储硬件资源进行抽象化表现,通过将一个或多个目标(Target)服务或功能与其他附加的功能集成,统一提供全面的功能服务。

对于用户来说,虚拟化的存储资源就像是一个巨大的“存储池”,用户不会看到具体的磁盘,不知道有多少磁盘,也不必关心自己的数据具体存储在哪一块磁盘中。存储虚拟化的示意图如图3-3所示。

图3-3 存储虚拟化

经过存储虚拟化后,用户看到的就是一块硬盘,而与硬盘的交互也只需要与这一块硬盘进行交互即可,至于用户最终的数据存放到哪里,则由存储虚拟化管理程序决定。

存储虚拟化的实现主要有两种方式:块虚拟化(Block Virtualization)和文件虚拟化(File Virtualization)。块虚拟化通过存储区域网络(Storage Area Network,SAN)将远程的硬盘块挂载到本地,如Internet小型计算机系统接口(Internet Small Computer System Interface,iSCSI)。然后再通过逻辑卷管理(Logical Volume Manager,LVM)的方式将这些硬盘块组合到一起成为一个新的硬盘。文件虚拟化是通过SAN将远程的文件系统路径挂载到本地,如NFS与SMB(Samba文件服务器),在本地看到的则是指定路径下的文件,而并非一个硬盘块。

3.服务器虚拟化

服务器虚拟化有时也称为平台虚拟化,是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,用户不再受限于物理上的界限,实现CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力。

服务器虚拟化实际上是将操作系统和应用程序打包成虚拟机(Virtual Machine,VM),从而让操作系统和应用具备良好的移动性。虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在虚拟机里运行的操作系统称为客户机操作系统(Guest OS),而管理这些虚拟机的平台称为虚拟机监视器(Virtual Machine Monitor,VVM),也称为Hypervisor。运行虚拟机监视器VMM的操作系统被称为主机操作系统(Host OS)。VMM是虚拟机技术的核心,它是一层位于操作系统和计算机硬件之间的代码,用来将硬件平台分割成多个虚拟机。VMM不仅可以管理虚拟机运行状态,还可以对虚拟机进行定制,如CPU数量、内存大小等。

并非所有的服务器虚拟化都需要Host OS。有些虚拟化产品可以直接运行在裸机中,即运行在硬件之上,如VMware ESX系列,Xen Server等虚拟化产品。因此,从是否包含HostOS主机操作系统的角度可将服务器虚拟化分为两种类型,类型1(裸金属架构)与类型2(寄居架构),如图3-4所示。

图3-4 服务器虚拟化的两种类型

● 裸金属架构:Bare-Metal Architecture,虚拟化层直接运行在硬件上,即裸机上,这种架构也称为裸金属框架。Hypervisor直接安装到裸机上,运行效率可以提高很多,用户通过控制台或者网页对虚拟化层进行管理。对于用户来说,每个用户都会感觉到自己在一台独立的、与其他用户相隔离的计算机上进行操作,尽管事实上为每个用户提供服务的都是同一台机器。在此种情况下,一台虚拟机就是由一个潜在的控制程序管理的操作系统。如VMware ESX,Xen等。

● 寄居架构:Hosted Architecture,虚拟化层运行在一个操作系统(Host OS)中。虚拟机需要以应用程序的方式安装到操作系统中,并以应用程序的方式运行,即它是一个应用程序,在操作系统中可以看得到应用程序所运行的进程情况;虚拟机的运行依赖主机当前的物理资源以及对虚拟化支持的情况,并且运行效率低于裸金属架构。

正常来说,应该还有一种类型,兼容了这两种类型的特性,如KVM(Kernel-based Virtual Machine)虚拟机。但目前是将KVM归类到了寄居架构。

从服务器的个数及虚拟应用角度来看,服务器虚拟化还可以分为另外一种方式:“一虚多”、“多虚一”和“多虚多”。“一虚多”是一台服务器虚拟成多台服务器,即将一台物理服务器分割成多个相互独立、互不干扰的虚拟环境。“多虚一”就是多个独立的物理服务器虚拟为一个逻辑服务器,使多台服务器相互协作,处理同一个业务。另外还有“多虚多”的概念,就是将多台物理服务器虚拟成一台逻辑服务器,然后再将其划分为多个虚拟环境,即多个业务在多台虚拟服务器上运行。

从虚拟化的程度来看,服务器虚拟化还可分为:全虚拟化,半虚拟化和硬件辅助虚拟化。

● 全虚拟化(Full Virtualization):是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、网卡、显示器等,即完整地模拟了一台真实的计算机硬件设备。这样在虚拟机设备中运行的操作系统不需要做任何修改就可以正常运行,就像是在真实的物理环境中一样。

● 半虚拟化(Para-Virtualization):半虚拟化的出现是由于全虚拟化在执行有些权限操作时由于执行时间过长,不能满足需求而出现的。为了减少客户机的执行时间,半虚拟化的方式允许客户机在执行某些耗时的指令时,直接运行在真实的宿主机中,或者真实的硬件上,这样可以提高执行效率,减少指令的执行时间。为了实现半虚拟化,需要对客户机操作系统进行一些修改,使得客户机在真正运行时可以通过VMM提供的半虚拟化API,使得指令直接运行在真实的硬件上,或宿主机中。

● 硬件辅助虚拟化(Hardware-assisted Virtualization):这是为CPU提供的功能,专门用于提高虚拟机运行的效率,使得虚拟可以再快速的执行特权指令,减少过多的上下文切换与模拟。常见的硬件辅助虚拟化技术有Intel-VT,AMD-V等。它们提供特定的指令,而VMM则可以利用这些特定的指令提高虚拟机运行的效率。现如今,在X86系列平台中,有很多虚拟化技术都用到了这项辅助功能,如KVM、VMware及Xen等都用到了这些特殊指令。

4.操作系统虚拟化

操作系统虚拟化是指在同一操作系统上,同时运行单个或者多个独立的用户,他们都有自己的运行空间。每个用户都只能运行自己权限范围内的应用,每个用户都相互不受影响。每个用户可以通过远程桌面访问自己的资源,但共享同一个操作系统。操作系统虚拟化示意图如图3-5所示。典型代表有:Docker、Windows Server 2008、Ubuntu Server等。

图3-5 操作系统虚拟化示意图

5.服务虚拟化

服务虚拟化是一种虚拟的应用,它与硬件无关,为软件实现。服务虚拟化对终端用户来说是隐藏的,简单来说就是通过虚拟化提供相应的服务,如防火墙(Firewall)、负载均衡(Load Balance)、数据库、数据存储等。如防火墙服务虚拟化为FWaaS(Firewall as a Service)服务,负载均衡虚拟化为LBaaS(Load Balance as a Service)服务。

6.桌面虚拟化

桌面虚拟化是指将计算机的终端系统(也称为桌面)进行虚拟化,以达到桌面使用的安全性和灵活性。可以通过多种设备,如PC、平板电脑以及手机,在任何地点、任何时间通过网络访问个人的桌面系统。

用户在同一个物理设备上可以同时访问多个不同的桌面系统,这些桌面系统的操作系统可以是相同的,也可以是不同的。而服务器将用户的桌面独立出来,每个用户都有自己的用户空间,相互不影响。独立出来的桌面与相应的应用软件相配合则可以实现用户在远程访问桌面。常见的使用方式是用户远程连接或者使用瘦客户机(Thin Client)对虚拟桌面进行访问与使用。

7.应用虚拟化

应用虚拟化是指同一个应用可以在不同的CPU体系架构、不同的操作系统上正常地运行。应用虚拟化也是一种软件技术,它是一种与底层操作系统无关的封装。应用虚拟化可以实现在不同的操作系统、不同的CPU架构中,应用程序只写一套代码即可处处可运行。如JVM(Java Virtual Machine)支持Java代码,使用Java实现的应用程序只需要在系统中搭建好JVM环境则可以正常运行。同样的,还有其他很多软件也支持这类应用虚拟化,如Python、Wine等(也是一种应用虚拟化,在Linux平台中比较常见。如果想要在Linux平台上运行Windows应用程序,如果不安装虚拟机,则可以安装一套Wine环境,然后就可以直接运行Windows应用程序)。

8.用户体验虚拟化

用户体验虚拟化,有时也称用户虚拟化(User Virtualization),是指在不同的设备中,如笔记本、平板电脑或手机,用户所看到的内容或者界面都是一样的,在其中一台设备中的修改,在另一台设备上看到的配置或修改结果是一致的。用户的相关信息与应用的配置都会被同步到相应的用户设备中。

3.1.3 虚拟化技术的优势和劣势

1.虚拟化技术的优势

虚拟化技术的优势主要体现在以下几个方面。

(1)减少物理资源的投入,节约成本

当用户需要不同的操作系统或更多的计算机设备资源时,直接通过VMM添加几个不同的操作系统即可,不再需要使用时可直接关闭或者删除相应的资源。

(2)虚拟数据资源迁移方便

可以很方便地将虚拟数据资源(一般为虚拟机生成的数据)迁移到其他数据中心,而虚拟数据资源不受影响。

如果涉及数据的迁移或者设备损坏,则无须迁移物理设备,只要将VMM生成的数据备份到其他数据中心,然后再通过VMM管理起来就可以了,而以前的数据与服务不会受到任何影响。

(3)提高物理资源的使用率

传统的服务器主机的CPU平均使用率都在10%以内,根本就没有使CPU的使用达到一个理想的状态,这是极大的资源浪费。使用虚拟化技术,可以使多台服务器部署到同一台物理设备上,这样可以提高这台物理设备的使用率,显著减少成本开销。

(4)更加环保,节省能源

通过应用虚拟化技术,可以减少物理硬件的投入,从而降低物理硬件所使用的电能以及占地空间,从而更加的环保。

(5)易于自动化维护与操作,减少维护成本

虚拟化技术通过软件的方式来模拟物理设备,只要是软件的方式实现的虚拟资源,就可以通过相应的接口进行自动地维护与管理,可以提高工作效率,减少维护成本。

(6)数据安全更有保障

每个虚拟化出来的设备在物理设备中都会有相应的文件产生,管理员只需要对数据进行相应的备份,并定期管理,就可以保证这些数据的安全。如果出现了不可抗拒的情况,如自然灾害等情况,毁坏了物理设备,则管理员只需要将已经备份的数据恢复到新的设备中即可恢复用户的数据。如果架构得当,甚至都不会中断用户工作就可以将系统进行更新与替换。

当然,虚拟化技术不是万能的,也有它解决不了的问题,并不是适合所有的用户。就目前虚拟化技术的发展来看,仍然存在缺陷。

2.虚拟化技术的劣势

1)目前业界没有统一的虚拟化技术标准与平台,没有开放的协议。市场上有很多不同的虚拟化技术提供商,如Microsoft、VMware、Xen等。它们所使用的虚拟化技术的运行效果并不一样,相互并不兼容。

2)如果没有对数据进行备份,应用虚拟化技术会存在一定的风险。虚拟化技术虽然可以实现数据备份,但它毕竟还是建立在真实的硬件系统之上的,如果将多个应用与服务器放到同一台物理设备上之后,如果该物理设备出现问题,并且没有冗余的物理设备作为备份,则所有应用与服务都将无法使用。

3)虚拟数据中心的迁移,特别是对在线服务的迁移,对用户影响巨大。因为它的数据量大,应用程序繁多,结构复杂,一旦迁移,有可能会造成很多不可预知的影响。

3.1.4 虚拟化技术与云计算

虚拟化技术是云计算的重要支撑技术。云计算是基于互联网的相关服务的增加、使用和交付模式,在云计算中,通过互联网提供动态、易扩展的虚拟化资源。通过虚拟化技术,可以将应用程序和数据在不同层次以不同的方式展现给用户,为云计算的使用者和开发者提供便利。

虚拟化的主要功能是把单个资源抽象成多个给用户使用,而云计算则是帮助不同部门(通过私有云)或公司(通过公共云)访问一个自动置备的资源池。借助虚拟化技术,用户能以单个物理硬件系统为基础创建多个模拟环境或专用资源。云计算是由多种规则和方法组合而成,可以跨任何网络向用户按需提供计算、网络和存储基础架构资源、服务、平台及应用,这些基础架构资源、服务和应用来源于云。简单来讲,云就是一系列自动化软件进行管理的虚拟资源池,旨在帮助用户通过支持自动扩展和动态资源分配的自助服务,按需对这些资源进行访问。

云计算提供服务,虚拟化技术是云计算的技术支持。在云计算的部署方案中,虚拟化技术可以使其IT资源应用更加灵活。而在虚拟化技术的应用过程中,云计算也提供了按需所取的资源和服务。在一些特定场景中,云计算和虚拟化技术无法剥离,只有相互搭配才能更好地解决客户需求。通过虚拟化技术,云计算把计算、存储、应用和服务都变成了可以动态配置和扩展的资源,从而才能够实现在逻辑上以单一整体的服务形式呈现给用户。因此,虚拟化技术是云计算中极其重要、最为核心的技术原动力。