無論SaaS、IaaS還是PaaS,云計算所有層次的中心概念之一是多用戶租用。如果在一個部署中沒有共享資源,就很難把這個部署合理地稱作“云”。
甚至美國國家標準與技術局(NIST)在云計算的正式定義中也或多或少地提出了多租戶的正式定義。NIST在云計算定義中的一部分指出,重要特點:資源匯合。提供商的計算資源將匯合起來使用一種多租戶模式為多個消費者服務。不同的物理和虛擬資源將根據(jù)消費者的需求動態(tài)地分配或者重新分配。
在大多數(shù)SaaS產(chǎn)品中,多用戶租用是多種多樣的 -- 服務器、應用程序代碼、數(shù)據(jù)庫、甚至單個平板電腦?;蛘哌@個數(shù)據(jù)庫中的網(wǎng)頁可以在不同的客戶和這個系統(tǒng)的不同用戶之間共享。
在IaaS中,多租戶是通過虛擬化技術實施的:一個管理程序分配和管理在一個特定的物理計算資源上的許多完整的虛擬機。
但是,PaaS怎么樣呢?
在PaaS中對于多租戶有兩個主要方法:一個方法是依賴IaaS多租戶,業(yè)界人士把它叫作服務器PaaS。另一種方法更像是SaaS,業(yè)界人士稱之為資源PaaS。
服務器PaaS實際上是一種自動化的部署和管理系統(tǒng)。雖然有管理的服務提供商,他們能夠人工建立你的應用程序部署和在云服務器上部署環(huán)境并且甚至能夠實現(xiàn)部分自動化,但是,它不是PaaS。它只是管理的服務。
相比之下,如果開發(fā)者能夠通過一個可提供高水平操作的用戶接口直接管理這個環(huán)境(即使這個用戶接口在命令行中),那么,這實際上是一個服務。服務器PaaS的例子包括RightScale、Standing Cloud和EngineYard。
資源PaaS為一個應用提供一個抽象的“容器”,允許它與其它這種應用以精細的方式共享計算資源。它消除了“服務器”的概念以支持功能的資源。這個應用容器類似于傳統(tǒng)應用部署的程度取決于特定的服務,但是,肯定沒有“根訪問”。資源PaaS的例子包括orce.com、Google AppEngine和Heroku。
資源PaaS有許多好處。首先,應用程序升級是精細和迅速的。隨著這個應用程序收到更多的請求或者開始做更多的工作,需要的資源將立即提供(當然是在限度之內(nèi))。成本計算也是精細的,因此,你僅為你使用的計算資源付費。另一個好處與SaaS的好處相似:開發(fā)者不必考慮或者管理服務器(包括出故障的服務器)或者備份、設置、配置等等。
但是,這種精細程度和抽象是有代價的。這個代價就是失去控制。與其他用戶共享的任何事情也不能由每個用戶任意設置。如果有一個設置細節(jié)能夠被單個用戶修改,那么,專門為那個用戶運行的軟件和系統(tǒng)必須隔離開。再說一次,在這個連續(xù)統(tǒng)一體中,每一個服務都有自己的位置。例如,谷歌AppEngine使用由每一個人共享的BigTable數(shù)據(jù)庫,而Heroku允許每一個用戶建立一個單獨的NoSQL數(shù)據(jù)庫或者關系數(shù)據(jù)庫。
使用資源PaaS,還會失去對于應用程序在什么地方運行的控制。提供商控制計算資源,因此它就像一個單一故障點(盡管在較低層次上也許有冗余)。一般來說,沒有辦法以混合的方式部署你的應用程序。所謂混合方式就是某些計算資源是擁有的,某些計算資源是共享的。CloudFoundry未來的部署可能是一個例外。
因為每一個資源PaaS是一個獨特的應用環(huán)境,一般來說必須為那個特定的PaaS開發(fā)應用代碼,然后鎖定那個代碼。在極端的情況下,某些PaaS服務甚至有專有的編程語言并且不能移植到其它環(huán)境。
最后,資源PaaS有更大的安全漏洞容易遭到安全突破。這是因為有更多的共享資源,因此操作系統(tǒng)軟件中有更多的可以利用的漏洞,或者意外地把數(shù)據(jù)暴露給“鄰居”。此外,管理程序技術在廣泛地應用并且一直要經(jīng)過大量的安全審查,因此,它的數(shù)據(jù)隔離性受到了較好的考驗。另一方面,一個典型的PaaS沒有那樣廣泛地應用,因此沒有受到同樣嚴格的審查。
服務器PaaS的好處和缺點幾乎與資源PaaS的好處和缺點是一樣的。數(shù)據(jù)隔離依賴于已經(jīng)證明的和安全的管理程序技術。這個應用環(huán)境通常與更傳統(tǒng)的部署方法是一致的,并且可以為移植制作這個應用程序代碼。如果PaaS支持它,生產(chǎn)部署可以遷移、分散到多個數(shù)據(jù)中心或者提供商、或者組織成一個混合模式。這個技術堆棧的設置細節(jié)(在某些情況下甚至這個操作系統(tǒng))對于開發(fā)者來說都是可見的。
在缺點方面,服務器PaaS不能提供與資源PaaS同樣水平的伸縮性和成本精細程度。一般來說,資源的單位是一個服務器小時,增加新的資源可以是幾分鐘或者更長時間。自動伸縮這些資源不太準確,因為它依賴于資源要求(如處理器負荷)的備用措施。
一個好的服務器PaaS自動實施這個應用程序的服務器管理,不僅包括最初的部署,而且還包括這個應用程序的生產(chǎn)生命周期。做的正確,它就能夠像資源PaaS一樣容易管理,不過,它還需要逐步地熟悉。
哪一種更好?答案取決于目前的和未來的需求。如果控制、靈活性、安全性和移植性對于你來說很重要,那么,服務器PaaS有許多好處。如果部署和管理的方便性和/或者迅速和高效率低升級非常重要,資源PaaS可能取勝。業(yè)界人士的忠告是,對于你建立的新的應用來說,要最大限度減少對特定的PaaS或者PaaS類型的依賴,因為你永遠不知道事情什么時候會變化。