云计算

1997年,Google的两位创始人,Larry Page和Sergey Brin,找Andy Bechtolsheim募集投资。

Andy问,“你们打算做什么?”

Larry和Sergey答,“打算把互联网上所有网页都下载,然后建一个搜索引擎。”

  Andy说,"把互联网上所有网页统统下载?!需要多大空间?

几个Giga不行吧,几个Tera也不行吧,几个Peta, 几个Zetta?。。。嗯, 我看几个Googol也许才能撑得住。知道Googol吗? 就是10的100次方,就是一个1后面拖100个0!"

  估计是Andy觉得这个项目不太靠谱,所以给的钱不多,只有1百万美元。只有这么一点钱,如果去买高端的存储系统,显然是不够的。走投无路的情况 下,Larry和Sergey决定用PC之类便宜的机器,组建一个机器集群。先凑合着用,等以后数据量增加以后,再购买更多的PCs,扩大集群的容量。

这个故事的真实性,有待考证。但是从中可以看到Google集群,也就是Google云计算的核心,要解决的四个问题。

1. 大规模的存储空间,用于存储海量的数据。

2. 随着业务的发展,新的数据源源不断地增加,存储空间需要相应扩大。用术语讲,这叫可扩展性,scalability。

3. 系统的硬件设备必须便宜,通常使用大宗产品(commodity),譬如PC,或者价格便宜,中等性能的Dell server。

4. 便宜的硬件设备,经常死机。所以在设计这个集群的时候,必须保证不能因为个别机器死机,导致整个系统的崩溃。也就是系统的稳定性要好,reliability。


【2】从Google集群到云计算,云计算的商业模式

起初Google集群是供内部使用的系统。Google为什么要开放这个系统,包装成云计算平台,给外界使用呢?

这 要从Google的商业模式说起。Google的绝大多数收入来自于广告,其它产品和服务的收入十分有限。其它产品包括Google盒子,这是给企业内部 网用的搜索引擎。把Google盒子安装到企业内部网,企业员工就可以搜索企业内部的文档,包括可以公开的文档,也包括仅供企业内部查阅的资料。虽然技术 很新颖,但是卖得并不好。据 ZDNet的报道  ,2008年度,Google盒子的收益,占Google总利润的份额,不到2%。

Google search appliance, 俗称Google盒子。
Courtesy http://mytwentyfive.com/blog/wp-content/uploads/byme/Google%20Search%20Appliances.jpg

单一的收入来源,抗风险的能力差。譬如经济危机一来,各个企业的广告预算缩减,势必影响到Google的利润。怎么办?挖掘自身的优势,发现更多卖点,搞多种经营。

Google的技术优势在哪里?有人说,Google的搜索结果精确,所以PageRanking算法是其精髓。其实,算法容易模仿复制,即使几年前PageRanking是Google的独家秘籍,但是今日各大搜索引擎,都有类似算法。

让Google独步天下的是它的集群。2006年,Google集群的规模 是45万台机器。两年过去了,有人推测现在的规模又翻了一番。由于Google从不公布准确数字,所以大家只能靠Google给硬件厂商下的订单推测。

推测虽然不准确,但是即便是10万台机器的规模,在历史上也是从无古人的,在当代也是独一无二的。而且,更重要的,是这个超大规模的集群系统已经经历了10年的实际运行,在实践中被证明,它是可靠的,是可扩展的,每台机器的价格也是低廉的。完全符合上一节列举的四个要求。

但是如何依靠这个独门神器挣钱呢?思路有两条。

1. 做hosting,数据托管。其它企业不用建自己的数据中心了,把数据存在Google的集群里得了,每个月交点托管费。

2. 不少Google的应用服务很有人气,譬如Gmail,Gtalk,Reader,Online docs,Picasa,Google earth还有YouTube等等。这些服务对于个人用户而言,完全是免费的。但是Google从来没有说给企业用户使用,也是免费的。譬如某家商店,开 了一个网站,网站上需要贴很多照片,还要给个地图给顾客引路。这个商店不需要自己动手建照片存储中心,也不需要开发技术难度更高的地图软件,只要调用 Google提供的相关服务就好。商店建网站是为了赢利,所以Google当然要向商店收钱。

