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