毫无疑问,云计算是目前信息产业中讨论得最多的话题。虽然大家对于云计算还没有一致定义,但是对于云计算的一些特点,相关的服务模型等内容日渐趋于统一。在讨论云计算应用架构特点之前,我们先从技术的角度来讨论一下云计算本身的一些特点。
- 按需服务
云计算是一个把信息技术作为服务(IT as a Service)提供的一种方式。这种服务的概念都是从消费方(用户)角度出发,而不是从服务提供方出发考虑问题,因此,一个基本特点是云计算要求按需服务,即用户可以根据需求即时得到服务。从这个角度讲,云计算就像我们公共服务中的自来水、电和煤气一样,集中供应并按需服务和计费。
- 资源池
云计算的一个好处是提高资源的利用率,而这个一般需要通过共享的方式来达到这个目的。这里可以类比一下我们日常吃饭中的自助餐和桌餐的差别。如果需要共享就需要先把资源集中到一个公共的资源池中。在云计算当中,根据这个资源池中资源的类别,我们把云计算的服务模型分为三种,即所谓的SPI模型,如下表所示:
资源类别 |
云计算服务模型(SPI) |
应用程序 |
Software as a Service (SaaS) |
系统平台 |
Platform as a Service (PaaS) |
基础设施 |
Infrastructure as a Service (IaaS) |
- 高可扩展性
云计算平台的资源池相对于单个用户的需求而言是比较大的,因此考虑到会有大量不同用户共用一个资源池,他们之间的资源使用模式一般存在一定的互补性,所以对于某个用户的需求而言,云计算具有很高的扩展性。另外,云计算平台在做架构设计的时候,都会考虑到如何让用户可以平滑扩展他们的资源需求,比如计算资源,存储资源等。
- 弹性服务
弹性服务指的是云计算的资源分配可以根据应用访问具体情况进行动态地调整。也正是因为如此,云计算对于非恒定需求的应用,比如需求波动很大、阶段性需求等,具有非常好的应用效果。在云计算的环境中,资源的扩展方式可以分为两大类,一种是事先可以预测的,比如一些季节性的需求。另一种是完全基于某种规则实时动态调整的。无论是哪一种,都要求云计算平台提供弹性的服务。
- 自服务和自动化
对于自服务和自动化概念本身都比较好理解,但是我把这两个放在一起是因为它们之间的内在联系。自服务是云计算中降低服务成本,提高服务便捷性的一种途径,因此它是一个服务的提供方式。但是,对于云计算服务提供方来说,自服务就要求尽量简化用户操作,降低用户使用服务的难度,提升服务响应速度,而这个只能通过后台自动化的方式才能实现。因此从这个意义上来讲,自服务是目的,而自动化则是手段。
- 服务可度量
管理学中有一句名言:没有考核,就没有管理。云计算作为服务提供的方式,需要对服务进行度量。一般服务提供方和用户之间需要有一个服务水平协议(SLA)。这样对于私有云来说,可以根据服务情况进行内部费用核算。而对于公有云来说,服务可度量就是计费的前提,然后根据实际使用量来进行计费。
云计算应用的特点
从前面的描述我们可以看到云计算给应用程序带来的一些挑战,那就是应用程序如何在云计算环境下充分利用云计算平台的一些特点来更好的满足用户需求。云计算应用要能够利用云计算环境中可动态扩展的资源,构建一个具有弹性的高可用应用程序。下面我们分别讨论一下云计算环境下的应用特点和要求。
- 自动化要求
自动化是人类的梦想,而计算机对自动化领域的发展有着巨大的影响,它极大的提高了工作和生产效率。在云计算环境下,自动化要求实际上是对计算工作本身的一个自动化改变。云计算的自动化可以赋予用户对平台基础架构的资源配置任务进行全面统筹的能力,并实现对资源的动态分配以提高管理效率、减少人为错误并加快用户对资源请求的响应速度。应用程序在设计的时候要能充分利用云计算环境的自动化特性,从而使得应用程序可以在很少或没有人工干预的情况下,自动适应需求的变化。
- 分布式计算
大部分云计算平台都是用廉价和标准的计算机硬件构成,然后通过云计算软件的方式在计算能力、可靠性等方面来达到传统的大型计算机的水准。也就是说在云计算环境下,资源池通常是通过分布式软硬件方式来实现。因此云计算应用程序的运行往往涉及到多个计算资源。无论是计算还是存储需求,应用程序一般都会涉及到多个节点,这样在设计的时候要考虑并行设计的思想或采用分布计算的方式。比如,有些云计算应用可以根据计算的要求,采用类似MapReduce的编程模型。
- 松耦合
无论是功能上还是性能上云计算对应用的灵活性提出了更高的要求。这就要求应用程序在设计的时候要考虑松耦合的架构。耦合度与灵活性一般是相反的,也即耦合度越高灵活性越低,而耦合度越低灵活性越高。因此,在做云计算应用架构设计的时候,一般要追求松耦合的设计。比如,在做Web应用设计的时候,对于用户状态的保持就需要尽量采用无状态的方式来设计,这样应用程序的水平扩展能力比较好。
- 数据存储方式
在传统的应用设计中,我们一般采用关系型数据库来存储数据。但是在云计算环境下,尤其是对于互联网应用,存在两个需要面对的问题。一是云计算环境下的数据量都比较大,传统的关系型数据库面临数据扩展能力的挑战。另一个是许多应用对于数据存储的要求更多体现在非结构化数据或者是半结构化数据的存储上面。因此,大多数云计算平台都会提供针对非结构化和半结构化的数据存储方式。这样应用程序的架构需要针对新的数据存储方式作出调整。
上面描述的一些应用特点对我们开发和设计应用程序会带来许多影响。一个是应用程序在设计的过程中不仅仅需要考虑操作系统平台或中间件级别的编程接口,还要针对其运行的云平台的接口来对应用程序进行设计。另外一个比较大的影响是有一些工作量从平台产品转移到了应用程序的开发设计人员。比如说,在采用半结构化数据存储的时候,开发设计人员需要处理数据的一致性问题。还有,在云计算平台上如果想要得到比较好的性能,开发设计人员往往还需要对数据的分区进行特别设计,或需要采用一些并行设计的算法等。