我们知道要实现计算系统中计算部分的能力的提升,无外乎就两种办法,一是提高单台计算设备的能力,二是增加计算设备。我们知道,单台设备计算能力的提升总是有限度的,因此要实现云计算中计算能力的提升,增加设备就是唯一的选择。增加设备能够提升计算能力和一个应用能否利用这种增加的计算能力是两回事,而要能利用这种增加设备而带来的计算能力就需要应用支持分布式计算。因此,要达到云计算的计算能力随需应变的能力,有两个很基础的条件,一是计算机虚拟化,二是应用的分布式计算支持。因为在云计算下,不再具有物理的边界条件,用户所面对的计算机也仅仅是逻辑上的计算机,即虚拟计算机,这一点在IaaS和PaaS上非常重要。因为很多时候我们需要以这种虚拟的计算机来界定范围,边界和服务能力;云计算也是分布式计算的一种。
对于云应用的分布式方式有2种基本的模式:一是功能的部署分布(负载均衡就是这种典型的方式),二是功能的计算分布,这是解决问题中典型的分治策略。部署分布相对来说比较好实现,因为功能(服务)是自闭的。在实际构建这种应用时需要特别注意的是缓存的处理,可以用缓存,但主要用于查询,而不是数据操作(增加,修改,删除等),企业级应用尤其如此(对于Dotnet的页面级缓存是可以的,如果你的缓存服务是独立出来可以为不同位置部署的应用所共享的,也是可以的)。这种部署分布比较适合企业级应用系统的构建。计算分布比较复杂,一般的模型都是由调度服务器+工作服务器构成,串行计算和并行计算都会存在。数据库或者自定义的存储模型中,一般都是采用简单的并行计算,比如GreenPlum分布式数据库。当然处理更为强大的就是串行和并行交织在一起的多流水线处理模式,典型的如Mapreduce。
关于分布式计算,大家可以买本教材看看,但对于构建企业级SaaS来说,一般都是基于数据库,做个部署分布就够了(负载均衡)。对于一些服务(比如PaaS),可能会将计算分布和存储分布一并考虑,目前来看,这要么是有针对性的应用(比如Google的基于BigTable的应用),作为平台来讲,Google App Engine 我没用过,MS的Windows Azure我试过,做些小的个人应用还行,对于企业级的业务应用系统来说还是比较困难。
PS:写了很多关于云计算的东西,主要是一些自己的思考。无论是云计算也好还是原来的网格计算,集群计算等等,其实大家只要记住两条:生命是有限的,而资源也是有限的。这不仅是人类社会发展,也是整个自然界发展最具决定性的因素。人类的经济活动也不例外。只要能提高效率,降低成本(这样可以更好的满足人的欲望),那么我们现在所担心的安全风险其实都不是问题,这种能带来切实效益的计算模式--云计算就一定会发展起来。当然,这需要有一个过程,是技术的,也是心理的。