贴上一篇两年前写的文章,为了后面写云相关主题服务。

曾几何时,”云”还是指天上飘的那一朵朵白色的雾团,现在互联网上家家都说自己是”xx云”。 “云”这个词,已经被赋上了新的含义。其实真正在做”云”的企业没几家。这篇文章会告诉大家,究竟什么是”云”?并采用现在最火的开源云平台OpenStack来给大家介绍”云”的架构。

什么是”云”?

让我们先看一个关于住房的例子。北漂的程序猿A想在北京买房,他平时都1个人住,1间房就够了。但有时候他父母,老婆和两个孩子要过来陪他,这时候1间房就挤了,最好有3间房。这下A就犯愁了。买套3室的房子嘛,太贵,而且平时都用不上。买1室的房子呢,万一家人过来就住不下。富二代B就不一样,他比较壕。有一套别墅,5间房。但是他全家只用住3间,另外两间空着,有钱就是任性。给B打工的产品汪C呢,就寒碜了,一家5口就住1间房,他一次性负担不起更大的房子,只好看着B的两间空房间叹气。这种财富分配不均的现象,在现在社会普遍存在,想想就让人气愤,劫富济贫是大家的梦想。(说多了…)

这个问题怎么解决呢?房产商Z来了,他说:”你们把房间全部交给我,我来帮你们搞定”。Z把所有房间都收集起来,打造成酒店式公寓。程序猿A需要1间时,就给他1间住;需要3间时就分配给他3间。等他老婆孩子回去了,F再把房

间收回。而富二代B呢,就给他3间,他如果任性要多几间,也行,但是要额外收钱。一般再壕的人,也很少包下n多酒店的房间不住吧。对于产品汪C,他需要2间,Z就给他2间。然后住1天收1天的钱,这样C就不需要一次性买套两室的房子了。Z建立起来的,就是一个关于住房的”云”。用户按实际需要分配资源,而且用户资源可以随时增加和减少。按每个用户使用情况收费,一般月付或者年付。这样资源不会浪费,用户也不会一次性投入太多。

现在互联网上所谈论的”云”,就是把计算机资源收集起来,按需提供给用户。一个形象的比喻,以后大家使用计算机资源,就像现在家庭用电一样。看你每个月用了多少,然后收费。大家不用一次性购买昂贵的电脑(虽然现在对大部分人来说电脑已经不贵了,但是硬件在不断升级,你要频繁升级电脑的话,代价还是很大)。除了不用买电脑,你的个人文件也可以存放在”云”上。一般”云”提供商都有很好的备份机制,你不用担心电脑硬盘坏了,导致你重要的文件丢失。而且你在任何地方,只要有一个终端,就可以连上”云”。不用带着沉重的笔记本电脑到处跑了。

“云”的类型

广义上讲,”云”分为三种类型:IaaS, PaaS和SaaS。

  • IaaS (Infrastructure as a Service),基础架构即服务模式

此类云平台提供给用户的就像是一台标准的物理机器。你可以选择机器的性能,比如CPU几核,内存多大,硬盘存储多大。这台机器上除了操作系统,什么都没装。用户可以随意安装任何软件(当然license要合法)。除了硬件资源,你还可以购买公网出口带宽,云提供商会给你一个独立的公网IP。硬件和网络资源能够随时升级,你不用换机器。

形象的讲,就是房产商Z给了你一间毛坯房,里面什么都没有,你想怎么装修,想买什么家具,都自己来,家具坏了也是自己修。此类”云”的优点就是灵活性大,你想怎么搞都行。但是用户需要花不少的精力搭建和维护基础环境。

有开发和运维能力朋友们,可以先买台低配置的云主机,搭上自己的系统或网站。等到流量大了,再升级配置。IaaS采用的就是虚拟机技术,你所访问的云主机,其实就是一台虚拟机。

IaaS提供商典型的国外有亚马逊Amazon AWS EC 2,国内有阿里云服务器ECS。感兴趣的朋友们可以去试下阿里云ECS,它提供了半年的免费试用,当然配置很弱。

  • PaaS (Platform as a Service), 平台即服务模式