第二个思路还有个副产品,那就是给Google创造更高的流量。流量越大,说明观众越多。对于广告商来说,哪里观众多,就愿意在哪里投放广告。所以,如果第二个思路能给Google带来更高流量,那么会吸引更多的广告,给Google带来更多的广告收入。

Google的高管们一合计,觉得有钱途。于是乎,大张旗鼓地制造舆论,educate the market。

造舆论,讲究的是措辞的简练,气势的磅礴。这个新的服务叫什么? 用工程师的语言,准确地定义,应当是“超大规模的,可扩展的,低成本但是高可靠性的服务器集群系统”。Google市场部的人一听,头摇得像拨浪鼓。不行不行,既不简练,也没有气势。

研究来研究去,于是乎,“云计算cloud computing” 这个概念粉墨登场了。

【3】Google云计算的矛头指向谁?

有一次听一位IT业长者指点江山。长者说,“Google像一个阳光少年,一路顺风顺雨,张张扬 扬。让人羡慕,招人喜欢。而微软像一个稳健的中年人,一路风吹雨打,过五关斩六将,毁誉参半。对于它的支持者而言,它是令人敬重的领袖,对于它的竞争者而 言,它是令人敬重的对手,无论如何,微软是令人敬重的。”

问及电脑的killer applications,长者说了三个,1. Email,2. Office产品系列,包括Word,Excel和PPT等,3. Web。Email和Web都是泛称,不特指某家公司的产品,但是Office系列是微软公司的产品。长者这样的表述,足见他对微软的推崇。

很少有人不知道微软,但是很少有人很了解微软。随便问两个问题,1. 微软哪一年成立的,2. 微软在哪个城市成立的,有多少人答得上来?

微软是在1975年4月,于新墨西哥州的Albuquerque市成立的,后来搬到了华盛顿州的西雅图市郊。从那时到2008年6月30日,Bill Gates掌舵了33年。然后把CEO的宝座让给了Steve Ballmer,自己则专心致志去散钱搞慈善去了。

Bill Gates舍得捐出自己绝大部分家产,这个心胸让所有地球人叹服。但是Bill为了保证他的基金会平稳运转,自己退休的同时,让微软一员老将,Jeff Raikes跟着他离开微软,出任基金会的CEO。Jeff Raikes离职,对于微软而言,是不可估量的损失。为什么这么讲?

微软有三个产品系列,

1. 大家熟悉的XBox游戏机,是微软the Entertainment and Devices Division的拳头产品。这个部门是微软从单纯的软件公司,扩张到家电行业的触角。虽然XBox的成功毋庸置疑,但是它能不能给微软带来丰厚的利润, 是摆在这个部门,尤其是其掌门人,Robbie Bach面前的巨大挑战。

2. The Platforms and Services Division,去年7月份被一分为二。一个专注于改善Windows操作系统,另一个负责在线服务。原来的掌门人,Kevin Johnson,挥挥衣袖离开微软,去Juniper Networks出任CEO。

新 的两位掌门人中,有一位是我们中国人,毕业于复旦大学的陆奇。从复旦毕业后,陆奇留学美国CMU,攻读博士学位。博士学位拿到后,经历了短暂的动 荡,1998年陆奇加盟Yahoo。他从工程师干起,扎扎实实,一路升到副总裁。2009年1月,陆奇学长离开Yahoo,出任微软Online Services Group的president。他的职责是,领导微软对抗Google。

2009年,争夺互联网霸主的大戏正式开演。

陆奇博士
Courtesy http://news.cnet.com/i/bto/20080619/qi_lu_mugshot_cred_yahoo_sm_300x422.jpg

3. 对于Windows操作系统的评价,好坏参半。但是对于Microsoft Office系列产品,业界基本上交口称赞。负责Office部门的原掌门人,就是刚才提到的Jeff Raikes。

Jeff Raikes
Courtesy http://i2.sinaimg.cn/IT/it/2008-01-11/U58P2T1D1967790F13DT20080111134704.jpg

2009年上演互联网争霸赛,微软与Google双方的战略意图相当明显。

1. 微软以陆奇为主帅,强攻Google的核心业务,网络搜索。

2. Google砸重金推广云计算,挑战微软的拳头产品,Outlook email系统,和Office产品系列。

攻防战的关键,在于寻找对方的软肋。

[1] Microsoft Outlook vs Google Gmail

