一个产品经理眼中的云计算:前生今世和未来

最近发了太多JobDeer的广告了,感觉不写点干货有些对不起我的粉丝们。于是这次写写我还算熟悉的领域——云计算。

作为新浪云的前产品经理,我不想从技术角度去讲云了,这次我从产品的视角来管中窥豹吧。当然,水平有限,错误难免,所以请各位看官批判的读下去哈。

如果要我来划云计算的里程碑,我会划出两个点。

第一个点是Xen等虚拟化技术的出现,第二个点是Docker等容器兴起。

在虚拟化技术出现之前,我们都在使用物理机。记得08年创业时,我一个人扛着一台1U托管进了顺义电信,然后就每隔一段时间给机房打电话,请师傅帮忙按电源重启服务器。

当有了虚拟化以后,其实只发生了一个小改变:一台物理机可以被分割成许多台虚拟机了。

这件事情有什么意义呢?

至少有两个方面的意义。

首先是利用率。

每台物理机只能有一个操作系统,而在一个操作系统里边,各种业务可能互相干扰。所以我们一般会把机器按业务分组,来创建集群。对于大型项目来说,集群的利用率是不错的。但是对于小项目,这种方式利用率就很差了,因为一个业务节点最少需要一台独立的机器。

有了虚拟机,就不一样了。一台机器可以虚拟化为很多个操作系统,分配给很多不同业务和不同的人。这样利用率就上来。

然后是可控性。

在虚拟机之前,有很多控制是物理的,就像我前边提到的,重启是需要按电源的。但是虚拟化以后,重启就变成软件可控的东西了(当然,前提是挂掉的不是宿主机)。

可以用软件或者API接口随时启动、关闭虚拟机说起来是件小事,但这后来却演变成了可以自动调度的弹性云服务—— 当你的应用压力大时,云平台可以自动帮你创建新的虚拟机;当应用压力小时,它可以帮你关几台,省电省钱。自动化的能量就是这么大。

以这部分服务为基础,云计算的最基础的一个层次,IaaS(基础设施即服务)出现了。之后虚拟化技术本身开始日益成熟、很多服务器开始在硬件级别支持虚拟化;再后来,以操作系统为粒度的隔离方案不断加强,保证在同一台物理机上的虚拟机用户不会因为写磁盘太猛、用网络过度等情况影响别人。

隔离技术可以说是云计算的核心技术点之一,正是隔离技术不断的进步,使云的隔离粒度一层层加深,从而推动了云计算产业的一级级迭代更新。

接下来,这帮用惯了虚拟机的程序员们开始不满足了。为什么我写20个PHP项目,需要我装20个操作系统?为什么不能这20个操作系统共享一个Web运行环境,而20个PHP项目之间彼此隔离就好了呢。这样我就只需要上传PHP代码就好了。

于是我们对云计算的隔离粒度提出了更高的要求:隔离能不能从操作系统层次进化到应用层次。

PaaS(平台即服务)出现了。

由于应用本身对于平台有依赖,所以我们一般会选择将通用功能做成平台共享的,而将应用代码和数据隔离。

为了实现这个隔离,我们需要制造沙箱。沙箱必须足够安全,除了能合理的分配各个应用消耗的资源外,它还要保证两个用户之间绝对不能非授权访问到彼此的数据。

不同语言用到的沙箱技术不同,所以这个时代的PaaS多是可语言相关的。

比如GAE支持Java和Python、HeroKu支持Ruby。用得最多的PHP语言却没有可用的PaaS,所以新浪做了国内,大概也是全球第一个支持PHP的大规模公有PaaS平台,那就是SinaAppEngine。

我喜欢把这些PaaS称为专用PaaS。

专用PaaS有突出的优点,也有蛮致命的弱点。

优点是它可以非常有效的降低资源消耗,并在开发者遵守约定的前提下极大的提升开发效率。由于PaaS平台的管理者可以统一管理绝大部分资源,所以它可以实现去运维化。

去运维化是PaaS和IaaS最大的区别,这个区别让PaaS平台有了和IaaS平台PK的资本。

以我们公司为例,如果将JobDeer放置在IaaS上,我们就需要维护完整的操作系统。

日志是否超过4个G了,Apache和Nginx的升级布丁是否打好了,SSH是否被人恶意扫描了……

种种烦心事都随之而来,最后我们就只能去雇佣一个系统管理员来做这一切。对于一个创业公司,这是至少每年10万的投入。

于是我们选择了将JobDeer放置在SAE上,从6月到现在,我们的花费不过几万云豆——等于几百块钱,这里边没有因为运维花一分钱。

那么为什么这么好的模式,没有把所有生意都从IaaS服务商那里抢过来呢?