此类云平台提供给用户的是一个现成的运行时环境。比如PHP环境,Java环境,.Net环境等。同IaaS一样,你可以根据自己的需要购买计算资源,存储资源和网络资源,云提供商按照实际使用量收费。使用的资源可以随时升级。不同之处是用户不需要安装软件,也不能安装软件。

拿PHP环境举个例子,用户所需要的Apache,PHP,MySQL等运行时环境是早就安装好的。你只需要将你的PHP代码上传到平台上,就可以运行了。云提供商会保证运行环境的稳定性和安全性。此类云提供商一般还会给你一个免费的二级域名,让你可以访问自己的系统或网站。

回到一开始住房的例子,PaaS就像是Z给了你一间精装修的房间,里面家具,电器应有尽有。而且还帮你打扫,提供安保。保证环境是干净的,安全的(太幸福了)。不过,至于你每天吃的饭,你要自己动手烧,饭的味道还是你自己决定;你看的电影,要自己准备碟片;厨里面的衣服,要自己买。所以PaaS比起IaaS少了一些自由度,但是可以省掉不少环境运维上花费的时间。

有一定开发能力,但是不想花太多时间在运维上的朋友可以试下PaaS。目前PHP,Java,.Net,Python,Go等PaaS平台都有,还提供了IDE和不少类库。方便你开发及部署。

PaaS国外最早出现的是谷歌的GAE (Google App Engine),这个相当好用,而且小容量使用是一直免费的。可恶的是国内被河蟹掉了。另外强烈推荐一个国外的PaaS提供商Heroku,它也提供了免费版,支持Ruby, Python, PHP, NodeJS, Java等各种开发环境,关键是国内可以使用,你还可以利用它来访问那些被河蟹掉的资源。可惜免费版每24小时内会停止服务6小时,如果要上产品,还是建议花点钱。

国内有SAE (Sina App Engine),注册SAE后会送你500云豆,实名认证后还有2000云豆。可惜很快就会用光,然后你就得花钱买云豆了。感兴趣的朋友,可以注册SAE体验下。短期的项目,比如公司年会系统,就可以用SAE搞定。另外微软提供的Azure也是PaaS服务,国内已经开放了,习惯.Net开发的朋友们可以去玩下,还是有点小贵哦。

  • SaaS (Software as a Service),软件即服务模式

此类云平台提供给用户的就是一个现成的软件。你不用管它运行的环境,也不用管它是怎么开发的,用就行了。它一般按用户量,使用量或使用时长来收费。不同的SaaS平台提供的软件功能也不一样。一般大家常见的有云存储,云相册,在线Office等。

简单的说,就是本来软件/系统要安装在你本地,你才可以使用。现在你只需要连上网,就可以在线使用同样功能的软件/系统。对大型的系统,你不但省去了安装维护功能,也不用自己买服务器,云提供商还会提供其他服务来帮你使用软件。如果你是软件小白,不懂安装,更别提自己开发,那就只能采用SaaS服务。

我们再次请出房产商Z。这次Z不但提供了精装房,而且提供了饮食,影音娱乐。每天你要吃饭,Z直接送到你面前。你想看电影,打开电视就有。有没有一种当皇帝的感觉?这就是SaaS。当然这种模式也有缺点,就是每天你吃的菜得由Z决定,你可以选择的余地很小。看什么电影也是Z来决定。所以方便的同时,灵活度就小很多。

Apple的iCloud,Google的Google Doc是比较出名的SaaS云服务。国内的百度网盘也算是SaaS。在企业级平台上,Salesforce是最出名的SaaS平台,它提供了基于云的CRM(Customer Relationship Management)服务。

不同类型的”云”模式很难讲孰优孰劣,每个用户可以根据自己的能力和需要,来选取到底采用何种模式。当然还有一些更细的分类,比如Data as a Service, Storage as a Service等。这里就不赘述了。

