笔者在研究生阶段研究云计算方面的课题,期间磕磕碰碰,补知识,虽然云计算已经不是一个新名词,网上也有许多资料和博文介绍,写得也非常到位,但笔者希望以自己的理解对云计算方面的知识做一些整理和总结,同时以图文并茂的方式来分享一些个人见解。因此笔者准备开始撰写云计算方面的博文,如若哪里写得不到位,还请各位读者指出,谢谢。
摘要: 本文主要介绍云计算中的虚拟机,以及虚拟机在数据中心中的使用场景。为了使读者能够对虚拟机有个清晰直观的认识,笔者将先以一个示例介绍物理计算机(电脑)的核心组成部件以及其运作方式。其后,能够让读者平滑地过度理解虚拟机,以及虚拟机的本质。最后再介绍数据中心中虚拟机的使用场景及其部署方式。
1. 物理计算机组成结构
平时我们在购买电脑(即物理计算机)的时候,导购员总会询问你对于电脑需要什么样的配置,内存多大,CPU要什么型号等。其实导购员询问的这些信息基本就是一台电脑的硬件组成部分,那么一台电脑的组成有哪些呢?根据冯诺依曼体系结构(如下图1(a)所示,下图1(b)源于网络),电脑的核心组成部分如下:
- 中央处理器(即通常说的CPU)
- 存储设备(通俗来讲就是“内存”和“硬盘”两部分)
- 输入设备(如键盘鼠标等)
- 输出设备(如显示器)
对于一台电脑是如何运作的,笔者将尝试用两种方式来阐述,一种为相对官方的方式,另一种将以人射箭为例介绍。
较为官方的阐述:如上图1(a)所示,操作电脑的人员通过输入设备,将指令输入计算机,CPU从存储中读取应用程序在存储中的相关数据,在利用算数逻辑单元对输入数据进行运算处理,得到运算结果,最后再通过输出设备将结果输出。对于计算机或者CPU来说,所有的功能无非都是对“0”或“1”这样的数据进行处理,但是这些数据对于用户来说已经经过各种图形界面的处理让用户看到形象直观的结果。
通俗示例的阐述:我们以上图1(b)的美女射箭为例对照着理解图1(a)的冯诺依曼体系结构。首先,我们明确射箭的过程是需要“眼睛”、“手+弓+箭”、“大脑”、“大脑知识库”的辅助。这是因为:
- 眼睛(对应输入设备):其职能为将看到的靶子作为输入传送给大脑;
- 大脑(对应CPU):将看到的靶子用于处理“射箭”这项功能;
- 大脑知识库(对应存储):射箭这项技能并非人生而就会的,需要经过训练和学习将其掌握,掌握到此项技能后大脑就会将这项技能存储于大脑知识库中,以便在需要的时候取出来运用;
- 大脑(对应CPU):大脑从知识库中取出射箭这项技能后,会将眼睛输入的靶子信息(位置,大小等)结合于射箭这项技能进行处理,得出一个计算(处理)结果为“需要用手以多大的力道,什么角度将弓箭射出去”传输给手;
- 手+弓+箭(对应输出设备):当手收到来自大脑的指令,则它会根据大脑给出的处理结果,以确定的力道、确定的角度将手中的弓箭释放出去。
因此,我们做个总结:计算机(电脑)提供的各种软件服务,其实都可以抽象为“输入数据 ”–>“存储数据”–>“调用处理这些数据的逻辑功能”–>“计算并处理数据”–>“将处理结果输出”,这个过程中无非就是需要用到CPU、存储这样的硬件设施。
2. 虚拟机
在上一章节,我们对物理计算机(电脑)的组成结构以及运作过程做了形象直观的介绍,基于此,我们可以对虚拟机进行介绍了。虚拟(Virtual),笔者理解为虚假的,非物理客观存在的意思,相对的为物理客观存在。对比于我们肉眼可见、客观存在的计算机(电脑),虚拟机则是并非物理客观存在、肉眼不可见的计算机,但它具备有和物理计算机相同功能(即你无需看到客观存在的一个物理主机,无需知道有客观存在的CPU和存储等硬件设备,也可通过软件的形式运行一台电脑)。常见的虚拟化平台软件有“VMware Workstation”、“VirtualBox”等,读者若是感兴趣,可以自行搜索进行安装使用,通过它们,读者能够在Windows 10/8/7/XP等系统中,创建一个虚拟机,并在虚拟机中安装Windows 10/8/7/XP或者Linux等系统(即,如在win10下再运行一个win8的系统)。
PS:有了这样的概念,我们也大致可以理解“云计算”这个词,首先这个词中间的“计算”即是指计算机(电脑)的计算功能,其次“云”这个词可以指规模大、组成复杂、组成成分大小不同,且云后面是什么用户不可知或无需关心。
讲了那么多概念,还是直接上一个图来解释吧,请读者看图 2。虚拟机虽然为一个不客观存在的计算机(电脑),然而它在逻辑上也存在于物理计算机一样的组成元素。如果读者尝试用“VMware Workstation”创建了一个虚拟机,则读者可以在创建虚拟机所选的路径中看到一个以该虚拟机为名命名的一个文件夹(即图 2的黄色文件夹所示),在此文件夹中,包含有各种文件,如:虚拟机的配置文件(VMName.vmx中记录着虚拟机配备了多少内存,多强的CPU,多大的硬盘空间,什么样的网卡等信息)、BIOS配置文件(VName.nvram)、日志文件(vmware.log文件记录着虚拟机操作等日志信息)、磁盘文件(VMName.vmdk文件即写入了该虚拟机中存储了的所有文件的内容,因为所有的文件本质上就是0101这样的二进制数据)等。
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/478c4e0796b42a285ed8ee994fe452fd.png)
如果上面这个图依然十分抽象,读者可以看一下实际的虚拟机(如图 3所示),该图左侧为读者使用“VMware Workstation”创建的三个虚拟机,分别是用CentOS,Windows 7和Windows XP的系统镜像创建的,该图右侧为进入Windows 7虚拟机对应的“Win7”文件夹后所看到的各种虚拟机文件,该图下方部分为上述虚拟机在VMware Workstation中所呈现出来的形式(其中Windows 7的虚拟机对应读取的是上述“Win7”文件夹)。
3. 虚拟机和数据中心
介绍完物理计算机和虚拟机后,我们就可以来了解一下在数据中心中,虚拟机的组成结构是什么样的了,直接上图,请读者看图 4,该图展示了数据中心的逻辑架构。以从下往上,从左往右的角度观察此图:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/b553887b318c127bec5d4c2aae48e802.png)
图 4第一层:SAN存储
SAN(Storage Area Network)存储即存储区域网络,读者可以将其理解为网络磁盘(类似百度云存储,Google云存储),也可以理解为原本在物理计算机上的硬盘存储被拿出来组成了一块大的存储区域,然后物理计算机通过网络的方式来访问这些存储设备。此外,根据上述介绍过的虚拟机,我们可知虚拟机本质为各种虚拟机文件构成的集合,每个虚拟机对应为一个文件夹,因此在此部分中,黄色文件夹表示各个虚拟机所对应的文件夹,存储在这块区域中。图 4第二层:物理服务器
该层面则为我们之前所提到的物理计算机(即物理服务器)群体,可通过路由器和交换机等网络设备将这些物理服务器连接起来。图 4第三层:虚拟化平台
它并非以物理形式存在的,读者可以将它当成一个操作系统或者软件来理解,一般这类虚拟化平台系统/软件有VMware ESXi、KVM、XEN等。虚拟化平台的主要作用就是将物理机所拥有的资源隔离出来创建虚拟机用。比如说内存这样的硬件资源,虚拟化平台则可以将内存的地址空间从逻辑上划分成多个区域进行分配。这么说可能有点抽象,我们可以假象一个包租公/包租婆手里拥有一栋商品房(对应内存地址空间),当有人过来需要使用房子的时候,包租公/包租婆就会把某一层(假设第一层,对应为内存的地址空间)分配给他,让他使用并记录下这一层已经被人使用,那么当再有别人来租房的时候,包租公/包租婆就不会把第一层分配给其他人。这里的包租公/包租婆则可以对应为虚拟化平台这个角色。图 4的最顶层:虚拟机
虚拟机是依赖于第三层的虚拟化平台才得以建立的,其组成与本质我们已在前面的章节介绍过。图 4的最右侧:中心资源管理节点
每个物理服务器上安装了ESXi平台对该物理服务器进行资源管理和调度,但是为了能够使整个数据中心的资源能够被高效地利用起来,则需要一个中心控制节点来对各个ESXi节点的资源进行调度和管理,通过它能够做负载均衡(Load Balance)或者故障迁移等操作。
在有了这样的基础架构上,数据中心则能够为用户提供虚拟机租赁服务,用户能够在诸如阿里云服务、腾讯云服务、亚马逊云服务或者美橙互联这样的第三方平台,根据自己的需求创建出自己的虚拟机。如今数据中心已经有较为成熟的资源调度方案,能够做到为用户的虚拟机提供按使用量计费,用多少支付多少的服务,一方面节约了用户的开销,另一方面同时能够提高数据中心的资源利用率。
4. 结束语
本偏博文以通俗易懂地方式介绍了虚拟机、物理计算机和数据中心的架构,虽然能够让读者形象地去理解它们,但其底层基础技术和原理仍有非常多需要学习的地方,如果读者希望能够很好地掌握和理解它们,建议多实践实践,简单一点的可以通过VMware Workstation创建一两个虚拟机玩玩。再深层一次点的可以装一下VMware的ESXi,模拟着创建一个数据中心,但是这个操作需要读者拥有较高配置的计算机来做尝试。同时也需要读者翻阅一些书籍以理解一些基础概念,Thomas Erl所著的《Cloud Computing Concepts, Technology & Architecture》则是一本较为粗浅易懂的书籍,有中文版《云计算概念、技术与架构》。至于在做数据中心的研究者们,可以在谷歌学术上检索一些文献来了解资源分配,Green Computing,生存性等问题,IEEE Transaction有如下几个可以关注一下:
- IEEE Transactions on Services Computing
- IEEE Transactions on Parallel and Distributed Systems
- IEEE Transactions on Cloud Computing
- IEEE Transactions on Computers
最后,欢迎各位读者指出博文中的错误,留言给出一些学习或者研究方面的宝贵建议。