摘要:京東根據(jù)自身業(yè)務(wù)需求,在公有云方面采用Openstack + KVM硬件虛擬化技術(shù)。但在PaaS層和私有云,則采用了Openstack + LXC的方式進(jìn)行實(shí)現(xiàn)。讓彼此的優(yōu)勢(shì)互補(bǔ),以達(dá)到最佳的運(yùn)行效果。
虛擬化是指在同一臺(tái)物理服務(wù)器上模擬多臺(tái)虛擬機(jī)的能力。且每臺(tái)虛擬機(jī)在邏輯上擁有獨(dú)立的CPU、內(nèi)存、硬盤和網(wǎng)絡(luò)接口等。虛擬化可以提高硬件資源的利用率,使多個(gè)應(yīng)用能隔離的運(yùn)行在同一臺(tái)物理機(jī)上。虛擬化分為硬件層面的虛擬化和軟件層面的虛擬化。
硬件虛擬化是通過(guò)模擬硬件的方式來(lái)獲得真實(shí)計(jì)算機(jī)的環(huán)境,可以運(yùn)行一個(gè)完整的操作系統(tǒng)。在硬件虛擬化中,又有Full Virtualization(全虛擬化,完整的模擬一整套真實(shí)的硬件設(shè)備)、Partial Virtualization(部分虛擬化,僅對(duì)關(guān)鍵性計(jì)算組件或者指令集進(jìn)行模擬。操作系統(tǒng)需要修改才能運(yùn)行在部分虛擬化環(huán)境中)和Paravirtualization(半虛擬化,不對(duì)硬件設(shè)備進(jìn)行模擬,虛擬機(jī)擁有獨(dú)立的運(yùn)行環(huán)境,通過(guò)虛擬機(jī)管理程序共享的硬件資源。大部分操作系統(tǒng)需要修改才能運(yùn)行在半虛擬化環(huán)境中)等不同的實(shí)現(xiàn)方式。軟件層面的虛擬化,指在同物理服務(wù)器上提供多個(gè)隔離的虛擬運(yùn)行環(huán)境,也被稱為容器技術(shù)。
在硬件虛擬化的層面,現(xiàn)代虛擬化技術(shù)通常是全虛擬和半虛擬的混合體。常見的虛擬化技術(shù)例如VMWare、Xen和KVM都同時(shí)支持全虛擬化和半虛擬化。硬件虛擬化方式提供的虛擬機(jī),都獨(dú)立的運(yùn)行著一個(gè)完整的操作系統(tǒng),這樣在同一臺(tái)物理宿主機(jī)上存在大量相同或者相似的進(jìn)程和內(nèi)存頁(yè),從而導(dǎo)致較大的性能損耗(比如:宿主機(jī)操作系統(tǒng)是Centos,使用KVM生成的多個(gè)虛擬機(jī),且在每個(gè)虛擬機(jī)中都運(yùn)行Windows操作系統(tǒng)和相同的QQ程序,這樣宿主機(jī)的性能必然產(chǎn)生較大損耗)。目前,通過(guò)KSM(kernel samepage merging)等技術(shù)可以識(shí)別與合并含有相同內(nèi)容的內(nèi)存頁(yè),但是還沒(méi)有對(duì)大量相同或者相似的進(jìn)程進(jìn)行優(yōu)化處理的有效手段,相信隨著虛擬化技術(shù)的發(fā)展,該技術(shù)也會(huì)取得巨大的進(jìn)展。因此,硬件虛擬化也被稱為重量級(jí)虛擬化,在同一宿主機(jī)上能夠同時(shí)運(yùn)行的虛擬機(jī)數(shù)量相當(dāng)有限。在軟件虛擬化的層面,同一宿主機(jī)上的所有虛擬機(jī)(又稱Container)共享宿主機(jī)的操作系統(tǒng)實(shí)例,不存在由于運(yùn)行多個(gè)操作系統(tǒng)實(shí)例所造成的性能損耗(比如:宿主機(jī)的操作系統(tǒng)為Centos,通過(guò)軟件虛擬化技術(shù)生成多個(gè)Container,且每個(gè)Container都運(yùn)行著QQ程序,由于它們共享同一個(gè)宿主機(jī)Centos操作系統(tǒng),所有Container中QQ程序的進(jìn)程在Centos中只有一個(gè))。因此,軟件虛擬化也被稱為輕量級(jí)虛擬化,在同一宿主機(jī)上能夠同時(shí)運(yùn)行的虛擬運(yùn)行環(huán)境數(shù)量比較寬松。以Solaris操作系統(tǒng)上的Container為例,一個(gè)Solaris操作系統(tǒng)的實(shí)例理論上可以支持多達(dá)8000個(gè)Container(實(shí)際能夠運(yùn)行的Container數(shù)量取決于系統(tǒng)資源和負(fù)載)。與此類似,Linux操作系統(tǒng)上的LXC也可以輕松地在同一宿主機(jī)上同時(shí)支持?jǐn)?shù)量可觀的虛擬運(yùn)行環(huán)境。
在虛擬化這個(gè)領(lǐng)域,國(guó)內(nèi)外的各大公司對(duì)硬件虛擬化的興趣較大,在研發(fā)和生產(chǎn)環(huán)境中也大都采用硬件虛擬化技術(shù)。但是近段時(shí)間國(guó)內(nèi)外很多云計(jì)算廠商紛紛開始嘗試使用LXC替代KVM/XEN等硬件虛擬化技術(shù)以獲得更好的性能。至于在實(shí)際的應(yīng)用場(chǎng)景中到底應(yīng)該選擇硬件虛擬化還是軟件虛擬化,需要從以下方面考慮。靈活性、易管理,可靠性、穩(wěn)定性、性能考慮。硬件虛擬化更靈活、易管理。軟件虛擬化則有更高性能。關(guān)于穩(wěn)定性和可靠性沒(méi)有一個(gè)確切的證據(jù)證明誰(shuí)比誰(shuí)更優(yōu)。如果最終用戶不需要獨(dú)立的操作系統(tǒng)。而只需要關(guān)心運(yùn)行環(huán)境(例如PaaS層面的各種App Engine服務(wù)),這樣軟件虛擬化也是比較好的選擇。雖然Container能提升資源利用率,但遷移成本很高,硬件虛擬化具有天生的遷移優(yōu)勢(shì),另外還包括工程師的學(xué)習(xí)成本,這些都是需要考慮在內(nèi)的因素。所以選擇上還需要根據(jù)自身的業(yè)務(wù)和公司的戰(zhàn)略去確定使用哪種虛擬化技術(shù)。
目前京東根據(jù)自身業(yè)務(wù)需求,在公有云方面采用Openstack + KVM硬件虛擬化技術(shù)。但在PaaS層和私有云,則采用了Openstack + LXC的方式進(jìn)行實(shí)現(xiàn)。讓彼此的優(yōu)勢(shì)互補(bǔ),以達(dá)到最佳的運(yùn)行效果。
一般來(lái)講虛擬化發(fā)展公認(rèn)分為5個(gè)階段。階段一,服務(wù)器整合。通過(guò)虛擬化技術(shù)完成IT基礎(chǔ)架構(gòu)、資源的整合,包括服務(wù)器整合、存儲(chǔ)整合、網(wǎng)絡(luò)整合等。以此來(lái)進(jìn)行IT基礎(chǔ)設(shè)計(jì)的簡(jiǎn)化、達(dá)到提高IT設(shè)備的利用率,降低運(yùn)維成本的目的。階段二,動(dòng)態(tài)工作負(fù)載遷移。通過(guò)虛擬化技術(shù)實(shí)現(xiàn)動(dòng)態(tài)工作負(fù)載遷移。即在業(yè)務(wù)不受到任何影響的情況下,實(shí)現(xiàn)IT資源的動(dòng)態(tài)調(diào)整和遷移,以此實(shí)現(xiàn)對(duì)局部資源的削峰填谷效應(yīng),進(jìn)一步提高IT投資的利用率。傳說(shuō)中的虛擬機(jī)Resize&Live Migrate。階段三,高可用。通過(guò)虛擬化實(shí)現(xiàn)高可用,即通過(guò)虛擬化技術(shù)提升服務(wù)質(zhì)量,增強(qiáng)為前端業(yè)務(wù)提供服務(wù)支持的能力。用戶在不增加IT投資的情況下,就可以使用虛擬機(jī)的冗余和備份。高可用分為硬件和軟件,硬件層面只能通過(guò)采購(gòu)冗余的硬件解決。比如:交換機(jī)、路由器、電力,空調(diào),消防,和其他的冗余;軟件層面需要考慮有狀態(tài)的與無(wú)狀態(tài)的區(qū)別。如:軟件服務(wù)集群、Active/Passive、Active/Active等實(shí)現(xiàn)。階段四,工作負(fù)載管理。通過(guò)虛擬化技術(shù)實(shí)現(xiàn)工作負(fù)載管理,有了前幾個(gè)階段的基礎(chǔ),用戶可以對(duì)虛擬服務(wù)器進(jìn)行統(tǒng)一的規(guī)劃和管理。例如京東每個(gè)月月末都會(huì)有促銷,那么管理員就可以有計(jì)劃地在月末為其調(diào)配更多的虛擬資源,而無(wú)需增加物理設(shè)備的購(gòu)買。這個(gè)就是傳說(shuō)中的ELB(Elastic Load Balance)+ AS(AutoScaling)。階段五,災(zāi)難恢復(fù)。通過(guò)虛擬技術(shù)來(lái)實(shí)現(xiàn)災(zāi)難恢復(fù),這同樣是建立在前幾階段之上的高級(jí)應(yīng)用,在本地或異地,通過(guò)虛擬服務(wù)器或虛擬存儲(chǔ)實(shí)現(xiàn)不同等級(jí)的災(zāi)難恢復(fù)能力,用戶可以根據(jù)自己能夠忍受的業(yè)務(wù)中斷時(shí)間來(lái)選擇相應(yīng)的方案,而這,也幾乎不用增加過(guò)多的IT物理設(shè)施投入和運(yùn)維成本。
為了快速的完成虛擬化5個(gè)階段的建設(shè),推動(dòng)虛擬化技術(shù)的發(fā)展,IT巨頭們紛紛加大對(duì)虛擬化投入。從2006年到現(xiàn)在,虛擬化技術(shù)進(jìn)入了爆發(fā)期。諸多廠商如雨后春筍般涌現(xiàn),如微軟、紅帽、思杰、IBM、Amazon、Rackspace、Google、Oracle等。在國(guó)內(nèi),京東、騰訊、華為等也都紛紛推出了各自的公有云服務(wù)。仿佛一瞬間國(guó)內(nèi)外的IT巨頭們都加入了公有云的競(jìng)爭(zhēng),將其推向了白日化。最后鹿死誰(shuí)手還需要時(shí)間的驗(yàn)證。
在了解了那么多虛擬化的概念和基礎(chǔ)知識(shí)之后,那么我們還有一個(gè)很大的疑問(wèn),為什么我們要用虛擬化,它有什么優(yōu)點(diǎn)呢?我們將從以下幾個(gè)方面進(jìn)行考慮。
基礎(chǔ)設(shè)施利用率——在沒(méi)有虛擬化技術(shù)之前,公司需要為最高峰時(shí)刻而準(zhǔn)備充足的服務(wù)器,然而平時(shí)服務(wù)器的利用率極其低下。根據(jù)IDC的報(bào)告,典型的X86服務(wù)器部署平均達(dá)到的利用率僅為總?cè)萘康?0%-15%。而且在每臺(tái)服務(wù)器上都只運(yùn)行了一個(gè)應(yīng)用程序,以免出現(xiàn)一個(gè)應(yīng)用程序中的漏洞影響同一服務(wù)器上其他應(yīng)用程序的可用性風(fēng)險(xiǎn)。拿京東舉例:京東的店慶日是618(6月18日)也是一年中銷售的最高峰。京東在每年618之前都會(huì)預(yù)估這一天的訪問(wèn)量、銷量來(lái)評(píng)估需要采購(gòu)多少服務(wù)器。但是這一天過(guò)后,另外364天的平均機(jī)器利用率只有10%左右。物理基礎(chǔ)設(shè)施成本——為了支持不斷增長(zhǎng)的業(yè)務(wù)。物理基礎(chǔ)設(shè)施和運(yùn)營(yíng)成本都在穩(wěn)步的攀升。大多數(shù)的計(jì)算基礎(chǔ)設(shè)施都必須時(shí)刻保持運(yùn)行狀態(tài),因此耗電量,制冷設(shè)備成本都不會(huì)隨利用率的水平而變化,提升利用率成本不會(huì)提升。IT管理成本——隨著計(jì)算環(huán)境日益復(fù)雜,運(yùn)維人員所需的專業(yè)教育和經(jīng)驗(yàn)要求都在不斷提高。而且此類人員的相關(guān)薪資成本也隨之增加。如果還在使用手動(dòng)的維護(hù)方式,將花費(fèi)過(guò)多的時(shí)間和資源。災(zāi)備——物理機(jī)的災(zāi)備極其復(fù)雜,且恢復(fù)時(shí)間較長(zhǎng)。需要給物理機(jī)安裝操作系統(tǒng),相關(guān)軟件,并恢復(fù)相應(yīng)的App。整個(gè)過(guò)程至少需要20-30分鐘。
為了解決上述問(wèn)題,虛擬化問(wèn)題孕育而生了??偠灾摂M化降低了用戶的各種成本,且穩(wěn)定,高效,靈活、可靠。