Microsoft outlook email系统的软肋,在于它的后台系统不够稳定,容量也不容易扩展。对于用户而言,经常会遇到Outlook服务器联系不上,以及存储空间不够的麻烦。

看准这两点,Google把Gmail系统的号召力定位在,1. 稳定性,2. 无限的存储空间。Google之所以敢于这么叫阵,本钱就在于云计算平台。

当然微软也不会示弱,它们反制的着力点在于保密性。

譬如有一家企业叫foobar,Google的销售人员游说到,“别用Outlook了吧,那玩意儿经常掉线,而且隔三岔五地骚扰你说,存储空间没有了,请立刻删除不必要的emails。你的emails都很重要,怎么能删呢?用我们的gmail吧。” 

Foobar公司的IT主管说,“我们公司的邮箱地址是@foobar.com,换成@gmail.com,不仅不方便,而且也有损于我们公司技术实力的形象。”

Google的销售人员说,“不用换邮箱地址,表面上看仍然是@foobar.com,用户也可以继续使用Outlook桌面工具,但是后台服务器被悄悄地换成了Gmail的云计算平台。”

Foobar公司的IT主管心思有点动摇。

这时候,微软的销售人员上门,说到,“听说你们想把email后台系统换成gmail?这可需要一点勇气。你们把公司所以emails,存放在Google的平台上,万一Googler偷窥你们的emails,贵公司的商业机密,。。啊,哈哈。”

所以,为Google进言,欲挑战微软outlook,必先解决gmail的保密性。也就是其它公司的emails虽然存放在Google的云计算平台,但是Google能够提供足够的技术保证,即便是Googler有意偷窥,他们也看不到。

[2] Microsoft Office vs Google Docs

Microsoft office 产品的软肋,在于所有文件存放在电脑本地。

譬如我在办公室写了一个设计草稿,通过email把文本发给一个同事审阅。晚上回家后,查看email,收到同事回复,说他做了一些文字上的改正,修订版 本放在email的附件中,同时建议多加几个插图。我加了几个插图后,文件尺寸变得很大,email发了很久,还是没有顺利发出。于是我把文件存在U盘 上,第二天上班后,拿给同事看,然后进一步修改。

Google的销售人员游说到,“你这样左一个文本,右一个文本,不仅不容易找,而且修改过的内容很容易遗漏。用Google Docs,就可以省掉所有这些麻烦。文本放在Google云计算平台上,无论你是在办公室里,还是在家里,你都可以对同一份文本进行修改。而且你可以与你 的同事共享这个文本,他也可以对同一份文本进行修改。”

我问,“万一我不同意同事的修改怎么办?”

Google的销售人员回答,“没关系,就像wiki一样,所有修改都有记录。如果需要,你可以恢复旧版本。还有,如果你需要查找几年前你写的另一份文件,你不必记住名字,只要一搜索就可以从故纸堆里找出来。”

于是我心旌动摇,准备建议领导把公司的设计文档全部放到Google Docs里去。这时候,微软的销售人员上门了。“听说你要建议把公司所有机密设计文件,转移到Google Docs中去?不怕Googler偷看呀?”

我说,“Google已经提供了解决方案,给我们所有文件加了密,密钥掌握在我们手里。即便Googler想偷看,他们也看不到。”

微软的销售人员说,“这样就好,安全第一。另外,你们的设计文档格式很简单吗?示意图怎么画,Google Docs有类似于微软Visio那样的工具吗?还有,如果你要比较两份不同的文件有什么差异,Google Docs有没有微软Word那样‘比较与合并’ 等等功能?”

微软反制的着力点在于,Google Docs的所有操作都在浏览器里完成,所有功能都通过JavaScript实现。受制于JavaScript的限制,Google Docs在功能上,不仅目前赶不上Microsoft Office,而且预计在相当长的未来,也不可能与之抗衡。

【4】云计算大战,Google出招

两军对垒,通常双方阵线连绵数十公里。在发动进攻的时候,很少出现全线推进的情况。相反,进攻往往出现在有限几个突击口上。集结强大兵力,在几个突击口上猛烈打击,期望在敌方阵线撕开缺口,然后向敌方纵深挺进,分割敌人阵线,再逐个合围,各个击破。

巴巴罗萨战役 Operation Barbarossa
Courtesy http://upload.wikimedia.org/wikipedia/commons/3/34/Operation_Barbarossa.png

