Iaas、Caas、Paas、Faas,選擇正確的平臺(tái)!
無(wú)論您是購(gòu)買、從零開始搭建還是采用開源技術(shù),您可能已經(jīng)在使用某種軟件平臺(tái)來(lái)構(gòu)建,部署和擴(kuò)展應(yīng)用程序。
一個(gè)平臺(tái)的誕生必定是經(jīng)年錘煉而來(lái),即從應(yīng)用程序中提取通用的功能到更底層的抽象中。如果完成了既定的設(shè)計(jì)意圖,那么您將得到一個(gè)可用的平臺(tái),反之,您將得到一個(gè)“燙手山芋”,既而您將再次尋找合適的平臺(tái),這時(shí)候您會(huì)發(fā)現(xiàn)別人已經(jīng)構(gòu)建好的平臺(tái)給您帶來(lái)了一線希望的曙光。
正確的平臺(tái),您將在靈活性和簡(jiǎn)單性之間達(dá)到您所需要的平衡,從而使您能夠更快速地構(gòu)建而不受太多限制。本文將探討云平臺(tái)的范圍,以幫助您找到最適合您的那一款。
對(duì)于什么樣的平臺(tái)才是完美的,每個(gè)人有每個(gè)人的看法,因?yàn)槊總€(gè)人的使用場(chǎng)景有所不同。但是幾乎所有人都尋求以下兩個(gè)特征:
提高開發(fā)速度
自動(dòng)化運(yùn)維
這兩個(gè)要求推動(dòng)了大多數(shù)軟件平臺(tái)的進(jìn)化。真的,這兩項(xiàng)可以作為自動(dòng)化檢驗(yàn)標(biāo)準(zhǔn):速度和可重復(fù)性。
所以,沒有一個(gè)平臺(tái)對(duì)于任何用戶來(lái)說是完美的,那么是否意味著我們要自己寫呢?如果自己寫,是否建立在一個(gè)現(xiàn)有的平臺(tái)之上?您想要一個(gè)從上到下的緊密集成的平臺(tái),還是想要使用強(qiáng)大的擴(kuò)展點(diǎn)松散連接的多層平臺(tái)?
這些都是一時(shí)間難以回答的問題,并沒有一個(gè)真正適合每個(gè)人的單一答案。尋找合適平臺(tái)的成就感是發(fā)現(xiàn),比較和權(quán)衡之一。所以我們一起來(lái)吧!
? ??平臺(tái)之美
云平臺(tái)的“彩虹”,總有您喜歡的色彩。
每個(gè)廠商都會(huì)告訴你,他們的軟件是特別的,甚至是獨(dú)一無(wú)二的。他們都在努力使自己的產(chǎn)品與眾不同,以提供不可替代的價(jià)值。但是,如果您仔細(xì)觀察,并容忍一些粗糙的地方,您可以根據(jù)它們提供的接口類型對(duì)這些產(chǎn)品進(jìn)行分組。???
云平臺(tái)的示例
?? ?軟件平臺(tái)
“軟件即服務(wù)”一詞最早可追溯到2000年左右,指的是將打包的軟件產(chǎn)品和支持服務(wù)捆綁在托管解決方案中,以避免經(jīng)常未知的執(zhí)行和操作成本。一個(gè)SaaS產(chǎn)品本身就是一個(gè)基礎(chǔ)平臺(tái)。SaaS的一些原始用途取代了傳統(tǒng)企業(yè)資源計(jì)劃(ERP)和客戶關(guān)系管理(CRM)平臺(tái)。
像Salesforce和SAP這樣的公司,對(duì)于那些沒有大型工程師團(tuán)隊(duì)或IT部門來(lái)構(gòu)建和管理這些復(fù)雜的系統(tǒng)客戶,他們會(huì)在這些領(lǐng)域非常成功。即使是擁有這些資源的公司也可能認(rèn)為這些事情不在其核心競(jìng)爭(zhēng)力范圍之內(nèi),不值得自己去建設(shè)或經(jīng)營(yíng)。如今幾乎所有類別的軟件都可以通過SaaS獲得,從電子郵件到文字處理系統(tǒng),再到內(nèi)容管理系統(tǒng)比比皆是。
Spectrum的另一方面是基礎(chǔ)設(shè)施即服務(wù)。
將應(yīng)用程序配置到基礎(chǔ)架構(gòu)平臺(tái)上
?? ?基礎(chǔ)設(shè)施平臺(tái)
基礎(chǔ)設(shè)施平臺(tái)在SaaS之后不久就出現(xiàn)了。VMware GSX Server(2006)和亞馬遜彈性計(jì)算云(EC2,2006)提供了早期的虛擬化平臺(tái)。然而,VMWare最初專注在企業(yè)內(nèi)部部署,亞馬遜web服務(wù)則將其托管的IaaS和SaaS產(chǎn)品結(jié)合,定位于更廣闊的市場(chǎng)。后來(lái),Rackspace和美國(guó)航天局開發(fā)了OpenStack(2010)作為VMware vSphere(2009年發(fā)布,取代GSX)和亞馬遜EC2的開源競(jìng)爭(zhēng)對(duì)手。
這些IaaS主要提供了一些具體的抽象:虛擬機(jī)計(jì)算節(jié)點(diǎn),軟件定義的網(wǎng)絡(luò)和可掛載的存儲(chǔ)。在有SaaS的情況下,托管的IaaS的主要賣點(diǎn)是外部資源容量配置操作的自動(dòng)化,但與SaaS不同,托管的IaaS會(huì)給用戶帶來(lái)資源規(guī)模無(wú)限大的錯(cuò)覺。對(duì)于大多數(shù)對(duì)基礎(chǔ)設(shè)施外包感興趣的公司來(lái)說,AWS會(huì)提供比客戶以往任何時(shí)候資源需求量大得多的資源,在您向AWS尋求更多節(jié)點(diǎn)之前,已經(jīng)擴(kuò)展了數(shù)據(jù)中心。對(duì)于無(wú)法或者不愿意外包的公司,像OpenStack和vSphere這樣的基礎(chǔ)設(shè)施平臺(tái)可以在您選擇的數(shù)據(jù)中心中托管自己的云。
然而,管理不僅僅只是涉及硬件,還包括管理一個(gè)基礎(chǔ)設(shè)施平臺(tái),并且這需要更多的工作,這是企業(yè)公司已經(jīng)在自己的平臺(tái)上做過的。無(wú)論是手動(dòng)管理沒有虛擬化層的硬件,還是渴望使配置更加自主化。因此,as-a-service模型又回到了起點(diǎn):承載的平臺(tái)變成了打包產(chǎn)品,這次添加了多租戶功能,允許客戶為自己的內(nèi)部用戶組操作它。
隨之而來(lái)的應(yīng)用平臺(tái)。
基礎(chǔ)架構(gòu)平臺(tái)上的應(yīng)用平臺(tái)
?? ?應(yīng)用平臺(tái)
Fotango的Zimki(2006)和Heroku(2007)率先使用平臺(tái)即服務(wù)。后來(lái)的Google App Engine(2008),CloudFoundry(2011)和其他幾個(gè)加入了戰(zhàn)斗。在當(dāng)時(shí),很明顯,這些是真正的應(yīng)用平臺(tái)(aPaaS),專門用于加快開發(fā)人員的速度并降低運(yùn)營(yíng)開銷。使得開發(fā)人員自己配置和管理他們開發(fā)的應(yīng)用,進(jìn)一步壓縮了從開始到發(fā)布到反饋到迭代的周轉(zhuǎn)時(shí)間,與日益普及的敏捷軟件開發(fā)思想相契合,并為剛剛起步的DevOps運(yùn)動(dòng)播下種子。
但進(jìn)步永遠(yuǎn)不會(huì)停止。容器平臺(tái)出現(xiàn)了。
基礎(chǔ)架構(gòu)平臺(tái)上的容器平臺(tái)
?? ?容器平臺(tái)
容器化已經(jīng)比您想象得要深入(FreeBSD Jails自2000年以來(lái)一直在使用),但是可以肯定的是直到Docker(2013)將Linux操作系統(tǒng)級(jí)虛擬化與文件系統(tǒng)鏡像結(jié)合起來(lái),容器化才真正廣泛流行起來(lái)。這使得構(gòu)建和部署容器化應(yīng)用更加容易,這是一種可以理解為通過構(gòu)建磁盤鏡像來(lái)加快基礎(chǔ)設(shè)施平臺(tái)配置的IaaS用戶模式。但與VM相比,同時(shí)運(yùn)行的幾臺(tái)驅(qū)動(dòng)器足以讓您的工作站超負(fù)荷運(yùn)行,容器則允許您在本地部署完整的微服務(wù)堆棧,大大加快了開發(fā)周期。另外,由于降低了開銷,每個(gè)微服務(wù)器都可以擁有自己的容器映像,自己的發(fā)布周期和自己的滾動(dòng)升級(jí),允許更小的團(tuán)隊(duì)并行開發(fā)它們。
從容器運(yùn)行時(shí)到容器平臺(tái),這是一個(gè)明顯的進(jìn)步。像CloudFoundry這樣的應(yīng)用平臺(tái)和像Apache Mesos這樣的集群資源管理系統(tǒng)自成立以來(lái)就一直使用容器隔離。下一步是開放一個(gè)平臺(tái)API,允許開發(fā)人員在一組機(jī)器上部署越來(lái)越受歡迎的Docker鏡像。像基礎(chǔ)設(shè)施平臺(tái)一樣,容器平臺(tái)也是在內(nèi)部開始的,后來(lái)提供托管服務(wù)。Mesosphere的Marathon(2013)是通用容器編排的首個(gè)開源平臺(tái)之一,但它早期是由內(nèi)部努力推動(dòng)的,比如Google的Borg(?2004)和Twitter的Aurora(2010年寫成,在2013年開放為Apache Aurora)。
容器編排是容器平臺(tái)的核心。與應(yīng)用平臺(tái)一樣,容器平臺(tái)需要提供基于約束的聲明性調(diào)度。與應(yīng)用平臺(tái)不同的是,容器不限于十二要素應(yīng)用程序。比如,有狀態(tài)服務(wù)需要的持久卷,隔離保證機(jī)制,特定域的遷移過程及并行的備份作業(yè)等等。由于這種靈活性,容器平臺(tái)可以輕松地變得比應(yīng)用程序平臺(tái)更復(fù)雜,以支持更多種類的工作負(fù)載。
計(jì)算機(jī)集群上的容器平臺(tái)
為了增加靈活性,并且在不遷移的情況下支持傳統(tǒng)工作負(fù)載,許多人在基礎(chǔ)設(shè)施平臺(tái)之上運(yùn)行容器平臺(tái),但這并不是絕對(duì)必要的。容器與單個(gè)機(jī)器已經(jīng)十分接近,幾乎所有的工作負(fù)載都是兼容的。所以并不是每個(gè)人都需要這種靈活性。許多開發(fā)人員將他們所有的時(shí)間都花在單層的堆棧中。他們尋找避免重復(fù)執(zhí)行任務(wù)的辦法,例如為他們構(gòu)建的每個(gè)新應(yīng)用程序手工制作容器鏡像。對(duì)于這些人來(lái)說,功能平臺(tái)(也稱為無(wú)服務(wù)器)就出現(xiàn)了。
?? ?功能平臺(tái)
亞馬遜推出了AWS Lambda(2014),引領(lǐng)了無(wú)服務(wù)的“熱潮”,在其虛擬基礎(chǔ)設(shè)施平臺(tái)之上提供輕量級(jí)的容器化事件處理。像其他Amazon Web Services一樣,Lambda僅僅只是一種托管服務(wù)。因此,由Iron.io(2014),Apache OpenWhisk(2016),F(xiàn)ission(2016),Galactic Fog的Gestalt(2016),OpenLambda(2016)填補(bǔ)了私有化部署替代品的市場(chǎng)。
除了他們各自基于特定語(yǔ)言的框架之外,功能平臺(tái)的運(yùn)行方式與應(yīng)用平臺(tái)相同。因此,開發(fā)人員只需要開發(fā)事件處理程序,并使用平臺(tái)API將觸發(fā)器映射到該處理程序即可,而不是使用多個(gè)端點(diǎn)編寫應(yīng)用程序。功能平臺(tái)通常與API網(wǎng)關(guān)配合或集成,以處理代理,負(fù)載均衡和集中式服務(wù)發(fā)現(xiàn)。與應(yīng)用平臺(tái)不同,功能平臺(tái)透明地集成了基于負(fù)載的自動(dòng)縮放,因?yàn)樗鼈兛刂扑腥肟邳c(diǎn)和復(fù)用。
像容器平臺(tái)一樣,功能平臺(tái)不一定需要基礎(chǔ)架構(gòu)平臺(tái),但與容器平臺(tái)提供的靈活性不同,功能平臺(tái)不是設(shè)計(jì)用于支持各種各樣的工作負(fù)載。所以僅僅只運(yùn)行一個(gè)功能平臺(tái)可能是不明智的或不可能的。您可能還需要一個(gè)較低級(jí)別的容器或基礎(chǔ)架構(gòu)平臺(tái)。一些功能平臺(tái)甚至被設(shè)計(jì)成與容器平臺(tái)集成,利用中間層自動(dòng)化來(lái)降低較高層的復(fù)雜性。
云平臺(tái),它們的接口和抽象規(guī)模
?? ?平臺(tái)抽象
這些平臺(tái)中的每一層都提供了自己獨(dú)特的抽象和API,某些層比其他層更抽象。一些更高層級(jí)的平臺(tái)要么全部采用,要么就全不用。它們具有頂部到底部的集成,但只能支持您要運(yùn)行的一小部分工作負(fù)載。您可能會(huì)嘗試選擇最高層的抽象化來(lái)最大限度地提高開發(fā)人員的速度,但是您也必須考慮到這些平臺(tái)上構(gòu)建的軟件將與平臺(tái)最緊密耦合,當(dāng)您需要重新選擇平臺(tái)的時(shí)候, 這將增加您的風(fēng)險(xiǎn)。另一方面,較低級(jí)別的平臺(tái)可以提供最大的靈活性,可以實(shí)現(xiàn)最廣泛的工作負(fù)載,包括Web應(yīng)用程序,微服務(wù)器,整體架構(gòu)應(yīng)用,數(shù)據(jù)管道和數(shù)據(jù)存儲(chǔ)服務(wù)。它們使得遷移更輕松和基礎(chǔ)設(shè)施操作更容易,但是在上面實(shí)際開發(fā)或運(yùn)維應(yīng)用程序,服務(wù)或作業(yè)卻更難。
應(yīng)用平臺(tái)和基礎(chǔ)設(shè)施平臺(tái)之間的沖突是容器平臺(tái)受歡迎的重要原因之一。容器平臺(tái)在這兩方面作出了妥協(xié)。它們?cè)试S您根據(jù)每個(gè)容器來(lái)決定您的工作負(fù)載是否需要自己的環(huán)境,或者可以作為二進(jìn)制運(yùn)行,支持更多種類的工作負(fù)載。但它們還像應(yīng)用程序平臺(tái)一樣提供聲明式配置,生命周期管理,復(fù)制和調(diào)度。如果您還需要更高層次的抽象,您可以輕松地在容器平臺(tái)之上部署更輕量級(jí)的應(yīng)用程序或功能平臺(tái),共享具有較低級(jí)別工作負(fù)載的資源和機(jī)器。如果您還需要較低級(jí)別的抽象,您可以輕松地在基礎(chǔ)設(shè)施平臺(tái)之上部署容器平臺(tái),而不是直接使用裸機(jī)。
DC / OS架構(gòu)層
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!