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

2010-03-30 16:17

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 目前都没有实现,所以云计算平台,对于第三方开发人员来说,暂时不是计算平台,而是存储平台。

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

移动互联网的围观者、起哄者、以及肇事者。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容