开源IaaS平台OpenStack

很多人觉得”云”这个东西太高大上,只有大公司才会去玩,对于普通开发人员来说,只有使用的份。OpenStack的出现,降低了小公司搭建自己云平台的门槛。OpenStack是开源的,你可以用它来搭建IaaS平台。大家还记得什么是IaaS吧?其实阿里云背后的技术就是OpenStack,他们也给社区回馈很多改动的代码,这个值得称道。

OpenStack最初是由NASA(美国宇航局)和RackSpace(美国很牛X的IDC)贡献的。它不是一个独立的软件项目,而是一系列项目的集合。历史就不多说了,现在OpenStack基金会有好几百个会员,包括很多知名的大公司。企业可以用它来搭建面向互联网的公有云,比如阿里云。也可以用它搭建私有云。比如企业内部有一大批性能一般的服务器,可以把这些机器的资源统一管理起来,然后按需要创建虚拟机。虚拟机的性能完全可以超过其中任何一台主机。

OpenStack架构

OpenStack核心的组件主要有3个:

  1. Nova – 计算服务
  2. Swift – 存储服务
  3. Glance – 镜像服务

架构如下:

OpenStack

在介绍这3个服务之前,先普及一个知识。大家平时买的电脑,包括了CPU,内存,硬盘等模块。CPU负责计算,硬盘负责存储,所以对使用的人来说,不会区分这两个资源。”云”平台虽然也是由一系列物理主机构成,但是它的计算资源和存储资源是分开来管理的。打个简单的比方(实际情况当然要复杂的多),你有4台2核CPU,40G硬盘的主机A,B,C,D组成”云”。现在你要申请4核CPU资源和60G存储资源。”云”平台很可能分配你主机A和B的CPU,主机C和D的硬盘,而且C上只给你分配了20G。但是你使用起来完全感觉不到这些,就像是在同一台物理主机上操作一样。其实你的CPU计算是分布式的,硬盘存储也是分布式的。两个分布式资源分别由不同的”云”平台服务负责分配管理。

Nova

这是OpenStack的计算控制器。它负责管理、启动、运行”云”实例,分配计算资源和网络资源,控制访问权限。客户端通过Nova API来与其交互。对于用户来说,Nova的功能类似于Amazon的EC2服务,提供用户虚拟机实例的使用。

Swift

这是OpenStack的对象存储系统。为OpenStack提供分布式的,最终一致的虚拟对象存储。内建了数据冗余备份和恢复,大文件存储等功能。对于用户来说,Swift的功能类似于Amazon的S3服务。借助于Swift,”云”上的虚拟机存储空间可以弹性扩容。

Glance

这是OpenStack的镜像管理系统。了解虚拟机技术的朋友们应该知道,运行中的虚拟机,可以保存为一个镜像。将来启动加载这个镜像,就立马恢复到保存时虚拟机的状态,避免环境重复搭建。Nova运行的实例,也可以保存为镜像。而这些镜像的管理(存储,查询,检索等),就由Glance负责。当用户启动一个镜像时,Nova API通过调用Glance API找到需要加载的镜像,并分配计算,网络等资源,将镜像加载到虚拟机实例中。

后记

这篇文章只是个简单的介绍。本来想演示一下OpenStack环境搭建。不过想到搭个环境至少要3台性能不错的主机,大部分朋友们应该没法在家里试。有条件的朋友,可以参考下这篇文章试着搭个私有云,并创建一个虚拟机。

OpenStack目前还不够成熟,原生的系统bug不少。如果你要搭建高可用性的私有云,还是要对其做一部分修改。不过现在的版本相比2年前我玩的版本已经改进了不少,而且还有第三方提供了傻瓜式安装。让我们对开源多一点耐心,也多一点宽容吧。

最后提一下,OpenStack的唯一竞争对手,Apache CloudStack,由Citrix创建,也是一个值得关注的开源”云”项目。不过目前流行度还无法同OpenStack相比。