【1】核心功能
by 林玥煜、邓侃
前几天,有朋友与我讨论云计算的投资方向。他翻出 2009 年 Gartner 的 IT 行业分析报告 [1],说如果 Gartner 的判断是正确的,2009 年是云计算被炒作得最热的一年。从那以后的 2-5 年,即从 2011 年到 2014 年,云计算的热度将降低。水分被晾干以后,剩下的是干货,然后主流 IT 企业开始逐步使用云计算。
三年过去了,现在是不是进场投资的好时机,切入点是什么?
Gartner 的图,是新技术的生命周期图。通常情况,一个新技术崭露头角的时候,总是被人们寄托太多期望,表现在新技术的应用潜力,被渲染被夸大。
所以,新技术出现以后,通常会经历一段被神化的阶段。后来发现这新技术,并非如先前传说中那么高大威猛、无所不能。于是新技术登上神坛之时,就是被丑化的开始。等到水落石出,新技术的能力与缺陷,一是一二是二,清清楚楚之时,才会出现大规模的用户。这就走向了正常化。见图一。
图一。Gartner Hype Cycle, 2009 [1].
通常情况,大多数新技术都会经历“被神化”、“被丑化”、“正常化”这三个阶段。对于投资人和创业人来说,关键的问题,在于比别人抢先一步,深入理解新技术的能力与缺陷。要深入理解这些能力和缺陷,一个比较稳妥的办法,是剖析这些能力的技术实现方式。
云计算的核心能力,在于以下两条。理解了这两个核心能力的技术实现方式,就容易理解这些能力与生俱来的缺陷。同时,云计算所具有的其它能力,诸如按用量收费、容灾恢复、网络隔离等等,基本上都是这两个核心能力的衍生品。
1. 即租即用。
假如用户想搭建一个电商网站,按照传统做法,用户需要做以下几件事情。1. 申请域名,2. 租用数据中心的机柜和带宽,3. 购置服务器和网络设备,4. 在服务器上安装 OS,5. 把服务器和网络设备,安置到数据中心的指定机柜,并设定系统配置,6. 在服务器上安装 Web Engine,Database 等等应用系统。
如果使用云计算,除了申请域名,仍然与原先的传统做法相同以外,其余的,都可以在任何一台电脑上,通过访问云计算中心的网页,远程完成。一旦完成申请步骤,便可以立刻远程使用租用来的服务器。
这里有几个问题,用户租用的是什么?这里有几个选项,
a. 租用服务器硬件裸机。裸机的 CPU Power、内存和硬盘空间、网络带宽的数量,由硬件设备决定,通常情况用户不可随时更改。但是用户可以随意安装 OS、网站引擎、数据库、和各类应用软件。
b. 租用虚拟机。用户并不知道虚拟机运作在哪一台服务器硬件上,但是虚拟机安装了 OS,配置了一定数量的 CPU Power,内存和硬盘空间,以及网络带宽。用户可以更改CPU Power,内存和硬盘空间,以及网络带宽的设置。而且用户拥有 OS 的 Root 权限,随意安装和运行各种第三方应用软件。
c. 租用网站引擎,通常包括相应的数据库和文件系统。用户可以更改网站引擎占用的 CPU Power 和内存空间,也可以更改数据库和文件系统的存储空间。另外,用户可以安装并运行网站引擎、数据库和文件系统的插件,但是不可以随意安装其它软件。
d. 租用网店商铺等等特定的服务。用户可以选用网店商铺提供的附加服务,但是不能安装其它软件。
对于不同的租用对象,后台系统的实现方式和使用的技术,就可能也不相同。有观点认为,出租网站引擎 (c) 和网店商铺 (d),这两者的后台实现技术,等同于在出租虚拟机 (b) 的基础上,额外再出租网站引擎、数据库、文件系统、以及电商应用软件。
这个观点不完全正确。虽然虚拟机 (b) 的确是实现网站引擎 (c) 和网店商铺 (d) 的技术手段之一,但是除此以外,还有其它实现方式,而且从性价比来说,(b) 未必是实现 (c) 和 (d) 的最佳技术。
2. 动态分配资源。
所谓资源实际上分成三类,1. 存储资源,其本质是数据库和文件系统占用的硬盘空间,2. 计算资源,包括 CPU Power 和内存空间,3. 网络带宽。
所谓动态分配资源,是根据用户对于存储资源、计算资源、和网络带宽的实时占用情况,动态地增加或者减少资源的配给。
存储资源、计算资源和网络带宽的动态分配,都可以用虚拟技术来实现,但是虚拟技术并非唯一的解决方案。事实上,针对某些用户需求,其它技术手段的性价比可能比虚拟技术更高。
总结一下。
1. 虚拟化不是万灵药,不能到处滥用。
2. 云计算并不等同于虚拟化。虚拟化只是云计算的技术实现方式之一。实际上,很多云计算系统,混搭了多种技术手段。
3. 但是虚拟化的确是一个强有力的技术手段。
在这个文章系列中,我们将深入介绍云计算的虚拟技术实现方式,并对比其它技术方案,分析虚拟化的缺陷,同时探讨在什么样的应用场景下,应该选用虚拟化来实现云计算系统。
Reference,
[1] Cloud Hype at Height: Gartner。 It’s supposed to be 2–5 years away from mainstream adoption
http://cloudcomputing.sys-con.com/node/1067894
【2】Amazon EC2 的幕后
by 罗辉、邓侃
今天新闻里报导说,VMWare 拆资 10 亿 5 千万美元,收购 Nicira [0]。Nicira 是一家创业公司,专注于网络虚拟化,主打产品是 vSwitch。云计算产业是技术密集型产业,涉及的技术众多。要了解云计算产业格局,就必须了解各家企业主打产品,所提供的核心价值。从而理解各家企业,在整个云计算产业链中所处的位置,以及与上下游企业的相互关系。
这个文章系列的后续章节,将详细讨论网络虚拟化的问题。Nicira 公司在网络虚拟化方面,引领全球技术前沿。看来我们这个文章系列的写作进度,得提提速了。
我们在上一节,讨论了四种云计算的服务方式,出租裸机、出租虚拟机、出租网站、出租行业服务。Amazon EC2 提供的云计算服务,就是其中第二种方式,出租虚拟机。
OpenStack 被视作是 Amazon EC2 的开源版。OpenStack 自称是“用来搭建云计算平台的开源软件”。如果追问一句,用 OpenStack 搭建好了云计算平台以后,能提供什么服务?答案是,如同 Amazon EC2 一样,提供虚拟机租赁服务。
VMWare 公司的产品,虽然名目繁多,但是也是围绕搭建云计算平台,提供虚拟机租赁服务这个总目标。
所谓提供虚拟机租赁服务,更明确的解释方式是,用户提交什么输入,云计算系统返回什么输出。
输入:用户在任何电脑的浏览器上,通过访问云计算中心的网页,先注册,确定登录姓名和密码。然后输入希望租赁的虚拟机的操作系统及其版本,还有虚拟机的 CPU 的内核个数、内存空间、硬盘空间、实时带宽、以及流量限额。
输出:云计算中心根据用户的需求,生成相应配置的虚拟机,然后把虚拟机的域名或 IP 地址,返回给用户。用户得到这些信息后,可以通过 SSH、远程桌面或者 VNC [1] 这样的远程访问(Remote Access)工具,远程登录并使用运行在云计算中心的虚拟机。
Amazon EC2、OpenStack 和 VMWare 是如何实现这个功能的呢?别着急看答案,先想想,假如我们是 Amazon EC2、OpenStack 和 VMWare 的系统设计师,我们该如何设计后台系统?
我们自己先 DIY (Do It Yourself),然后把我们自己的设计,与 Amazon EC2、OpenStack 和 VMWare 的系统架构,做横向对比,就容易领悟 Amazon EC2、OpenStack 和 VMWare 的系统设计的高妙之处。
当然,任何系统的设计,都会有不足之处。分析缺陷的一个有效方法,也是横向对比。
我们在自行设计 Amazon EC2 那样的系统之前,先想想,假如没有全自动的后台系统,而是靠人工完成,该怎么做?换句话说,当云计算中心的系统管理员,收到用户提交的请求时,他该执行哪些操作?
在云计算中心开始为用户提供服务之前,系统管理员需要预先做一些准备工作。当云计算中心购置了服务器裸机以后,系统管理员需要给这些裸机,安装虚拟化系统。
安装虚拟化系统包括以下三步。
1. 选择虚拟化系统。
虚拟化系统是一个软件系统,目前常用的虚拟化系统有三种,VMWare、Xen、和 KVM。各种虚拟化系统的比较,可参考 [2]。
其中 KVM 是开源软件,不仅操作简单,而且系统运行效率较高。更难得的是,KVM 系统结构十分精巧、代码量小。
2. 安装虚拟化系统。
以 KVM 为例,在裸机上安装 KVM,只需要做两步。1. 安装 Linux OS,2. 在 Linux 上安装 KVM,参考安装手册 [3]。
3. 设置网络。
运行在 KVM 之上的虚拟机实例,与外界网络的数据传输,必须经过物理网卡。所以,需要做相应的系统设置,使虚拟机实例与物理网卡通信。设置网络的操作步骤并不复杂,也参见安装手册[3]。
这里有个疑问,为什么在第二步“安装虚拟化系统”的时候,不一步到位,把网络也设置好?其实,的确是可以两步并一步,在“安装虚拟化系统”时,顺带完成网络的设置。
安装手册 [3] 把网络设置单列出来,或许是基于以下考虑。虚拟机实例与物理网卡的通信,需要用到 vSwitch 技术,但是 vSwitch 的实现方式有多种,包括 Linux Bridge 和 Open vSwitch 等等 [4]。
对于大多数情况,Linux Bridge 基本上能够满足需要,所以安装手册 [3] 只介绍了 Linux Bridge 的配置方法。但是也有观点认为,在某些场合下,例如当虚拟机跨机房迁移时,需要更强大的 vSwitch 的技术实现,例如 Open vSwitch [5]。
关于 vSwitch,以及 Open vSwitch、OpenFlow 等等话题,我们将在后续有关虚拟网络的文章中,详细讨论。
当云计算中心,添置了服务器裸机之后,系统管理员需要执行上述三步操作。这些操作完成以后,新添的服务器就可以为用户,提供虚拟机租赁业务了。
1. 当系统管理员接收到用户提交的需求后,他根据用户指定的操作系统及其版本,把相应的操作系统安装光盘,插入服务器光驱。
或者,系统管理员先把操作系统安装光盘里的所有内容,导出成为一个 ISO 镜像文件。这个 ISO 镜像文件,不仅包含安装光盘上的所有内容数据,而且记录着每一段内容数据,存储在光盘里的哪一个扇区(Sector)。然后,他把这个 ISO 文件拷贝到服务器本地文件系统中。
2. 系统管理员根据用户提交的,虚拟机所需配置的 CPU 内核个数、内存空间、硬盘空间、以及实时带宽,通过调用 Linux 相应工具,启动虚拟机。操作步骤不复杂,也参见操作手册 [3]。
这里有两个问题。
1. 假如开启一个虚拟机实例后,用户在这个虚拟机实例里,下载并保存了某个内容文件,例如一段视频。并且,他安装了某个应用软件,例如 Apache Web Server。然后他让 Apache 运行了一段时间,产生了一些状态文件,例如日志文件。再然后,虚拟机实例被关闭,或许是被用户或系统管理员主动关闭的,也可能是因为故障而宕机的。
问题是,这个虚拟机实例能够被重启吗?虚拟机实例被重启后,用户先前保存的视频等等内容文件、安装的 Apache Web Server 等等应用软件、以及应用软件运行中产生的日志等等状态文件,有没有被保存?
答案是,可以重启这个虚拟机实例,并且用户先前保存的所有内容文件、安装的所有应用软件,以及在应用软件运行过程中,产生的所有状态文件,通通被保存,可以重新使用。
原理是,在用户提交的申请租赁虚拟机实例的请求中,有一个参数是该虚拟机实例占用的硬盘空间的大小。当系统管理员在某一台物理服务器上,调用系统指令,让 KVM 虚拟化系统,为用户创建虚拟机实例时,KVM 虚拟化系统在该物理服务器的本地硬盘中,创建了一个文件,作为这个虚拟机实例的镜像文件(Image)。
这个镜像文件的大小,基本上等于用户指定的虚拟机实例占用的硬盘空间的大小。在虚拟机实例看来,这个镜像文件,就相当于自己的硬盘,所以镜像文件又被称为虚拟硬盘。在这个镜像文件或者虚拟硬盘中,虚拟机实例可以设立不同的虚拟硬盘分区,分区中可以设立文件夹,文件夹中可以再设立子文件夹,或者存放文件。
当先前的虚拟机实例被关闭以后,可以在同一台物理服务器上,根据虚拟机实例的名称,重启该虚拟机实例。这时新的虚拟机实例,将会找到先前那个虚拟机实例所使用的虚拟硬盘,也就是镜像文件。
于是,当新的虚拟机实例开启以后,将会看到先前虚拟机实例,它保存的所有内容文件、安装的所有应用软件、以及应用软件在运行过程中产生的所有状态文件。
2. 问题二,假如先前的虚拟机实例被关闭以后,能不能在另外一台物理服务器上,重启该虚拟机实例?
答案是,可以在其它物理服务器上,重启虚拟机实例。但是有两个前提,1. 这两台物理服务器,必须安装相同的虚拟机系统,例如某版本的 KVM。2. 必须把先前那个虚拟机实例的镜像文件,也就是它的虚拟硬盘,从第一台物理服务器的文件系统,拷贝或者挂载到(mount)到第二台物理服务器的文件系统中去。
原理是,假如我们有两台电脑,当我们把第一台电脑的硬盘,拆下并安装到第二台电脑上去。然后开启第二台电脑,我们将会看到与第一台电脑一模一样的操作系统、文件、还有应用软件。镜像文件对于虚拟机实例来说,就是它的硬盘。迁移虚拟机实例,可以通过迁移它的虚拟硬盘,也就是镜像文件来实现。
我们之所以不厌其烦地介绍手工设置虚拟化系统、并运行虚拟机实例的步骤,是因为 Amazon EC2、OpenStack、以及 VMWare 等等系统,它们的主要功能,是让软件系统替代人工,自动化地去完成这些操作。
类似于 Amazon EC2 的自动化系统并不难设计。事实上,前述的准备工作,也就是安装虚拟化系统的三个步骤,是在添置物理服务器时完成的,是一次性的操作,所以手工完成这些准备工作,无妨大雅。
真正需要实现自动化的,仅仅限于提供虚拟机租赁业务的两个步骤,1. 提供操作系统安装光盘,或相应的 ISO 文件,2. 根据用户提交的虚拟机资源配置,创建虚拟机实例。
我们在下一节,将自行设计这样一套系统,然后把它与 Amazon EC2、OpenStack 等等横向对比。大家会惊奇地发现,我们自行设计的系统,在总体上,与 Amazon EC2、OpenStack 等等系统非常相似。
Reference,
[0] VMware buys Nicira for $1.05 billion
http://www.zdnet.com/vmware-buys-nicira-for-1-05-billion-7000001421/
[1] VNC Introduction.
http://en.wikipedia.org/wiki/Virtual_Network_Computing
[2] Comparison of Virtual Machines.
http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines
[3] Quick Start Guide for Installing and Running KVM.
http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=/liaai/kvminstall/liaaikvminstallstart.htm
[4] Virtual networking in Linux. NICs,switches,networks,and appliances.
http://www.ibm.com/developerworks/linux/library/l-virtual-networking/
[5] Why Open vSwitch?
http://openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=WHY-OVS;h=ac9a3815a1a00ca3ad024bfb7d6652a040de8899;hb=HEAD