原文:http://www.chinacloud.cn/show.aspx?id=15917&cid=17
老叟发现,即使是一些搞计算机的人,也不了解“云”是什么。于是,俺卖车之余就写了一篇科普:
到底什么是云(云计算)
有很多关于云的介绍。然而,大都是用比喻的形式来介绍云的属性。比较有名的比喻是餐馆、和电网。但是,云毕竟不是餐馆、或电网,如果只有这些比喻,仍然不清楚到底什么是云。
本文试图不用任何比喻,直接从普通的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提供的服务、或资源。
1. 资源池:
现在,再加一个更上层的服务器D -- 由它来管理一个或多个C!这个D,就是云服务器了:
C把各自管理的资源提交给D,比如,一个或几个C总共向D提供了5000GHz CPU、3TB 内存、3PB 存储空间。D再把所有资源组成一个大池子,叫做“资源池”。
这个池子的大小是可以动态变化的。当C控制的资源增加了、升级了,C可以动态向这个池子贡献资源,这个庞大的资源池也就随之增长得更大。
2. 二次虚拟:
为了便于分配和管理,D把庞大的资源池划分成多个子集(小组),这每个子集就相当一个虚拟的数据中心(或叫“计算中心”)。
D再从各个“计算中心”里提取计算资源,创建一个个用户环境。每个用户环境就相当于一个“机房”,这个“机房”包括CPU、内存、存储等资源。
D同时还给用户提供登陆访问的接口。用户通常用浏览器来登录这个接口。
作为用户,当你用浏览器连接到D提供的访问界面,就可以建立一个账户,并且输入你的信用卡号。这时,云服务器D就可以根据你的要求,提供所需要的“机房”。
这个“机房”的大小,完全根据用户的需求而定,比如可以包括50GHz CPU、100GB 内存、和2TB 硬盘。这些“机房”的资源,都是由云服务器D从它的那些虚拟的“计算中心”里抓给你的。
通过层层抽象和虚拟,在每个“机房”里,你看不到、也不用去关心每个计算资源实际来自哪里。
3. 用户的自主管理:
当你作为用户拥有了一个“机房”,你就可以随意干你所需要的的事:
建立多台虚拟的机器(VMs)。云商在你的机房里已经提供了很多现成的VM模板,有各种Windows、有各种Linux、等等,你可以随意拷贝过来、定制自己的配置、启动,就可以了。当然,你也可以自己从初始安装。
4. 连接到网络:
在本文开头提到, 网络也是计算资源。在谈及单个VM的时候可以暂不谈网络,但是在连接VM的时候就需要了。云在给你提供一个“机房”的时候,它已经就按需求给你提供了虚拟的交换机、路由器、IP地址池等等。这些网络资源,同样也是由数据中心服务器C提供给云服务器D的;C则是从所管理的各个监控程序得到;各监控程序管理着实际的硬件网卡。
从用户的角度,各个“机房”是完全独立的,彼此是不可见的。你在自己的“机房”里干任何事都干扰不了别人的“机房”,别的“机房”也干扰不了你。
这就是云。下面还要介绍一些分类。
这里再回溯一下这个云“机房”的来源:
“机房”<-- 云服务器D管理的虚拟的“计算中心”<-- 数据中心服务器C提供给D的资源池 <-- C 动态管理A、B两台(或多台)机器所连接的计算资源 <-- A、B两台(或多台)电脑通过监控程序的虚拟化 <-- PC机
在实际配置中,PC机一般为企业级的服务器所取代,比如联想的System X 服务器。但这些服务器和PC机没有本质区别,性能和可靠性不同而已。
五、云的种类
这里描述的云的建立过程和结构,只是一种比较普通和容易理解的形式。由于技术的不同、实现方式的不同,各家云的实现方式和结构会有很大的不同。但是,一些基本的概念是相同的,其共同的核心要点包括:
一定要有资源池。把分散的计算资源集中到大的资源池里,以方便统一管理和分配。例如前面讲的D所管理的资源池。
按需分配、自助服务。用户实际消耗多少资源,就被分配多少资源;用户对自己得到的资源能够自助管理。例如前面讲的“机房”。
灵活的资源变化。随便撤掉一台硬件的电脑,其上面的信息和活动会自动转移到别处去;随便增加一台电脑,其资源会随时添加到资源池里去。所有这些增减,用户根本意识不到。例如前面讲的“配载调配和平衡”。
一定要有记账系统。用户消耗了多少资源,如何给这些资源计费,系统有详尽的信息采集和报告,以便对用户收费(即使是免费,也得有详细的记账)。例如前面提到用户输入信用卡,就是以记账为前提。
在组建云的技术上,说到底,就是用软件产品(如前面提到的C和D,并通过监控程序)来管理、组织、和分配经过抽象或虚拟的硬件计算资源。除了个别企业用自己的技术建设、和服务外,现在常见的云技术提供者主要有:VMware、微软、Citrix、和OpenStack等。前两者是完全的商业产品;Citrix公司在监控程序上采用的是开源的Xen;OpenStack则完全是开源免费的,它的监控程序主要采用开源的KVM和Xen,也可以是其它的开源软件。
按照服务的对象和范围,云可以分为三类:
私有云:建一个云,如果只是为了单位(企业或机构)自己使用,就是私有云。就前面提到的“机房”而言,每个“机房”只是为本单位的不同部门、或不同用途而设立的。
公众云:如果云的服务对象是社会上的客户,就是公众云。前面提到的“机房”可以是任何社会上的企业、单位、或个人。Amazon公司的AWS是现在世界上最大的公众云。其它公众云提供商还有Google、Salesforce、苹果的iCloud等等。
混合云:如果一个云,既是为单位自己使用,也对外开放资源服务,就是混合云。有时,把两个或多个私有云的联合,也叫混合云。
按照服务的模式,云又分为如下几类:
基础设施即服务(IaaS):作为一个用户,如果得到了前面的“机房”,那你就拥有了信息系统的基础设施,你可以安装多个服务器,你可以配置自己的网络。由于这个基础设施完全是云所提供的服务,所以叫“基础设施即服务”。
平台即服务(PaaS):你不一定需要“机房”里的所有服务,比如说你只需要“机房”里的一个服务器作为公司软件开发的平台,那么,你得到的这个平台也是以服务的形式出现的。
软件即服务(SaaS):你甚至都不需要管理一整个服务器,你不关心什么服务器、也不关心服务器是怎么工作的,你只需要一种软件的功能。比如,你只想管理公司的客户信息(CRM),你就从云商那里得到完备的CRM软件功能。所以,软件也是服务。
其它(XaaS):很多人使用iCloud,实际上就用iTunes在“机房”里开了一个用户帐号,这个账号给你提供5GB的免费存储空间,如果还需要更大一点,你就需要输入信用卡号了。这是“存储即服务”。你还可以把PC机放在云上(当然,你需要有一个小盒子能连到云上,这个小盒子还能连接显示器、键盘、鼠标等),这就是“桌面即服务”。“桌面即服务”有另外一个时髦的叫法,即“云桌面”。。。总之,都是XaaS,你可以试着把X 换成任何东西。
你只要理解了前面说的“机房”,就可以理解它能提供的各式的服务(XaaS),大到综合性的基础设施,小到单一的云存储,你就不怕别人说一个什么时髦的新服务,都只不过是“机房”里的不同服务花样而已!
六、云的诱惑
试想,有了云上的“机房”,你如果是中小企业的IT部经理或CIO,你还会在建设机房上操心供电、空调、消防、设备故障等等琐事吗?你还会去调研购买何种服务器设备吗?你只需要一个帐号、一个信用卡,你就可以在云上“机房”里随意创建任何服务器,喜欢就启动,不喜欢就删除。你可以安装所需要的操作系统、配置任何数据库。你甚至不需要为员工购置PC电脑,有“云桌面”就可以了。
英国政府用不到一年的时间,迅速建起了统一的“政府云”(简称“G云”),目的是把国家各个政府部门的IT系统都逐步转移到G云上去。自2012年正式启用之日起,政府各个部门一律禁止购买硬件的服务器,所有新增内容都必须是从G云上创建。
不管是企业、政府、还是个人,如果想避开云,看来是很困难了。这就是为什么要多少了解一下“到底什么是云”。