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