解剖 Facebook 【7】 重口味的云计算
几周前,某君发了一张照片给我。这是研制中的云计算集装箱,把数据中心一整套设备放进集装箱内,实现移动式云计算数据中心,见图一左侧。
图 1. 云计算集装箱 vs 移动厕所。
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/Cloud/vs.png
他问我,这个云计算集装箱,是不是很像移动厕所?
作为云计算工程师,我对这个类比有本能的心理抵触。
他接着说,不仅外型像,而且在本质上,云计算也与移动厕所很像。
我疑惑地看着他,很想知道那张嘴,还会说出什么雷人的话。
他问到,现在忽悠云计算的厂家很多,如何评判谁是真正的云计算?
还没等我回答,他接着说,检验云计算有四项基本原则,1. 大规模,2. 可扩展,3. 超稳定,4. 高弹性。
这里我先解释一下这四项基本原则。
1. 大规模。
截止 2010 年 4 月,Twitter 注册用户超过 1 亿,见图二。支持这么大规模的用户群,Twitter 网站的后台系统,需要大规模的计算和存储能力 [1]。
而 2010 年 10 月底,国内的新浪微博用户数,也超过了 5000 万,大有赶超 Twitter 的势头。所以,新浪微薄的网站,也需要大规模的后台系统 [2]。
图 2. Twitter 统计,2010 年 4 月 [1]。
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/Cloud/twitter-on-paper.jpg
2. 可扩展。
单单具有大规模的计算和存储能力,算不上是云计算。
从 2006 年 5 月 Twitter 上线,到 2007 年12 月,在这一年半的时间里,Twitter 用户数从 0 增长到 6.6 万。又过了一年,2008 年 12 月,Twitter 的用户数达到 5 百万 [3]。而截止 2010 年 4 月,Twitter 注册用户又增长了近 20 倍,超过 1 亿。
而新浪微博,起步虽晚,但是势头强劲。2009 年 8 月 28 日,新浪微博上线。66 天后,2009 年 11 月 2 日,新浪微博迎来了第 100 万个用户。2010 年 4 月 28 日,注册用户首次突破了千万大关。2010 年 8 月 28 日,新浪微博一周岁生日之际,注册用户数增长到 3000 万。截至 2010 年 10 月底,这一数字已经达到了 5000 万 [2]。
IT 界有句名言很给力,“在中国能办到的,在美国一定能办到。反之,不成立”。原因很简单,人口规模相差甚远,导致成长空间相差甚远。
伴随着用户数量的增长,网站的后台系统的承载能力,也必须相应增长,而且在增长的时候,不能破坏现有系统。这就是可扩展性。
图 3. Twitter 的成长历程 [4]。
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/Cloud/TwitterGrowth3.png
3. 超稳定。
仅仅具有大规模的,和可扩展的计算和存储能力,还算不上是云计算。
2009 年 4 月 26 日,Twitter 扛不住太多用户导致的流量压力,进而崩溃 [5]。此后又多次发生这样的故障。
2010 年 12 月 1 日,新浪微博注册用户突破 5000 用户后不久,新浪的后台系统也开始领教大规模的用户群,带来的洪水般的流量冲击的厉害 [6]。
要称得上云计算这个光荣称号,不仅要大规模,可扩展,还必须超稳定。向蒸不烂、煮不熟、搥不匾、炒不爆、响珰珰的一碗铜豌豆看齐。
图 4. Twitter 和 新浪博客崩溃
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/Cloud/Twitterfails.png
4. 高弹性。
美国的年度橄榄球决赛,绰号超级碗 (SuperBowl)。SuperBowl 在美国的收视率,相当于中国的央视春节晚会。
2008 年 2 月 3 日,星期天,该年度SuperBowl 如期举行。纽约巨人队 (Giants),对阵波士顿爱国者队 (Patriots)。这是两支实力相当的球队,决赛结果难以预料。比赛吸引了近一亿美国人观看电视实况转播。
对于Twitter 来说,可以预料的是,比赛进行过程中,Twitter 流量必然大涨。比赛越激烈,流量越高涨。但是 Twitter 无法事先预料的是,流量究竟会涨到多高,尤其是洪峰时段,流量究竟会冲到多高。
事后统计 [7],在 SuperBowl 比赛进行中,每分钟的流量与当日平均流量相比,平均高出 40%。在比赛最激烈时,更高达 150% 以上。与一周前,2008 年1 月 27 日,一个平静的星期天的同一时段相比,流量的波动从平均 10%,上涨到 40%,最高波动从 35%,上涨到150%以上,见图五。
由此可见,Twitter 流量的波动十分可观。对于 Twitter 公司来说,如果预先购置足够的设备,以承受流量的变化,尤其是重大事件导致的洪峰流量,那么这些设备在大部分时间处于闲置状态,非常不经济。但是如果缺乏足够的设备,那么面对重大事件,Twitter 系统有可能崩溃,造成的后果是用户流失。
怎么办?办法是变买为租。Twitter 公司自己建设的后台系统,规模无须太大,能够应付平时的平均的流量即可。同时租赁云计算平台公司的设备资源,以应付重大事件来临时,突发的洪峰流量。 Twitter 就是通过租赁第三方( Netcraft 公司) 提供的云计算资源的办法,顺利挺过了 SuperBowl 的洪峰冲击 [8]。
2011 年春节将至,新浪微博势必迎来创纪录的流量高峰。去年 2010 年央视春节晚会,收视率高达 95%,几乎每个中国家庭都在看 [9]。2011 年央视春节晚会现场直播之际,新浪微博的洪峰流量将冲到多大规模?新浪后台系统,能不能扛得住洪峰流量冲击?如果不行,新浪将租赁哪一家公司提供的云计算 服务?这些都是吊足 IT 人胃口的悬念故事。
图 5. 2008 年 2 月 3 日,SuperBowl 决赛导致 Twitter 洪峰
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/TweetFlood3.png
前面解释了云计算四项基本原则,1. 大规模,2. 可扩展,3. 超稳定,4. 高弹性。
接下来继续讨论云计算与移动厕所的相似性问题。
某君说,上海世博园区内的移动厕所,见过没有?不是一字排开,而是成方阵排开。这样的厕所方阵,在世博园区内有多处。这是什么规模,算不算 ”大规模“?
并非刚开始就这么大规模,而是随着世博游客越来越多,逐渐增加了移动厕所的个数。如果有需要,还可以随时增加新的厕所单元。这算不算 ”可扩展“?
万一哪一个厕所单元坏了,就把它撤换下来,换一个能正常工作的。厕所方阵整体的正常运行,不会受到严重影响。这算不算 ”超稳定“?
世博晚上经常放烟花,演节目,这时候游客聚集于世博园中心区,厕所不够用。怎么办?傍晚时,把其它区域的移动厕所,暂时挪用到中心区,满足聚集在中心区的游客。第二天凌晨,再归还原处。这算不算 ”高弹性“?
最后,他总结到,一提到云计算,我就联想到移动厕所。
这个总结,让云计算工程师们,情何以堪?
但是想说服重口味的某君,停止这样的联想,却不容易。
如果你说,这样的比喻,伤害了云计算工程师的感情。
他多半会反问,为什么餐馆是高雅的,而厕所是卑贱的?为什么嘴巴是高雅的,而肛门是卑贱的?你是不是有器官歧视?
要阻止重口味的某君,把云计算比喻成移动厕所,最有力的办法是,理性分析并论证,这个比喻不贴切。但是这话怎么说呢?
Reference,
[1] Twitter facts, April 2010.
http://www.penn-olson.com/2010/04/23/twitters-current-statistics-infographic/
[2] 2010 年 10 月底,新浪微博用户数超5000万
http://tech.sina.com.cn/i/2010-11-16/10314870771.shtml
[3] Fixing Twitter.
http://www.bookfm.com/courseware/coursewaredetail.html?cid=100777
[4] 关于社交媒体的 55 幅图
http://article.yeeyan.org/view/163202/155307
[5] Twitter fails,April 26, 2009.
http://news.cnet.com/8301-13577_3-10213501-36.html
[6] 2010 年 12 月 1 日,新浪微博出现大规模访问故障。
http://news.duote.com/news/4/9931.shtml
[7] Twitter traffic during Super Bowl 2008.
http://blog.twitter.com/2008/02/highlights-from-superbowl-sunday.html
[8] The usage of Netcraft by Twitter.
http://toolbar.netcraft.com/site_report?url=http://twitter.com
[9] 2010 年央视春节晚会收视率高达 95%。
http://hi.baidu.com/ljh19880403/blog/item/466f1c345eae6bbcd0a2d300.html