大 公司之间竞争也有类似特点,双方都有很多产品和服务,而且功能类似,这就像战争中两军对峙的阵线。当一个公司向对手发动竞争攻势的时候,往往选择少数几个 产品,大做广告和其它市场推销活动,以期迅速扩大在相关市场的占有率。这类似于在战争中,选择突破口,集结兵力,发动冲击,企图撕开敌军阵线。

譬如Google Docs,虽说它上线已有相当时日,但是从没有见到Google大规模宣传这个服务。所以Google Docs与Microsoft Office,是对峙的阵线,而不是发动进攻的突击口。

Google在云计算战役中,选择的突破口是什么产品和服务呢?答案,Google gadgets。
Google gadgets
Courtesy http://www.elanso.com/U/Db3/b3a49166ba7dcceb2221664c 2e6181f1/128317955143437500.gif

Google gadgets简化了建网站的工作。 每个网页可以视作多个元素集成,譬如上面显示的网页包含6个元素,从左上到右下分别是天气,时钟,日 历,YouTube视频,生活小窍门,以及搜索。网页元素,portlet,这个概念早在1999年就已经出现。Google gadgets是portlets的一种实现方式,与其它实现方式相比,Google gadgets的优势是使用方便。

譬如某人想建一 个网站,在网站的首页的下方,想插入一个搜索框。他不用担心如何去实现隐藏在页面背后的搜索引擎,他要做的,仅仅是在网页的HTML里,插入几行 JavaScript。这几行JavaScript,不仅在页面上显示了一个搜索框,而且更重要的是把这个网页与Google的云计算平台联系在一起。每 当用户输入搜索请求时,这段JavaScript就把用户的请求,转发给Google搜索引擎,然后接收Google搜索到的结果,并显示在网页上。

Google gadgets的意义在于,不再像以往的产品那样,在电脑本地获取服务和内容。Google gadgets的服务和内容,来自于Google云计算平台。譬如以往的时钟,显示的时间是由电脑自己演算出来的。如果系统设置错误,时钟就有可能出错。 但是Google gadget的时钟,它的时间不是电脑本地演算的,而是从Google云计算平台索取的。只要Google云计算平台不出错,只要网络链接正常,即便电脑 本身的设置出了问题,Google gadget时钟也照样准确。

Google gadgets不仅可以给建网站的人提供便利,基于同样原理,Google又推出了Google desktop gadgets。它给千千万万普通的电脑使用者,带来多样化的,时尚的服务。

Google desktop gadgets
Courtesy http://vishnus.name/blog/files/vishnu_yahoowidgetmemoryuse.jpg

有人说,Google gadgets让电脑弱智。因为一旦Google gadgets大行其道,电脑就无需强大的CPU和存储空间,它所需要的无非是浏览器,接收用户的请求,转发给Google云计算平台,云计算平台提供内 容和服务,然后浏览器接收这些来自云计算平台的内容和服务结果,并且把它们显示给用户。

其实,企图让电脑弱智的,不仅仅是Google云 计算,早在1996年,Oracle总裁Larry Ellison就提出过网络电脑(Network computer)的构想。网络电脑的功能,仅限于浏览器,而内容和服务来自于网络服务器端。与Google云计算平台不同的是,Larry的构想是,网 络服务器端最好是Oracle的数据库以及Oracle的应用服务器。

十多年过去了,Larry的构想没有成为现实,原因有三,

1. Network computer的卖点是便宜,因为与传统PC相比,NC无需昂贵的CPU,内存和硬盘。但是近十年来,PC的价格迅速下跌,NC的卖点失去了吸引力。

2. Larry Ellison设想的,以Oracle Database为核心的网络服务器,没有提供很好的可扩展性,也没有提供大量的有吸引力的应用。

3. 网络带宽的发展,没有超过PC计算能力的发展。

十年后的今日,以Google云计算平台为代表的网络服务器集群,比Oracle Database有了长足的改进。不仅可扩展性更好,而且Google提供了很多能吸引人的服务,譬如搜索,视频(YouTube),地图等等。

同时,虽然网络带宽的发展没有超越PC计算能力的发展,但是至少在很多地区,网络带宽不再是制约网络服务发展的瓶颈。

