想象一下,如果可以添加一層軟件(超管理程序)來在一個(gè)物理服務(wù)器上運(yùn)行多個(gè)操作系統(tǒng)實(shí)例和相關(guān)工作負(fù)載,而不是在一個(gè)服務(wù)器上運(yùn)行一個(gè)操作系統(tǒng)實(shí)例和一個(gè)應(yīng)用程序,情況會(huì)是什么樣?這就是服務(wù)器虛擬化的理念所在。
該理念可追溯到二十世紀(jì)60年代IBM的大型主機(jī),后來又由VMware發(fā)揚(yáng)光大,后者在21世紀(jì)初為x86系列服務(wù)器引入了虛擬化軟件這個(gè)概念。自那以后,其他供應(yīng)商便開發(fā)了屬于其自己的服務(wù)器虛擬化平臺(tái),同時(shí)整個(gè)行業(yè)也創(chuàng)建了高級(jí)管理、自動(dòng)化和編排工具來使部署、移動(dòng)和管理虛擬機(jī)(VM)工作負(fù)載變得更輕松。
在服務(wù)器虛擬化出現(xiàn)之前,企業(yè)需要處理其數(shù)據(jù)中心環(huán)境中服務(wù)器消耗過多資源的問題,處理計(jì)算能力未得到充分使用的問題,處理能源費(fèi)用不斷飆升的問題,處理手動(dòng)流程的問題,以及處理總體效率低下和系統(tǒng)不靈活的問題。服務(wù)器虛擬化改變了所有這一切,并已經(jīng)得到了廣泛采用。事實(shí)上,要找到一家企業(yè)沒有在VM環(huán)境中運(yùn)行大多數(shù)工作負(fù)載,這是很困難的。但是,正如我們所知,任何技術(shù)都會(huì)被下一個(gè)大事件所取代。而在服務(wù)器虛擬化的例子中,下一個(gè)大事件就是變小。
服務(wù)器虛擬化將物理設(shè)備進(jìn)行了分割,從而讓多個(gè)操作系統(tǒng)和成熟的應(yīng)用程序都能利用底層計(jì)算能力。在下一波云計(jì)算浪潮中,開發(fā)人員將會(huì)把應(yīng)用程序切分成較小的、在輕量容器中運(yùn)行的微服務(wù),同時(shí)也會(huì)使用無服務(wù)器計(jì)算(也被稱為功能即服務(wù)(FaaS))。
兩種情形都會(huì)繞過VM,同時(shí)代碼會(huì)運(yùn)行在裸機(jī)金屬上。服務(wù)器虛擬化的好處從基本的服務(wù)器整合開始,服務(wù)器虛擬化有諸多好處。你可以在單個(gè)硬件上將多個(gè)應(yīng)用程序聯(lián)合起來,從而減少數(shù)據(jù)中心所需的服務(wù)器的總的數(shù)量。服務(wù)器越少,框架和網(wǎng)絡(luò)設(shè)備就會(huì)更少;從物理空間到空調(diào)的維修費(fèi)用,所有這些都會(huì)幫助節(jié)省事物的開支。
服務(wù)器虛擬化降低了新硬件對(duì)資本支出的需求,從而讓你不用再對(duì)這些硬件進(jìn)行更新。你可以重新部署那些突然釋放出來的服務(wù)器。還記得數(shù)據(jù)中心管理員必須手動(dòng)提供服務(wù)器的那些日子嗎?自從服務(wù)器虛擬化出現(xiàn)之后,自動(dòng)化就有了較大進(jìn)步,從而用戶就可以在幾秒時(shí)間內(nèi)把VM運(yùn)行起來,并且還能通過僅點(diǎn)擊幾下鼠標(biāo)來遷移多個(gè)工作負(fù)載,以便應(yīng)對(duì)業(yè)務(wù)變化需求。服務(wù)器虛擬化也能夠提供當(dāng)下基于web的、高連接性業(yè)務(wù)所需的高可用性、失效備援、可擴(kuò)展性、敏捷性、高性能和靈活性。服務(wù)器虛擬化是支持云計(jì)算供應(yīng)商提供其服務(wù)的底層技術(shù)。
當(dāng)客戶從云服務(wù)提供商那里購買了基礎(chǔ)設(shè)施即服務(wù)(IaaS)時(shí),他們就會(huì)購買VM,然后再添加完成任務(wù)所需的相關(guān)存儲(chǔ)、管理和安全功能。服務(wù)器虛擬化的不同類型在服務(wù)器虛擬化的世界中,物理服務(wù)器被稱為主機(jī),它運(yùn)行著一個(gè)主機(jī)操作系統(tǒng)。每個(gè)VM都是一個(gè)客戶,會(huì)運(yùn)行一個(gè)客戶操作系統(tǒng)??蛻魰?huì)彼此隔離開。有了基于超管理程序的虛擬化,超級(jí)監(jiān)督程序或虛擬機(jī)監(jiān)控器(VMM)就能處于主機(jī)OS和底層硬件層之間,向客戶操作系統(tǒng)提供必需的資源。
半虛擬化和全虛擬化能夠在客戶操作系統(tǒng)安裝進(jìn)虛擬機(jī)之前對(duì)它進(jìn)行修改。這可以提高性能,因?yàn)楸恍薷牡目蛻舨僮飨到y(tǒng)可以直接與超管理程序進(jìn)行通訊,從而減少模擬開銷。借助硬件的虛擬化還試圖減少管理程序的開銷,但是是通過硬件擴(kuò)展而不是軟件修改來實(shí)現(xiàn)的。通過使用內(nèi)核級(jí)虛擬化,而不是超管理程序,你就可以運(yùn)行一個(gè)單獨(dú)的Linux內(nèi)核版本。這能夠使在單個(gè)主機(jī)上運(yùn)行多個(gè)虛擬機(jī)變得十分容易,因?yàn)槠渲械脑O(shè)備驅(qū)動(dòng)程序可以用于主Linux內(nèi)核和虛擬機(jī)之間的通信。最后,通過系統(tǒng)級(jí)或OS虛擬化,你就可以在操作系統(tǒng)內(nèi)核的單個(gè)實(shí)例上運(yùn)行多個(gè)但邏輯上截然不同的環(huán)境。
在系統(tǒng)級(jí)虛擬化中,所有VM都必須共享相同的操作系統(tǒng)副本,而服務(wù)器虛擬化能夠允許不同的VM擁有不同的操作系統(tǒng)。虛擬機(jī)vs.容器容器化運(yùn)動(dòng)的兩個(gè)主要的促成者是Docker,這是一個(gè)廣受歡迎的用于啟動(dòng)容器的工具,還有谷歌的Kubernetes,它可以幫助管理多個(gè)容器。容器是獨(dú)立的代碼執(zhí)行環(huán)境,它們共享著主機(jī)操作系統(tǒng)的內(nèi)核。容器比VM更高效、更輕量,因?yàn)樗鼈兝@過了冗余的客戶操作系統(tǒng),削減了相關(guān)的啟動(dòng)開銷。相比VM,開發(fā)人員可以在相同的硬件上運(yùn)行多達(dá)6到8倍的容器。容器確實(shí)有它們自己的缺點(diǎn)。
作為一種相對(duì)較新的方法,他們沒有成熟技術(shù)所擁有的大量管理工具,因此需要做大量的設(shè)置和維護(hù)工作。此外,人們還擔(dān)心安全問題。有了VM,你就可以使用來賓圖像輕松地在主機(jī)之間移動(dòng)工作負(fù)載,但裸機(jī)更難以升級(jí)或移動(dòng)。使用裸金屬服務(wù)器,回滾機(jī)器狀態(tài)就會(huì)成為一項(xiàng)具有挑戰(zhàn)性的任務(wù)。虛擬機(jī)vs.無服務(wù)器計(jì)算在傳統(tǒng)的IaaS云環(huán)境中,客戶會(huì)首先提供VM、存儲(chǔ)、數(shù)據(jù)庫和相關(guān)的安全和管理工具,然后再將應(yīng)用程序上傳到VM中。而有了無服務(wù)器計(jì)算,開發(fā)人員就可以先編寫代碼,然后讓云服務(wù)提供商處理所有其他事情。開發(fā)人員永遠(yuǎn)不需要考慮服務(wù)器、操作系統(tǒng)、供應(yīng)或管理。當(dāng)然,需要有一個(gè)物理服務(wù)器來運(yùn)行代碼,但這是云服務(wù)提供商的責(zé)任。
系統(tǒng)會(huì)將代碼分解成特定的功能,而不是單一的應(yīng)用程序。當(dāng)發(fā)生觸發(fā)該功能的事件時(shí),無服務(wù)器服務(wù)——例如Amazon的Lambda——就會(huì)運(yùn)行該功能。無服務(wù)器供應(yīng)商按功能向客戶收費(fèi)。與微服務(wù)/容器場(chǎng)景一樣,無服務(wù)器計(jì)算繞過了虛擬機(jī)層和運(yùn)行在裸金屬上的功能。在這一點(diǎn)上,無服務(wù)器計(jì)算相對(duì)不成熟,使用案例有限。服務(wù)器虛擬化的未來雖然當(dāng)下容器炙手可熱,人們對(duì)無服務(wù)器計(jì)算的興趣也在不斷增長,但現(xiàn)實(shí)情況是,服務(wù)器虛擬化才是一種堅(jiān)若磐石的技術(shù),因?yàn)樗鼮榻^大多數(shù)企業(yè)應(yīng)用提供了動(dòng)力——據(jù)一些人估計(jì),虛擬機(jī)的飽和率高達(dá)90%。
將平穩(wěn)地運(yùn)行在VM上的關(guān)鍵的應(yīng)用程序移動(dòng)到容器或無服務(wù)器平臺(tái)上,這是很難進(jìn)行想象的。異構(gòu)環(huán)境的用戶可能仍然會(huì)使用VM,因?yàn)槿萜餍枰谙嗤牟僮飨到y(tǒng)上運(yùn)行,并且不能在Linux和Windows之間進(jìn)行混合。但是,對(duì)于正在使用最新的DevOps和敏捷方法構(gòu)建的新應(yīng)用程序,開發(fā)人員現(xiàn)在有了不同的選擇。展望未來,開發(fā)人員將根據(jù)是否在傳統(tǒng)的VM、容器或無服務(wù)器環(huán)境中運(yùn)行新的工作負(fù)載來進(jìn)行具體的決策。