这两种新趋势产生了完全崭新的方式来思考、设计、构建应用。现在我们来谈下我们怎么达到,我们怎么做的,未来给我们的启示。
那时候,架构图里的每个组件都有一个确定的描述与之相关。每个东西都是一个单独的功能: “the” database(数据库), “the” web server(服务器), characters in a one-room drama(用户). 顺便提一下,这就是“the cloud”这个词的来源。一个轻软/毛茸茸的云是WAN的标准符号,而WAN的细节我们完全不用操心。
容易实现的分布式计算得到了主流的亲睐。多个完全相同的应用程序服务器藏在一个负载均衡器(load balancer)之后,这个均衡器把负载差不多平均地分配到应用程序服务器上去。只负载均衡那些架构中状态无关的部分回避了很多哲学上的问题(理论上的情况?)。当系统扩展时,这些组件从侧翼包抄,最后包围了“the” database。我们告诉自己,给数据库换上更快的磁盘、更快的CPU很正常,毕竟还是只需要一台机器。硬件提供商很高兴地赚着我们的钱。
最后,数据库备份成为合情合理的,加了一个热备份数据库(hot spare database)后,我们的良心得到些许宽慰。然后我们告诉自己,不会再有任何故障了。当然,这种正确性只存在了几分钟。 当然,热备份经常是空闲的(sitting idle)。一旦商业分析员意识到,他们可以在不触及生产数据的情况下,也能对生产数据进行大规模查询,那么所谓的热备份也几乎跟生产数据一样开始忙碌并且至关重要了。我们又告诉自己,在紧急情况下把热备份暂时拿出来也还好。但这就如同说,我们完全没必要带备胎,因为我们可以从其他车上偷一个过来!
然后,Brad Fitzpatrick发布了memcached,一个可以在内存中缓存数据的守护程序(因此叫memcached, memory cached)。这是个简化版的分布式哈希表,而且确实非常实用,因而之后就在学术界流行起来。它拥有很多特性:备份(a form of replication?),水平分区,负载均衡,简单数学运算等。 我们再次告诉自己,既然大部分的负载都是读,我们为什么还要催促数据库从磁盘一遍一遍做相同的查询?你只需要一组内存很大的小规模(small-calibre,小口径)服务器,当然硬件提供商也高兴地赚我们(买内存)的钱。 也许需要你写些缓存失效(cache invalidation)代码,这听起来不难,对吧。
确如其声称,memcached的方案使我们受益很长时间。它把硬盘的随机IO操作替换为内存的随机IO操作。尽管如此,那台数据库机器还是越来越大,越来越忙。我们意识到,缓存的内存开销至少会跟工作集一样大(不然就是无效了),再加上让人不能忍的缓存持久化。我们告诉自己,这就是网络级规模(web scale?)的开销。
|