如今,從事在線業(yè)務(wù)的企業(yè)必須預(yù)測和管理用戶活動(dòng)難以預(yù)測的高峰。如果企業(yè)無法滿足高峰需求,則存在服務(wù)崩潰的風(fēng)險(xiǎn),這可能導(dǎo)致停機(jī),并對客戶體驗(yàn)產(chǎn)生負(fù)面影響。為避免這些影響,企業(yè)需要為IT系統(tǒng)提供嚴(yán)格的服務(wù)級別協(xié)議(SLA)。
傳統(tǒng)的IT系統(tǒng)遭遇突發(fā)負(fù)載和嚴(yán)格SLA的組合的挑戰(zhàn),因?yàn)檫@些系統(tǒng)具有有限的“彈性”。如今的系統(tǒng)架構(gòu)師必須考慮電力負(fù)載波動(dòng)對處理能力以及存儲(chǔ)容量的影響。他們必須設(shè)計(jì)可以大規(guī)模存儲(chǔ)(即大數(shù)據(jù)),大規(guī)模計(jì)算能力(即零售或游戲)以及存儲(chǔ)和計(jì)算能力(即云計(jì)算信息管理)的IT系統(tǒng)。如今,IT系統(tǒng)正在經(jīng)歷非常根本的變化,以支持突發(fā)負(fù)載。如今的系統(tǒng)建立在云平臺(tái)之上,無論是公共云還是私有云。這種變化并不僅限于硬件架構(gòu)。它深深地影響了軟件工程師開發(fā)彈性系統(tǒng)的方式。
行業(yè)服務(wù)商經(jīng)歷了類似的轉(zhuǎn)變,構(gòu)建了一個(gè)擴(kuò)展到數(shù)百萬用戶和PB級數(shù)據(jù)的服務(wù)。并意識(shí)到開發(fā)云系統(tǒng)與開發(fā)內(nèi)部部署系統(tǒng)有著根本的不同。云系統(tǒng)的多個(gè)方面需要一種全新的思維方式。以下關(guān)注本地部署和云計(jì)算的操作系統(tǒng)接口之間的區(qū)別。
操作系統(tǒng)是抽象的
通常,軟件開發(fā)人員不會(huì)直接用機(jī)器語言編程到底層硬件資源。相反,硬件和軟件開發(fā)人員使用的應(yīng)用程序編程接口(API)之間有多層次的抽象或虛擬化,可大大簡化此過程。
硬件之上的第一個(gè)虛擬化層是操作系統(tǒng)(OS)。軟件不直接訪問硬盤。文件系統(tǒng)(FAT,NTFS,EXT3等)虛擬化硬盤并將存儲(chǔ)作為文件和文件夾呈現(xiàn)。數(shù)據(jù)庫在這些文件之上添加了一個(gè)虛擬化層,以呈現(xiàn)與關(guān)系表相同的存儲(chǔ)-MySQL,Oracle和SQL Server是一個(gè)很好的例子。每個(gè)后續(xù)級別的虛擬化提供了一個(gè)API,可以被調(diào)用來訪問相關(guān)功能。例如,文件系統(tǒng)提供用于創(chuàng)建,刪除,寫入和讀取文件的API。
如上所述,硬件上的第一級虛擬化是操作系統(tǒng)。用于訪問操作系統(tǒng)的API主要基于上世紀(jì)70年代定義的UnixAPI。想想過去40年硬件是如何改變和改進(jìn)的,真是令人難以置信。想想上世紀(jì)80年代的IBM系統(tǒng)和如今的Windows機(jī)器的對比。如今,一部AppleiPhone5手機(jī)的處理能力是1985年Cray-2超級計(jì)算機(jī)的2.7倍。還記得軟盤是什么樣的嗎?然而,多年來,操作系統(tǒng)API幾乎保持不變。
CPU,內(nèi)存,存儲(chǔ)和網(wǎng)絡(luò)硬件四個(gè)方面由操作系統(tǒng)實(shí)現(xiàn)虛擬化:CPU和內(nèi)存結(jié)合一起被稱為“計(jì)算”硬件。Unix風(fēng)格的虛擬化計(jì)算視圖是進(jìn)程和線程。當(dāng)然,組織可以使用Unix風(fēng)格的API在云計(jì)算服務(wù)器上運(yùn)行程序。但是,如果要充分利用云計(jì)算提供的可擴(kuò)展性和可用性,則需要使用云原生API。
云計(jì)算操作系統(tǒng)有何不同?
以下探討一下云計(jì)算操作系統(tǒng)對進(jìn)程,線程,TCP套接字編程和文件系統(tǒng)的等介物。云計(jì)算操作系統(tǒng)用對象存儲(chǔ)替換文件系統(tǒng),實(shí)現(xiàn)無限擴(kuò)展的存儲(chǔ)容量和I/O吞吐量。對象存儲(chǔ)是云計(jì)算操作系統(tǒng)引入的第一個(gè)范例轉(zhuǎn)變,從而成為存儲(chǔ)虛擬化的常態(tài)。對象存儲(chǔ)API與Unix文件系統(tǒng)API基本不同。Unix文件系統(tǒng)API將數(shù)據(jù)作為字節(jié)流公開,而對象存儲(chǔ)API將數(shù)據(jù)作為在單個(gè)API調(diào)用中獲取的對象進(jìn)行公開。對象存儲(chǔ)的性能特征也不同于Unix文件系統(tǒng)。通常,對象存儲(chǔ)具有更高的延遲和更高的可擴(kuò)展性。也就是說,一個(gè)API調(diào)用可能需要更長時(shí)間,但可以并行發(fā)出多個(gè)API調(diào)用。由于存儲(chǔ)API的變化,軟件開發(fā)人員在構(gòu)建云系統(tǒng)時(shí)必須采用不同的想法。
在數(shù)據(jù)庫方面,關(guān)系數(shù)據(jù)庫沒有擴(kuò)展到充分利用云計(jì)算的全部潛力。云計(jì)算應(yīng)用程序是圍繞分布式的NoSQL數(shù)據(jù)庫構(gòu)建的,它們與負(fù)載進(jìn)行擴(kuò)展或縮小,并提供比傳統(tǒng)系統(tǒng)更好的容錯(cuò)能力。顧名思義,分布式NoSQL數(shù)據(jù)庫使用分布式計(jì)算和存儲(chǔ)資源。因此,這些數(shù)據(jù)庫在存儲(chǔ)量和交易速率方面提供了更高的可擴(kuò)展性。對于軟件開發(fā)人員來說,分布式數(shù)據(jù)庫提供的可擴(kuò)展性來自API的變化成本。分布式數(shù)據(jù)庫通常不支持SQL,即事實(shí)上的關(guān)系數(shù)據(jù)庫API。分布式數(shù)據(jù)庫公開API來存儲(chǔ)和檢索鍵值對。API的這種變化會(huì)顯著影響云系統(tǒng)的架構(gòu)。
隨著云系統(tǒng)的發(fā)展,SOA正在讓位于事件驅(qū)動(dòng)的無服務(wù)器編程。
第一波云計(jì)算并沒有影響到進(jìn)程和線程相關(guān)的API。雖然云系統(tǒng)傾向于采用具有面向服務(wù)的體系結(jié)構(gòu),而不是采用本地系統(tǒng)中的分層系統(tǒng)架構(gòu),面向服務(wù)架構(gòu)(SOA)更適合于云系統(tǒng),因?yàn)閱为?dú)的服務(wù)可以獨(dú)立部署,擴(kuò)展和升級。隨著云系統(tǒng)的發(fā)展,SOA正在讓位于事件驅(qū)動(dòng)的無服務(wù)器編程。無服務(wù)器編程允許組織定義要為某個(gè)事件調(diào)用的函數(shù),然后函數(shù)本身可以生成更多的事件,而這些事件又由其他函數(shù)處理。使用此型號(hào),組織不需要始終保持服務(wù)器的運(yùn)行,并且不必?fù)?dān)心在負(fù)載增加時(shí)運(yùn)行其他服務(wù)器。事件處理函數(shù)的更多事件和更多實(shí)例可以簡單地由云計(jì)算操作系統(tǒng)產(chǎn)生。無服務(wù)器編程也是從軟件程序員開發(fā)一個(gè)內(nèi)部部署系統(tǒng)的重大轉(zhuǎn)變。