因为专用PaaS有一个挺大的弱点,就是沙箱技术的不完美,大部分的PaaS平台都要求应用程序本身针对平台进行相应的修改才可以运行。比如在SAE上,代码目录是不可写的,文件上传的路径是SAE_TMP。这些看似微小细节的不兼容,却导致了大量的现有项目不能直接运行在SAE上,而要修改成千上万的项目并让其在最新版本中支持PaaS平台,是一件费时费力的事情。

正是因为这点,专有PaaS才没有成就其霸业。不光是SAE,GAE也没能在竞争中PK过AWS。其实我觉得挺遗憾的,我内心里还是相信有机会的。

看到这里你一定会问,那我们能不能造出一个完美的容器,让其可以完全兼容标准应用环境,这样这些应用就不用修改就可以直接运行了呢?

我对这个问题也很好奇,而且做出过努力。这个努力就是全兼容沙箱(它被应用在新浪云商店上),这是新浪云在全兼容容器上的一个尝试。但不得不承认,我当时的想法还是局限了一些,我们只做了对PHP在单机级别的全兼容。

一方面是从专用PaaS平台带过来的惯性思维,觉得这种容器也应该是和语言相关的;另一方面在技术投入上也存在一些制约因素。

往后过了一段时间,系统级别的容器技术成熟了。Linux container(简称LXC)开始应用在各种场景。于是我们规划了沙箱2.0,完全基于LXC,可以兼容各种语言,但SAE已经腾不出来人开发了。

再晚一点时间,Docker出现,它不依赖于语言,可以轻松的把机器隔离到进程粒度——于是泛PaaS时代到来了。

进程粒度的隔离意味着什么?

本质上来讲,它不过是一个性价比更好的虚拟机而已。但是当虚拟化到达进程级别,「虚拟机」就廉价化了。你会为了一个Apache起一个虚拟机么?你会为了一个MySQL又起一个虚拟机么?不会的。

但你会为Apache起一个Docker,为MySQL起一个Docker。因为它们不过是两个进程而已。分成不同的进程,可以更好的对架构去耦合,当Apache升级时,MySQL不会受影响。

但是,泛PaaS未必任何地方都比专用PaaS强,由于没有了专用PaaS里边的平台层,运维成本又被重新引入了进来。现在你有一堆的Docker要管理了,不比一坨虚拟机轻松多少。

所以泛PaaS要发展,必然要出现一个在Docker容器外层对其进行统一管理的平台。因为借助这个平台,我们才能重新去运维化。

在国外,CoreOS就在这个方向上一路飞奔。它提供管理工具,可以按配置批量创建容器,又将各种Docker容器服务化,提供了服务发现机制。这些都是为了把碎片化的Docker容器重新拼接成一个进程粒度的、分布式的、免运维的平台。

在国内,前SAE总监王利俊同学创办的NiceScale.com 也是为Docker去运维化服务的,他们采用了更独特的方式,目前产品还没正式发布,我就不剧透了。

可以看到,隔离技术的不断进步,就如同智子在不同维度的展开,一层层的推动了云计算往纵深发展。如果用一幅图来表示的话,大概就是这个样子:

一个产品经理眼中的云计算:前生今世和未来
云计算的进化

当隔离层次进入应用层后,会发生一个质的飞跃。这个飞跃我叫它分布式SaaS(软件即服务)。

先来说说原来的集中式SaaS。

其实SaaS虽然是云计算最上边的层次,但其出现却非常早。这是因为它其实和虚拟化没有什么关系,也并不依赖于IaaS平台。

它指的是人类通过网络(特别的是浏览器)直接消费服务,但如果按这个标准,网站就是最早的SaaS —— 我们通过浏览器消费资讯、社交等服务。但其实我们并不把网站叫做SaaS,而是把原来C/S结构的产品,比如CRM、ERP的B/S形态称为SaaS。(Salesforce:怪我咯)

集中式SaaS有一个非常大的问题,就是它的数据安全。

iCloud最近被攻击,你们都看到明星的艳照了。集中式SaaS出问题时,使用SaaS服务的所有公司都没法工作。这就是中心化的代价。

在我看来,互联网的发展都是以去中心化为方向的,即使是像微博、Facebook这种原本封闭的网络,也通过开放平台,在一定程度上实现了去中心化。

所以我相信,一定会有比集中式SaaS更好的模式存在。

我们回过头来看隔离粒度。

当隔离粒度从物理机器进化到操作系统层次时,催生了IaaS业务,实现了去机器化,我们不用再关注机器本身。

当隔离粒度从操作系统进化到进程层次时,催生了PaaS业务,实现了去运维化,我们不用再关注操作系统,可以专注业务本身。

所以我花了几个月时间去思考,下一个粒度是什么。但当我往下挖了几铲子,「哐」的一声,发现旁边的门打开了。

当隔离粒度达到进程级别,一类特殊的进程开始催生新的业务 —— 这类进程叫做云APP。