Network computer失败的三条原因中,两条发生了变化,所以,Google拾起老概念,换上新包装,向微软发起攻势。其战略目标,无非是弱化PC本地计算能力的重要性,增强对Google云计算平台的依赖性。

下一步Google gadgets的发展方向是什么?

请注意,目前绝大多数gadgets都是单向使用Google云计算平台所提供的内容和服务,而缺少促进用户上传新的内容和新的服务的gadgets。

所以,不妨大胆预测一下,Google下一步将非常热衷推出像论坛(forum),维基网页(wikipage)这样的gadgets。通过它们,促进用户给Google云计算平台上传用户生成的数据。

进一步,Google将投入巨大资源,发展AppEngine。AppEngine的用处是方便用户开发新的服务逻辑,并且在云计算平台上运行这些新的服务。但是AppEngine的开发,势必遇到很多技术上的困难。详细分析,我们留给下一篇来讨论。

 

 【5】是云计算,还是云存储?


Gadgets的目标是方便大家建网站。但是单靠gadgets,建网站的工作还是不够方便。

通常网站有三个组成部分,1. 网页,2. 业务逻辑, 3. 数据存储。如果说网页相当于商店,那么业务逻辑相当于车间,而数据存储相当于仓库。商店,车间和仓库三者中,技术含量最高的,当属车间。
Manufacture in old time
Courtesy http://www.atlantic-cable.com/Cables/1857-58Atlantic/Cable-Manufacture.jpg

车间管理可以大致概括为两件事,1. 工艺流程,2. 资源调度。工艺流程关心的是,先做什么,后做什么,才能生产一个完整的产品。资源调度的问题是,哪个工人,用哪台机器,在哪个时间,做什么。

网站的业务逻辑处理,大致来说也分业务流程和资源调度两部分。

流程的设计,每个网站不尽相同。譬如有两个网站,一个招聘人才,另一个销售图书,它们的业务流程非常不一样。但是销售图书的网站,与销售电器的网站,它们两者的业务流程相对比较接近。

流程设计千变万化,而资源调度却有章可循。所谓计算机资源,无非是这五种东西,1. CPU,2. RAM,3. Disk,4. RAM-Disk IO,5. Network。资源调度,无非是优化使用这五种资源,使之在最短的时间内,完成分配来的工作。

优化使用这五种资源,目标挺明确,实施起来却相当不容易。一日偶遇一仙人,谈到计算资源调度优化的问题,仙人说,他有一套五行八卦的优化办法,用中国古代智慧,解决当今科技难题。我把仙人的办法概括为以下几个要点,

1. 五行相生相克,系统优化不能偏执单一资源的优化。

2. 系统的总体效率需要一个测度,这个测度被称为“阴阳度”。

3. 阴阳度不是五种资源的简单加权和。阴阳度与五行的关系是非线性的,这种非线性关系可以参照河图洛书来确定,譬如规定五行中土的阴阳度为0,河图数零点的阴阳度为-5,洛书数零点的阴阳度为-10。

4. 时刻监控系统总体的阴阳度,阴阳度变化的正常模式可以分为太极,太虚以及太一三种。

5. 当阴阳度的变化偏离了正常的模式,就需要对系统进行调整。调整的办法参见“说卦”中的六种范式,即洛书逆式,先天八卦,后天八卦,神也者,洛书顺式,和乾坤六子。

仙人的办法听上去很有美感,但是操作起来却有难度。正在困惑之时,听到Google宣布,“我有办法解决资源调度问题,你们只须专注于业务流程”,确实为之感召。

Google的解决办法,是AppEngine。

Google AppEngine logo
Courtesy http://img.genbeta.com/2008/04/google-app-engine.png

问题是,Google AppEngine真得能够优化任何业务流程的资源调度吗?

譬如有人想建一个人才招聘网站,招聘的业务流程如下图所示。Google打算劝说这个人把网站建在Google云计算平台上,做为技术支持,AppEngine应该提供哪些功能?

Recruiting process business logic
Courtesy http://www.infoq.com/resource/articles/seven-fallacies-of-bpm/en/resources/job_application_process.jpg

猛一看,觉得很容易,流程清楚,算法简单。只需要把流程中诸多环节,归并成几个模块,即大功告成。

再看看,事情没那么简单。整个流程不是从头到尾一次走完,譬如interview会有好几次,然后过几天才会发offer。所以,应当把整个流程的每个模块独立出来,封装成服务,每个服务能够独立运行。召之即来,来之能战。平时不用,不占资源。

