06年时孟严写过一篇很有意思的"MapReduce, the free lunch is not over ?", 其中提到了C++大师Herb Sutter的文章,因为CPU主频的进一步发展受到制约,我们已经不能像从前几个时代那样期待软件性能可以随着CPU的性能水涨船高,从而,"The free lunch is over" 我们将不得不基于有限的CPU主频来应对日趋复杂的应用,唯一解决之道就是改变我们的编程模型,面向多核多CPU甚至多机的硬件架构来实现并行运算,这个过程可以称为Concurrent Programming.
但是包括分布式运算在内的Concurrent Programming, 并不容易实现。我们在开发CIC内部的分布式文本存储和索引引擎时,对此也深有体会。其中对编程思维最大的冲击是:单机的软件开发,大部分时间可以很放心的假设所有的硬件都是正常工作的,譬如你的CPU不会突然挂掉,硬盘不会有坏道,内存不是购自奸商等等;但是放在一个分布式的环境中,这一切假设都不成立了,不正常才是正常。借助一个简单的概率公式来演示,如果一台机器的可靠性是99%,那么包含100台这样机器的分布式系统,其中有那么几台出状况的概率 就飙升到了63.4%(1-99%^100),更不要提还有网络设备可能造成的故障。这样恶劣的环境里,你要考虑计算的同步还有事务性,资源的调度,数据的安全性和冗余,系统整体的容错...... 如果未来每一个程序员写任何程序都要考虑这些情景,那么各位优快云版上兄弟姐妹就要提早教育自己的孩子,珍惜生命,远离编程。
好在孟严在文中给出免费午餐延续的另一可能,即Google的"集群 - Googel Cluster,分布式文件系统 - GFS,分布式计算环境 - MapReduce,分布式结构化存储 - BigTable"等等。 只是这些优秀的技术,一直都是Google公司内部的盛宴,外人只有眼馋的份儿,好在还有开源的Hadoop 可以一定程度弥补大家的缺憾。不过对于很多公司来说,即便是配置Hadoop,也不是易事一件,此外还要考虑购买机器,网络带宽等等。
Google新近推出的App Engine, 往免费的方向更近了一步(借用开源软件的术语,这里的free,是free beer的free,而非free speech的free)。App Engine的 Blog 上对其特性有如下描述
- 动态的Web 服务
- 由Google Bigtable 和 GFS 支撑的存储系统
- Automatic scaling and load balancing
- Google APIs for authenticating users and sending email
- Fully featured local development environment
看看,从帐户管理,到有负载均衡的Web服务,到分布式存储后台,Google一揽子都替你做好了,同时还有相当慷慨的资源配额策略,譬如任何应用可以免费使用500M的存储空间,每天上下各10G的网络流量。
作为商业公司,Google此举当然不是搞慈善,免费午餐的背后,是叫人不得不佩服的Google思维及相应高超的实现能力,用免费的平台来吸引各类数据和应用,再用统一的权限管理来粘合所有应用,把一个个小团体的疆界打通,连成更大的团体。Google的Jeff Huber 去年说,“关于哪个平台获胜的争论可以休矣,Web已经赢了, The Web is The Platform." 我们CIC前年在讨论互联网的趋势时提出的“Internet is THE Community”,也是类似的意思。于是我们看到Open Social,也看到了最近的App Engine。
参考文章:http://www.infoq.com/cn/news/2008/04/google-app-engine-simplifies-web