APP层隔离和进程层隔离在技术上大同小异,但是他们的受众发生了巨变。

一个Apache进程,只有程序员能消费;一个WordPress APP,不懂技术的人也能轻松享用。

所以,当隔离粒度专注于云APP时,将实现去技术化,不懂技术的人群将可以第一次享受到完全自主可控的个人云。

分布式SaaS来了,云APP 2C的时代来了。

这撬起了个人云APP这个巨大市场的一角。想想手机这个市场,App store出现之前,我们只能被动的去使用手机上仅有的那一点点应用,没有人会为了手机上的应用花钱;而当App store将这个手机应用市场做起来,将其透过手机推给每一个普通人时,一个几百亿的市场出来了。

云App也是一样的。以前我们只能被动的接收各个网站、App提供的云端同步功能,将自己的隐私数据保存在一些有流氓前科的公司服务器上(这对不懂技术的人群来说,其实是没有选择的)。

但是如果他们可以选择了呢?

这就是Docker为什么要做Hub,Docker是云APP的封装技术,Hub就是云App的分发器和渠道通路、是云计算中的App Store、是云APP商业化的关键节点。

先是提供技术中间件级别的分发,覆盖企业和开发者;再是提供个人云APP级别的分发,让SaaS进入从来没覆盖过的个人市场。

顺便说一句,从这里我学到的是,技术进步的方向是由需求带动的,而不光是技术本身。如果没有一个强需求来拉动,技术进步本身就会变成学术论文——就像一枚种子,只能静静的等待属于它的时代。不幸的是这个时代经常还没到来就已经过去了。

上一节说得很抽象,我说个现实的例子你们感受下。

还是从iCloud的艳照说起吧(我是有多在意艳照,笑),当分布式SaaS到来后,我们不会将自己的私密照片同步到iCloud的云,而是去云APP商店挑选一款私人数据同步软件,比如OwnCloud。

只需要点一下鼠标,将其加入购物车,然后输入我们想要的网址,支付购买。30秒不到,地球上就有了一个专属于你的私有云,别人连它的网址都不知道,更别说密谋攻击它了。

然后网站会显示一个二维码,扫描二维码后,你的手机上就有了一个APP,可以随时消费来自你私人云端的数据。

个人再也不用担心隐私(其实是概率小了非常多)、公司再也不用担心数据安全(其实是掌控了数据所有权)。

那么,谁会去开发这些专门使用于私人云的应用呢?

每一个成功的软件产品背后,都有一个和它功能相当,而体验略差的开源产品(笑)。这是因为大部分开源软件在和商业软件竞争中不挣钱导致的二期投入不足。

一旦分布式SaaS建立起来,开源开发者可以从平台售卖的云空间利益中分成,我也相信,有越来越多的优秀开源产品,可以直接对消费者收费。(即使是开源的,不懂技术的消费者也不愿意自己去手工搭建环境 —— 他们更愿意付钱解决问题,这是程序员们难以理解的。)

开源软件如果能挣到钱,挣到大钱,那么那些以控制和中心化为生的商业软件在它们面前将会黯然失色。

这是一个多么灿烂的未来。

不管你信不信,我的前同事,新浪云的运营经理王伟平同学信了。于是他上周从新浪离职,创建了基于Docker的即点即用分布式SaaS平台—— diancloud.com 。虽然不知道这个月底能不能上线,但据说已经可以在网站上申请邀请码了。

再来说说其他层次。

IaaS这个层次正猛烈分化,一部分在快速下沉,另一部分快速上升。

所谓下沉,是指原来做机房的、做通信的公司都在快速进入这个市场。而随着IaaS平台管理软件(比如openStack)的日益成熟,这个层次的技术含量将越来越小,工程强度和日常运维层次的要求反而会越来越高。

最后,会催生一个平行于银行系统、交通系统、通信系统同等体量的云系统。会不会被国有化难说,但必然会进入国家控制范围。

所谓上升,是指原来依托虚拟机来做弹性扩展等业务的平台,会迅速转移到进程级隔离的技术(比如Docker)上来。这将从根本上改变软件开发、软件测试、软件分发、以及软件销售的流程和格局。

如果还觉得抽象我说几个比较接近的词:Github、DevOPS、分布式SaaS。

就写到这里。这篇文章里边有很多的预测和个人观点,不一定是对的,但都是我思考过的。我尽量把得出结论的原因和逻辑表述出来了,大家在这个基础上去自行判断吧。当一个崭新的云时代夹杂着大块美金迎面砸来时,有人抛个砖总是好事,对吧。

私信发送DY可以订阅我的微博,不过也不知道下次写长文时哪天了……

分类:编程 时间:2013-12-02 人气:28
本文关键词: 系统架构
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.037 (s). 10 q(s)