SOA(Service Oriented Architecture)还有一个好处,是便于重组业务流程。譬如系统上线以后,发现在面试(interview)以前,还需要添加一个电话约谈 (phone screen)的环节。如果流程中每个服务都能独立运行,添加新的服务就很容易,不至于造成牵一发动全身的局面。

SOA的结构设计,有很多优点,但是仍然有遗留问题。如果同时有很多人使用这个招聘网,系统的吞吐量需要随之加大,怎么办?增加系统吞吐量的办法,有两条思路。

第一种办法是购置多台机器,每台机器上安装所有服务。当很多人同时使用招聘网的时候,把他们的需求均匀转发到各个机器上去,这样每台机器的负载都不大,但是整个系统的吞吐量增加。

第二种办法的效率更高,它可以用数量较少的机器,达到和第一种办法相同的吞吐量。或者,用相同数量的机器,在更短的时间内完成所有任务。这种办法首先分析 每个服务耗费的资源,譬如CPU时间和RAM空间等等。然后给资源耗费量大的服务多分配几台机器,以免它们成为整个业务流程的瓶颈。

第二种办法虽然有很多好处,但是实现起来有些难处。首先是如何监控和分析每个服务的资源消耗,其次是如何自动把服务从一台机器转移到另一台机器去运行。

或许有人会问,为什么不提多线程的办法呢?所谓多线程是把多个任务交给多个线程去完成,这些线程交叉使用CPU,IO,Disk等等资源,减少使用这些资 源前的排队时间。多线程的办法,关注的是每个服务的实现细节。而我们刚才讨论的,是服务与服务之间怎么整合的问题,所以,是不同层面的问题。

又有人问,为什么不提MapReduce之类并行处理的办法?与多线程一样,MapReduce关注的是每个服务的实现细节,是不同层面的问题。

回到前面的问题,如果Google打算劝说大家把网站建在Google云计算平台上,做为技术支持,AppEngine应该提供哪些功能?

1. 开放更底层的APIs,而不仅仅是Python的APIs。便于第三方开发人员,实现逻辑复杂,以及资源使用方式复杂的模块。

2. 提供IDE,方便第三方开发人员,把模块封装成符合Google云计算平台规范的服务。

3. 开发调度工具,用于监督各个服务资源消耗,分配合适的机器去负责各个服务运行等等。

4. 开发预警和修复工具。开放自己的平台,去运行第三方人员(外人)开发的服务。对于Google来讲,有理由提高戒备,预防云计算平台崩溃,万一崩溃了,能够迅速修复。

这四个功能,AppEngine目前都没有实现,所以云计算平台,对于第三方开发人员来说,暂时不是计算平台,而是存储平台。

【6】安全性的难题,有解还是无解?

对于Google来说,如果希望AppEngine能够获得商业上的巨大成功,吸引更多用户,尤其是企业用户,最大的挑战在于,如何保障客户的数据和私有程序的安全。

举个例子,譬如Google想劝说某家银行,用不着银行自己建数据中心,把银行的数据存到Google的云计算平台,每月给Google一笔数据托管费即可。银行很可能会问两个问题,

1. 如何防范Google员工偷窥银行的数据?

2. 银行有投资业务,所以银行自己开发了一套软件,用于评估投资风险和收益。如何防范Google员工偷窥这些软件的代码?

Google当然会派律师去游说,指天画地地发毒誓,说如果出现Google偷窥数据及代码的情况,根据双方合同,Google必将受到法律严惩,等等。

但是银行还是不放心,作案取证本来就麻烦,如果Google再做点手脚遮掩,很可能查无实据。即便能找到实据,一个案子办下来,时间也得拖很长。

这个问题,困扰的不是Google一家,而是所有负责数据托管的公司面临的共同问题。所以,现在只有两类公司,敢把数据托管给他人。一种是中小企业,他们 或许会觉得自己在竞争对手眼里不那么重要,对手不至于甘冒风险去刺探自己的机密。另一种是数据本身机密性不高的公司,譬如新浪网,天涯社区等等,他们的数 据内容本来就是公开的。

所以,如果Google打算吸引重量级企业用户来使用云计算平台,最好的办法是从技术上想出路,保证做到,即便Google挖空心思想偷窥,也看不到。

