云端應(yīng)用 IaaS與PaaS服務(wù)對開發(fā)的好處
將應(yīng)用程序遷移至云計算平臺上運行,除了流行之外,本質(zhì)上還是有具體的好處。
當(dāng)你打算在云端計算平臺上開發(fā)自有的應(yīng)用程序時,有兩種選擇。第一種是選擇在所謂的IaaS(Infrastructure as a Service)層次上,而第二種則是在PaaS(Platform as a Service)之上。
在這二者之上建構(gòu)云端應(yīng)用程序,究竟存在什么樣的分別呢?
在IaaS上開發(fā):開發(fā)者可量身打造所需環(huán)境及架構(gòu)
所謂的IaaS平臺,像是Amazon AWS(Amazon Web Service)中的EC2(Elastic Compute Cloud),提供的是運行在云端之上的計算基礎(chǔ)設(shè)施。這些就和你自己能夠建設(shè)的計算基礎(chǔ)設(shè)施沒有太大的分別,包括了:能夠執(zhí)行應(yīng)用程序的服務(wù)器及操作系統(tǒng)、網(wǎng)絡(luò)環(huán)境、磁盤存儲空間、還有可能會需要的軟件系統(tǒng)動態(tài),例如HTTP服務(wù)器、數(shù)據(jù)庫服務(wù)器。
但是最大的差別是,這些計算基礎(chǔ)設(shè)施現(xiàn)在都不在你的機房里,而是在“云”之上,你只要刷卡付費,隨時都能夠從“云”上取得這些計算資源,進而將你的應(yīng)用程序部署上去。
對于基于IaaS的應(yīng)用程序而言,開發(fā)本身并沒有什么太大的不同,使用和之前一樣的程序語言、程序庫,也用同樣的模式開發(fā)應(yīng)用程序。“云”所帶來的好處是,計算資源云端化了,由負責(zé)管理“遠在天邊那片云”的供應(yīng)商幫你處理掉種種的細節(jié),為你帶來種種的便利。
基于IaaS來發(fā)展應(yīng)用程序的優(yōu)點是,應(yīng)用程序開發(fā)者有很大的彈性,因為在云端上僅提供最基礎(chǔ)的計算資源及環(huán)境,開發(fā)者可以自己針對應(yīng)用程序的需求,完全量身打造出所需的環(huán)境及架構(gòu)。
但是,這是一體的兩面。當(dāng)開發(fā)者可以很有彈性的依據(jù)需求,建立自己所需的系統(tǒng)架構(gòu),也意謂著,開發(fā)者必須自己花費力氣去處理和系統(tǒng)架構(gòu)相關(guān)的各種議題。
其中最重要的,莫過于開發(fā)者要自己處理和系統(tǒng)規(guī)模擴充性有關(guān)的各種問題,像是允許系統(tǒng)在需要提升服務(wù)的規(guī)模時,通過增加相關(guān)的計算資源(例如服務(wù)器、內(nèi)存空間、存儲空間),便可以達到所需的規(guī)模。也需要處理各種計算資源的負載均衡以及容錯問題。
而和系統(tǒng)規(guī)模擴充性相關(guān)的議題,可以說是在建立系統(tǒng)架構(gòu)時不大容易處理的一個環(huán)節(jié)。雖然說,在IaaS上開發(fā)可以得到最多的彈性,但同時間,開發(fā)者需要自行負責(zé)的部分也更多,而且,需要更好的技巧。
在PaaS上開發(fā):獲得更高端的執(zhí)行環(huán)境,不需處理基礎(chǔ)設(shè)施相關(guān)的細節(jié)
而在PaaS層次上開發(fā)應(yīng)用程序,和在IaaS層次上開發(fā)則有著相當(dāng)大的不同。在PaaS上,相較于IaaS所提供的原始設(shè)施,它所提供的運行環(huán)境,則高端許多。在PaaS這個層次上,主要的目的是要提供一個更高端的執(zhí)行環(huán)境,將諸多和基礎(chǔ)設(shè)施相關(guān)的細節(jié)予以封裝起來。因此,開發(fā)者不需要面對如何處理服務(wù)器應(yīng)如何擴展才能達到應(yīng)有的服務(wù)規(guī)模,也不需要考量如何在眾多的服務(wù)器之間處理負載平衡、容錯的技術(shù)議題。
開發(fā)者所面對的,就是一個被高度抽象化的執(zhí)行環(huán)境,PaaS平臺可能提供若干組滿足不同用途的API、各種開發(fā)工具、甚至整合開發(fā)環(huán)境,讓開發(fā)者能據(jù)以開發(fā)應(yīng)用程序,但是,開發(fā)者無法、也無需碰觸到各種系統(tǒng)運行的細節(jié)。
PaaS平臺的提供者,通常都對于建構(gòu)超大型系統(tǒng)架構(gòu)有著豐富又純熟的經(jīng)驗。他們歸納出在大型系統(tǒng)架構(gòu)上處理系統(tǒng)規(guī)模擴展性的經(jīng)驗,進而打造出PaaS層次的云計算平臺。其中最典型的例子,當(dāng)然,莫過于Google了。
Google目前主推的PaaS云端平臺名為GAE(Google App Engine)。Google強調(diào),當(dāng)你將應(yīng)用程序部署至GAE之上運行時,就和Google自有的所有應(yīng)用程序執(zhí)行在一樣的基礎(chǔ)設(shè)施之上。
可以想像的是,原先Google打造這個被人稱為“Google Infrastructure”的平臺,單純只是滿足自身應(yīng)用程序所需的超大型全球性系統(tǒng)規(guī)模。但是,他們也注意到,云計算做為如同傳統(tǒng)電力設(shè)施一般銷售的可能性及潛力,于是才以原本僅供自用的計算設(shè)施為基礎(chǔ),打造出適合應(yīng)用程序開發(fā)的平臺,成了在PaaS層次上的云服務(wù)。
若是沒有PaaS,可以問問自己,如果想要擴展系統(tǒng)規(guī)模,你可能會考慮投入額外的計算資源,例如,增加主機、增加主內(nèi)存、增加存儲空間、增加網(wǎng)絡(luò)帶寬,但是,如果你的系統(tǒng)架構(gòu)設(shè)計無法通過增加這些計算資源,來擴充系統(tǒng)規(guī)模,或者是,透過增加這些計算資源可以擴充系統(tǒng)規(guī)模,卻有其極限時,那么你可能就必須設(shè)計、建立系統(tǒng)架構(gòu)。
舉例來說,我們很常見到的Web應(yīng)用系統(tǒng)架構(gòu),就是前端有一個HTTP的分包器(例如Apache的httpd),承接來自于使用者端的HTTP協(xié)定連線請求,接著將這些連線請求平均地分派到中間層的Web應(yīng)用程序服務(wù)器,而應(yīng)用程序便執(zhí)行于Web應(yīng)用程序服務(wù)器之上。應(yīng)用程序難免需要操作數(shù)據(jù),而典型的架構(gòu)下,數(shù)據(jù)都存儲在后端的數(shù)據(jù)庫服務(wù)器上。基于容錯或負載平衡的需要,在架構(gòu)中可能允許一個以上的數(shù)據(jù)庫服務(wù)器,彼此之間形成一個群集。
當(dāng)系統(tǒng)的規(guī)模不足以應(yīng)付來自于使用者端的連線請求時,通常擴充系統(tǒng)規(guī)模的方式,便是增加中間層的Web應(yīng)用程序服務(wù)器數(shù)量。因為一開始,可能是系統(tǒng)缺乏足夠的CPU資源或主內(nèi)存資源,于是,通過增加中間層的Web應(yīng)用程序服務(wù)器數(shù)量,便可以得到足夠的CPU資源或主內(nèi)存資源。
好的均衡器能承受足夠高的請求流量,能平均地將流量導(dǎo)到中間層的各個Web應(yīng)用程序服務(wù)器,并且自動偵測出發(fā)生異常無法再運作的Web應(yīng)用程序服務(wù)器,進而不再將請求流量導(dǎo)到發(fā)生異常的Web應(yīng)用程序服務(wù)器。
通過擴展應(yīng)用程序服務(wù)器數(shù)量,只能解決一部份存取問題
這樣看起來很理想,不過有一些問題無法解決。除了容錯的機制可能不盡理想之外,這樣子的架構(gòu),也很難無止盡地通過增加中間層的應(yīng)用程序服務(wù)器,來擴展服務(wù)規(guī)模。為什么呢?
在這種架構(gòu)下,一開始的確可以透過增加中間層的應(yīng)用程序服務(wù)器來擴展服務(wù)規(guī)模,那是因為,一開始的系統(tǒng)能效瓶頸,是在服務(wù)器的CPU計算能力或主內(nèi)存量。但是,當(dāng)持續(xù)增加中間層應(yīng)用程序服務(wù)器來提升規(guī)模之后,慢慢地,系統(tǒng)能效瓶頸便會開始移轉(zhuǎn)。通常,能效瓶頸會移轉(zhuǎn)到數(shù)據(jù)存取上。因為數(shù)據(jù)庫在系統(tǒng)架構(gòu)中通常是一個集中化的資源,即使系統(tǒng)中可能有多個數(shù)據(jù)庫服務(wù)器,但是它們在本質(zhì)上仍然是集中式。當(dāng)同時間要處理的數(shù)據(jù)存取請求夠多時,集中式的數(shù)據(jù)庫服務(wù)器就會變成能效瓶頸,接著就會需要在數(shù)據(jù)存取的架構(gòu)上進行各種調(diào)整,以便提升能效。這是典型Web應(yīng)用程序在擴展系統(tǒng)規(guī)模時,我們時常可以看到的情境。