前言
到底什么是云(云计算)
有很多关于云的介绍,然而,大都是用比喻的形式来介绍云的属性。比较有名的比喻是餐馆、和电网。但是,云毕竟不是餐馆、或电网,如果只有这些比喻,仍然不清楚到底什么是云。本文试图不用任何比喻,直接从普通的PC电脑入手,逐步递进,来介绍云的构成。你只需要具有初中文化,并对CPU、内存、硬盘等计算资源有些基本的概念,就可以了。
一、传统的电脑
当你启动一台个人电脑(PC机)时,电脑所做的事,就是把硬盘上的操作系统(OS,本文以微软的Windows 8为例,但也可以是Unix、Linux等等)的一些基本的控制程序调入到电脑的内存中去。一旦这个过程完成,这台电脑就完全由Windows 控制了。你所谓的电脑,其实就是你在上面工作的Windows。
对Windows而言,它所赖以运行的,只有电脑的处理器(CPU)、内存、和存储设备(硬盘)这三个要素(或者说三项资源)。电脑还有机箱,但那只是起着封装、固定、再加供电的作用;电脑还有主板,但那只是起着电脑内各主要部件通信连接的作用。当然,你可能还需要网络连接, 但那只是一项外在资源,不是Windows本身所必需的。作为PC机,你还需要键盘和显示器等外部设备来直接在机器上工作。如果是服务器,则不需要键盘和显示器,一切都可以是远程登录访问。
所以,一台电脑实质上就是在CPU、内存、和硬盘上运行的Windows。当打开Windows 的任务管理器,你就会发现,CPU和内存大部分是闲置的。特别是CPU,其利用率通常不到10%。Windows在硬盘占有的空间一般就是几个GB。 也就是说,一个Windows独占了电脑的全部资源,而大部分资源又都是闲置的。
那么,有没有这种可能:不让一个Windows单独控制一台机器,而是在一台机器上安装多个操作系统,并且让它们同时地运行?
二、虚拟化
当安装一台电脑的时候,你不再是安装普通的Windows,而是安装一个资源调度程序,也叫“监控程序” (Hypervisor)。这个监控程序很小。取决于哪个厂家的产品,小的只有100多兆字节, 大的也只有几个G的字节。 监控程序安装完成之后,会得到一个工作界面,你通过这个界面设置一个网络连接(IP地址)。这个界面很简单,多数情况下你可以通过浏览器从别的机器上访问这个界面。
前面说了,一个Windows机器,实质上就是一个由CPU、内存、和硬盘组成的一个组合体。通过监控程序的界面,你可以建立多个组合体。每个这种组合体,就是一台仿真的电脑。当监控程序创建一个仿真的电脑时,它实际上只是创建了两个文件:一个是关于这个组合体的配置信息(被分配了多少CPU、多大内存、多大的硬盘);另外一个文件,这个仿真电脑的“硬盘”,这个仿真的“硬盘”实际上就是一个封装的文件(在有些情况下,也可以是几个文件)。
当你点击“开机”来启动这个仿真的电脑的时候,监控程序开始实际为它分配CPU和内存、并且启动它。当然,这“台”仿真的电脑在第一次启动的时候,是没有安装任何操作系统的“裸机”,那个封装的文件也是空的,这时你可以进行正常的系统安装(比如 安装Windows)。
对Windows而言,它不知道真假,它反正能够得到所需要的CPU、内存、和硬盘就可以正常运行了,一切都和真的机器一样。对监控程序而言,这个 Windows不是直接和硬件打交道的,一切资源都需要监控程序来调度和分配,所以这“台”Windows机器(组合体)就是一台虚拟的机器,简称VM。这种通过监控程序把硬件的机器、同操作系统分开的过程,就是虚拟化。
当监控程序创建一个VM时,它就给VM配置资源的大小,比如2个1GHz的CPU、2GB内存、和100GB硬盘。这样,这个VM(Windows)就以为自己拥有了双核的1GHz CPU、2GB内存、和100GB 硬盘。但这只是Windows所能使用资源的上限。Windows在实际运行中并不需要消耗那么多,监控程序只是给它按需分配实际消耗的资源,比如 0.1GHz CPU、0.5GB 内存、和20GB 硬盘。表现在实际的硬件消耗上,这20GB的存储量,就是实际硬盘上的那个20GB大小的封装文件。
一台电脑,可以通过监控程序创建几个、几十个、甚至上百个VMs。比如,一台拥有16GB内存的PC机,你可以创建10个VMs,给每个VM分配4GB内存。看似总共分配出了40GB的内存,但PC机的实际内存只有16GB。
通过虚拟化,一个单台的硬件机器可以同时运行多个虚拟的机器(VMs);更重要的是,虽然一个虚拟的Windows的系统盘(C盘)上有成千上万个系统文件,但它表现在硬件的存储设备(硬盘)上,只是一个或几个打包的大文件。当你把这一个或几个大文件移到别的地方,整个VM就移走了。
三、配载调配和平衡
如果虚拟化的不只是一台机器,而是A、B两台,并且两台机器都共享一个大的存储设备(硬盘阵列、或硬盘库),那会怎样?
前面说了,一个VM就是一个(或几个)大文件。如果这个大文件放在共享的存储设备上,A、B两台机器上的监控程序都能看到这个VM。那么,这个VM既可以在A机器上运行、也可以在B机器上运行。所谓在哪台机器上运行,就是通过那台机器上的监控程序,把Windows 启动到其分配的虚拟内存就是了。
假设VM1到VM10 等10个VMs在A上运行,VM11到VM20 等10个VMs在B上运行。现在要对A进行关机维护,那么它上面的10个VMs就可以在线移动到B上,而且所有10个Windows都保持不间断,用户根本意识不到变化,因为所移动的东西,只不过是内存中的数据而已。
这个移动不是由A、或B指挥的,而是由装在另外一个C机器上的专门的数据中心管理软件指挥的。这个数据中心管理服务器C, 可以监控A和B的运行状态,一旦出现资源紧张,它可以自动触发在线迁移,把一个或多个VM移到对方的机器上运行。当然,这里需要一个事先设定的阈值标准。如果是创建新的VM, C可以自动决定把新的VM放在哪台机器上。这里只是假设A、B两台机器。实际上,C可以管理几十、几百、上千台机器。共享的存储设备也不止一套,可以是多套(VMs也可以在不同的存储设备间移动,只是移动的时间较长而已)。C通过各机器上的监控程序,间接管理所有的资源。
至此,云的雏形出现了,但还不是云。因为,所有的这些管理和控制,都还是数据中心自己的职责。用户还无法对所需要的资源进行自主管理。
四、云的最后形成
数据中心服务器C可以不止一个,可以有多个。它们创建和管理的一些VMs也许可以供外界的用户访问(比如网站),但用户无法直接管理VMs,更无法管理C提供的服务、或资源。
领取专属 10元无门槛券
私享最新 技术干货