无论SaaS、IaaS还是PaaS,云计算所有层次的中心概念之一是多用户租用。如果在一个部署中没有共享资源,就很难把这个部署合理地称作“云”。
甚至美国国家标准与技术局(NIST)在云计算的正式定义中也或多或少地提出了多租户的正式定义。NIST在云计算定义中的一部分指出,重要特点:资源汇合。提供商的计算资源将汇合起来使用一种多租户模式为多个消费者服务。不同的物理和虚拟资源将根据消费者的需求动态地分配或者重新分配。
在大多数SaaS产品中,多用户租用是多种多样的 -- 服务器、应用程序代码、数据库、甚至单个平板电脑。或者这个数据库中的网页可以在不同的客户和这个系统的不同用户之间共享。
在IaaS中,多租户是通过虚拟化技术实施的:一个管理程序分配和管理在一个特定的物理计算资源上的许多完整的虚拟机。
但是,PaaS怎么样呢?
在PaaS中对于多租户有两个主要方法:一个方法是依赖IaaS多租户,业界人士把它叫作服务器PaaS。另一种方法更像是SaaS,业界人士称之为资源PaaS。
服务器PaaS实际上是一种自动化的部署和管理系统。虽然有管理的服务提供商,他们能够人工建立你的应用程序部署和在云服务器上部署环境并且甚至能够实现部分自动化,但是,它不是PaaS。它只是管理的服务。
相比之下,如果开发者能够通过一个可提供高水平操作的用户接口直接管理这个环境(即使这个用户接口在命令行中),那么,这实际上是一个服务。服务器PaaS的例子包括RightScale、Standing Cloud和EngineYard。
资源PaaS为一个应用提供一个抽象的“容器”,允许它与其它这种应用以精细的方式共享计算资源。它消除了“服务器”的概念以支持功能的资源。这个应用容器类似于传统应用部署的程度取决于特定的服务,但是,肯定没有“根访问”。资源PaaS的例子包括orce.com、Google AppEngine和Heroku。
资源PaaS有许多好处。首先,应用程序升级是精细和迅速的。随着这个应用程序收到更多的请求或者开始做更多的工作,需要的资源将立即提供(当然是在限度之内)。成本计算也是精细的,因此,你仅为你使用的计算资源付费。另一个好处与SaaS的好处相似:开发者不必考虑或者管理服务器(包括出故障的服务器)或者备份、设置、配置等等。
但是,这种精细程度和抽象是有代价的。这个代价就是失去控制。与其他用户共享的任何事情也不能由每个用户任意设置。如果有一个设置细节能够被单个用户修改,那么,专门为那个用户运行的软件和系统必须隔离开。再说一次,在这个连续统一体中,每一个服务都有自己的位置。例如,谷歌AppEngine使用由每一个人共享的BigTable数据库,而Heroku允许每一个用户建立一个单独的NoSQL数据库或者关系数据库。
使用资源PaaS,还会失去对于应用程序在什么地方运行的控制。提供商控制计算资源,因此它就像一个单一故障点(尽管在较低层次上也许有冗余)。一般来说,没有办法以混合的方式部署你的应用程序。所谓混合方式就是某些计算资源是拥有的,某些计算资源是共享的。CloudFoundry未来的部署可能是一个例外。
因为每一个资源PaaS是一个独特的应用环境,一般来说必须为那个特定的PaaS开发应用代码,然后锁定那个代码。在极端的情况下,某些PaaS服务甚至有专有的编程语言并且不能移植到其它环境。
最后,资源PaaS有更大的安全漏洞容易遭到安全突破。这是因为有更多的共享资源,因此操作系统软件中有更多的可以利用的漏洞,或者意外地把数据暴露给“邻居”。此外,管理程序技术在广泛地应用并且一直要经过大量的安全审查,因此,它的数据隔离性受到了较好的考验。另一方面,一个典型的PaaS没有那样广泛地应用,因此没有受到同样严格的审查。
服务器PaaS的好处和缺点几乎与资源PaaS的好处和缺点是一样的。数据隔离依赖于已经证明的和安全的管理程序技术。这个应用环境通常与更传统的部署方法是一致的,并且可以为移植制作这个应用程序代码。如果PaaS支持它,生产部署可以迁移、分散到多个数据中心或者提供商、或者组织成一个混合模式。这个技术堆栈的设置细节(在某些情况下甚至这个操作系统)对于开发者来说都是可见的。
在缺点方面,服务器PaaS不能提供与资源PaaS同样水平的伸缩性和成本精细程度。一般来说,资源的单位是一个服务器小时,增加新的资源可以是几分钟或者更长时间。自动伸缩这些资源不太准确,因为它依赖于资源要求(如处理器负荷)的备用措施。
一个好的服务器PaaS自动实施这个应用程序的服务器管理,不仅包括最初的部署,而且还包括这个应用程序的生产生命周期。做的正确,它就能够像资源PaaS一样容易管理,不过,它还需要逐步地熟悉。
哪一种更好?答案取决于目前的和未来的需求。如果控制、灵活性、安全性和移植性对于你来说很重要,那么,服务器PaaS有许多好处。如果部署和管理的方便性和/或者迅速和高效率低升级非常重要,资源PaaS可能取胜。业界人士的忠告是,对于你建立的新的应用来说,要最大限度减少对特定的PaaS或者PaaS类型的依赖,因为你永远不知道事情什么时候会变化。