1. 有人问,为何不用VPN技术呢?

VPN(Virtual Private Network)虚拟私网,解决的是在如何通过公共网络,远程访问企业内部私网的问题,譬如在家处理公司业务,需要把自家的电脑,通过公共网络,接入到公 司内部网络中去。所以,VPN解决的问题主要在于,保证家里电脑和公司电脑传输数据时,数据通过公网时的安全。

经常在北京街头看到振远护 卫的押运车,以及持枪的押运员,负责运输现钞,有人戏称他们是振远镖局。镖局的任务之一是,把现钞从银行押运到各个ATM自动取钱机,中途通过公共马路。 现钞安全到达目的地,镖局的任务圆满完成。但是,如果有谁把ATM取钱机撬开了,镖局不负责任。

类似的道理,客户可以通过VPN把数据安全地传输到Google云计算平台,但是VPN不能阻止Google的内部员工偷窥存放在Google机器上的数据。


振远护卫在奥运会期间负责押运运动员尿样
Courtesy http://i1.sinaimg.cn/qc/cr/2008/0828/4024560575.jpg

2. 还有人建议,可以给数据加密。

客 户在上传数据到Google云计算平台前,先用私钥(private key)给数据加密,这样存储在Google云计算平台的数据,是加了密的数据。Google员工即便打开了文件,看到的也不过是一堆乱码。当客户授权给 他的同事看数据时,给同事一份公钥(public key)。同事用这个公钥解码,然后就能读到真实的内容了。

德国人的钥匙很有意思,办公室的钥匙,同时可以打开大楼的门,以及公司的门,但是不能打开隔壁办公室的门。隔壁办公室的钥匙,也可以打开大楼的门,以及公司的门。所以,德国人的钥匙和锁,是有层次的。

公钥也可以这么设计,一个部门的公钥,不仅可以解密本部门的文件,而且可以解密公司内部公开的文件,但是不能解密其它部门的文件。实现这样有层次的公钥并不难,一个简单的办法是把整个公钥分成几段,第一段负责公司内部公开的文件,第二段负责某特定部门的文件等等。

这个办法猛一听起来似乎可行,但是仔细想想却不然。它有四个缺陷,a. 不能给程序加密,b. 不能搜索加了密的数据,c. 不能给数据库文件加密,d. 公司员工离职后,有可能会造成私钥和公钥的外泄。

3. 程序如何加密。

按照前一段的思路,平时给程序加密,只有当运行程序前,才解密。程序运行结束后,再度加密,同时销毁解密了的程序。但是这个办法不可行。

解 密和加密,是相当耗用CPU的,同时占用时间也比较长。如果实施平时加密,用时解密的措施,用户等待时间会相当长。更严重的是,通常一段程序不能解决所有 问题,一段程序往往会调用其它程序,其它程序又调用另外程序。如果平时把所有程序加密,用时再逐个解密,整个流程将占用很长时间,这将严重影响用户的体 验。

现实中通行的办法是给程序变形,学名叫Obfuscation。道理很简单,把程序中的变量名称转换掉,同时切割整个程序,并且重新排序,以便混淆耳目。变了型的程序依然可以运行。

正常的编译过程,是把人类可读的源代码(譬如用Java写的程序),翻译成机器代码(譬如Java bytecode)。而反编译是把机器代码,逆向翻译成人类可读的源代码。虽然Obfuscation不能从根本上阻止反编译,但是却增加了这个工作的难度。

虽然有难度,但是重赏之下必有勇夫。譬如,如果能盗窃银行密码,肯定会有人不辞劳苦地反编译。

4. 加密与搜索。

“Greatness is never a given, it must be earned”,这句话怎么翻译?在Google或者百度里搜一搜这句话,一定会发现这是奥巴马总统就职演说中的一句。有人翻译成,“伟大不是凭空而来 的,而是赢得的”。意思当然不错,但是觉得不如原句有气势,不如翻译成,“坐等等不来伟大,伟大必定来自于努力”。

Google和百度是如何搜索到这话出自奥巴马的演讲呢?道理说穿了并不复杂。

首先,Google和百度建一个索引,学名叫倒排索引(inverted index)。倒排索引中记录了每个单词出现在哪些文章中,而且记录了在这些文章中的什么位置出现过。

其 次,当用户搜索“Greatness is never a given”,搜索引擎通过倒排索引,查找“greatness”在哪些文章中出现过,查找“never”在哪些文章中出现过,等等。然后把众多的搜索结 果合并起来,看看哪些文章中不仅出现过“greatness”,还出现过“never”,“given”等等。

如果把奥巴马原文加了密,不仅每个词都变成了乱码,而且词与词之间的空格消失了,甚至连词序也可能被打乱。这样一来,就没有办法按照通常的做法构建倒排索引。

怎么办?思路有三条。

a. 把加密算法和构建倒排索引的算法通盘考虑,重新设计一套一体化的算法。

这个思路能够一揽子解决我们面临的所有问题,但是设计这套算法的难度很高。目前还没有人能够想出有效的算法。

b. 客户自己动手建倒排索引,然后把索引加密,上传到云计算平台。

但是构建倒排索引是一件计算量很大的工作,如果客户能够自己构建倒排索引,那么就没有必要使用云计算平台。理由是,云计算平台的卖点是方便客户处理繁重的数据计算。如果云计算平台不能帮助客户构建他们专用的倒排索引,那么云计算的卖点就大大失色。

更 严重的问题是,在使用索引的时候,必须先解密。如果解密了的索引被Google员工偷看了,那么加密就失去意义了。原因是,索引中透露了正文中出现过那些 词,以及这些词出现的位置。通过索引中的这些信息,可以复制原文的。即便不能一字不漏的全文复制,也能复制得八九不离十。

所以,这个思路不可行。

c. 在云计算平台中分离出一部份作为密室,专供企业用户存放保密级别很高的数据,以及运行保密级别很高的程序。

信息安全的法则是分离分离再分离。给每个企业用户分配一部份机器作为密室。这些机器的Root权限掌握在企业用户手里。Google的员工只能监控密室中的机器的CPU,RAM和IO的使用情况,但是他们没有权限进入机器,查看文件,运行程序。

这个办法虽然技术含量不高,但是比较容易实现。缺点是容易造成资源浪费。因为如果给每个客户单独开密室,即使密室里的机器空闲,别人也没法用。

5. 加密与数据库。

数据库最多只能对字段逐个加密,譬如“greatness”变成“@#¥%”。但是不能整句整段地加密,否则数据库的索引,B+ tree,就没法构建。

所以,对数据库的系统管理员,无法实施高级别的加密。

6. 私钥和公钥的外泄。

公司员工离职后,很可能复制一份公司的公钥和在职期间自己使用的私钥带走。如果沿用前面所述,用私钥加密,用公钥解密的办法,员工离开公司后,仍然能阅读公司的文件,甚至篡改当年自己在职期间起草的文件。

所以,最妥善的办法是不让员工直接接触公司密钥。从这个原则出发,作者也好,读者也好,都没有密钥。作者要加密,读者要解密,让他们把文件发给密钥中心,由密钥中心统一负责加密和解密。

另外,即便由密钥中心负责保管密钥,如果长期使用同一套密钥,还是不安全。所以,密钥中心定期更换密钥,分批给文件重新加密。

这个办法可行,但是比较笨拙,因为,a. 密钥中心成为瓶颈,b. 给旧文件重新加密是负担很重的工作。
Durer's grid
Courtesy http://employees.oneonta.edu/farberas/arth/Images/ARTH_214images/Durer/durer_perspnude_large.jpg
前面花了相当长的篇幅讨论各种为托管的数据和程序加密的办法,结论是,现有技术无法保障被托管的数据和程序被偷窥。

为Google计,目前能做的,似乎是明确云计算的定位。

1. 锁定目标客户,这些客户有一个共性,就是对内容和程序的安全性不敏感。

比如各种门户网站,论坛,B2C网上商店,政务和各种公共事业的网站,以及中小型企业等等。这部分用户数量不少,市场相当广阔。

2. 提供特色服务,尤其是海量数据处理。

云计算平台类似于巨型计算机。客户利用云计算平台,处理自己的计算中心很难完成的海量数据处理。例如:电脑动画制作,天气预报等等。

3. 根据不同的保密等级,做分级处理。

实际上一个企业的重要秘密信息是不多的,机密文件存放在企业自己的机房里。其它不需要保密的文件,托管到云计算平台。这个市场也是很大的。

你可能感兴趣的:(云计算)