現(xiàn)在,無論是傳統(tǒng) IT 還是互聯(lián)網(wǎng)行業(yè),云平臺似乎越來越受到關(guān)注和認(rèn)可。在通常的 IAAS 平臺中,虛擬化技術(shù)和相應(yīng)的平臺管理工具(API)是主要技術(shù)點(diǎn),而虛擬化實(shí)現(xiàn)實(shí)際上決定這個云平臺的擴(kuò)展和利用能力,幾乎決定了 IAAS 平臺的能力和競爭力。
虛擬化是一個既熟悉又復(fù)雜的詞匯,在很大一部分場所指的是利用物理機(jī)的資源(計(jì)算,存儲,網(wǎng)絡(luò))為眾多虛擬機(jī)提供相應(yīng)的隔離資源,比如成熟的單機(jī)虛擬化工具 KVM 和 Xen。而實(shí)際上虛擬化有時候會泛指資源的池化,如一個集群的所有資源都是可以調(diào)度利用并提供能力的,特別是指存儲資源的虛擬化,往往傾向于一個集群機(jī)器的存儲資源的整合利用。
在談到單機(jī)虛擬化與集群虛擬化的時候,計(jì)算資源虛擬化往往比存儲虛擬化更容易理解,我們在談及存儲虛擬化的時候可以以前者為例。
大家都已經(jīng)習(xí)慣單機(jī)虛擬化的使用,如使用 VirtualBox 可以隨意創(chuàng)建出虛擬機(jī),虛擬快設(shè)備和虛擬網(wǎng)絡(luò)。而為了彌補(bǔ)性能問題,硬件提供了相應(yīng)的虛擬化指令幫助更好的切換 Host/VM 運(yùn)行態(tài)和更快的內(nèi)存訪問。這種虛擬化滿足用戶應(yīng)用多樣化的需要,提高了資源的利用率,但是當(dāng)用戶希望能利用一群機(jī)器資源池子化來創(chuàng)建一個更強(qiáng)大能力的單一運(yùn)行環(huán)境時,Hadoop 和 Spark 部分滿足了這個需求,它跟一個理想中巨大”VM”的區(qū)別就是運(yùn)行環(huán)境 API 的差異。理想化的集群虛擬化可能是一個 Nginx 服務(wù)器無縫的在一個集群“VM”上運(yùn)行,一個 fork 調(diào)用會跑到不同的機(jī)器運(yùn)行,這可能就需要一個分布式“內(nèi)核”去搞定(一個學(xué)術(shù)項(xiàng)目在做這件事)。
不過這個兼容 Posix 標(biāo)準(zhǔn)的 VM 未必就是合理的,如果串行編程之于并行編程,在程序設(shè)計(jì)思路和實(shí)現(xiàn)上會有巨大鴻溝,那么分布式編程如果還能直接使用 Posix 標(biāo)準(zhǔn),那么想必也絕不是直接拿并行編程的那一套就可以,假設(shè)具備一個龐大的支持 Posix 標(biāo)準(zhǔn)的 VM,那么程序設(shè)計(jì)反而需要向 Mapreduce 靠攏,數(shù)據(jù)更多考慮分片化,減少避免鎖和同步,盡量減少中間結(jié)果。那么最后既然在分布式編程需要向 Mapreduce 上靠,這個支持 Posix 的容器可能也沒有想象的重要。
存儲虛擬化
花了這么多時間講計(jì)算資源虛擬化和 Posix 標(biāo)準(zhǔn)的關(guān)系就是為了鋪墊存儲虛擬化,先考慮單機(jī)存儲虛擬化,就是在 Host 機(jī)器分配一個文件,一個虛擬塊設(shè)備(LVM)或者一個物理設(shè)備到 VM,通過全模擬的 Qemu 或者 KVM 來幫助實(shí)現(xiàn)從 VM 到設(shè)備的訪問。相應(yīng)的,當(dāng)用戶希望能自由組合和利用多個機(jī)器上的存儲資源時,集群的存儲虛擬化就是需要的。與計(jì)算資源不同的是,依賴于網(wǎng)絡(luò)的存儲資源更具備可能性,本質(zhì)原因是存儲資源與計(jì)算相比是個慢得多的設(shè)備。因此,網(wǎng)絡(luò)并不會為節(jié)點(diǎn)間存儲資源傳輸增添太多的負(fù)荷,原來的程序設(shè)計(jì)也不需要像計(jì)算資源一樣過多考慮局部性的問題。
圖片來自SNIA Technical Tutorial
因此,與計(jì)算資源虛擬化概念不太一樣的是,大多時候,存儲虛擬化更多的會是集群所有存儲資源的池子化,通常提供存儲虛擬化能力的是軟件,通過溝通多個網(wǎng)絡(luò)連接的存儲設(shè)備來提供一致性的數(shù)據(jù)服務(wù)。任何一個技術(shù)都是為了解決一些問題才是有價值的,存儲虛擬化它作為一個技術(shù)提供了解決一些問題的新方法,而這些問題中最顯著改善的就是整個存儲基礎(chǔ)設(shè)施的管理。我們都知道因?yàn)榇鎯Ψ?wù)固有的“慢”,從數(shù)據(jù)訪問到真正存儲的介質(zhì)之間塞進(jìn)去各種虛擬、優(yōu)化、緩存層,這些層次構(gòu)成的復(fù)雜性實(shí)際上已經(jīng)成為存儲系統(tǒng)高可用的障礙,而存儲虛擬化也被寄希望于解決這些問題:
單點(diǎn)失敗問題: 無論是陣列,SAN或者是中間的網(wǎng)絡(luò)設(shè)備都會成為問題
QoS問題: 實(shí)際上維護(hù)和持久保證一個SAN或者存儲系統(tǒng)的性能是非常困難的,而虛擬化提供了實(shí)時“管理”性能的可能性
在存儲系統(tǒng)中的數(shù)據(jù)是任何用戶業(yè)務(wù)的關(guān)鍵,任何數(shù)據(jù)的丟失或者一段時間不可用都是災(zāi)難性事件,虛擬化提供了可用性的方案而不是需要昂貴的高端存儲
低效的空間利用: 實(shí)際上用戶業(yè)務(wù)增加的數(shù)據(jù)往往需要新的存儲設(shè)備提供,而舊設(shè)備往往在不斷新設(shè)備的提供后慢慢降低了空間利用率,加上困難的數(shù)據(jù)管理操作,用戶的存儲系統(tǒng)很容易隨著時間使得利用率大幅下降
存儲虛擬化技術(shù)為了解決上述問題,需要顯著減少存儲系統(tǒng)的管理難度(通過將管理物理設(shè)備轉(zhuǎn)換為管理虛擬設(shè)備),減少 down-time,增加新舊設(shè)備的空間利用和彈性使用,抽象存儲設(shè)備的特性。這些能力使得虛擬化實(shí)現(xiàn)具備以下基本能力:
地址空間的重新映射
IO 重定向
提供復(fù)制分發(fā)
磁盤資源和資源池元信息的管理
通常我們把這部分特性分為三個層次,分別是協(xié)議層,地址轉(zhuǎn)換層和數(shù)據(jù)存儲層。協(xié)議層提供網(wǎng)絡(luò)路由的高可用,地址轉(zhuǎn)換層保證存儲資源的高可用,數(shù)據(jù)存儲層保證存儲資源的持久性。而數(shù)據(jù)存儲層的抽象化往往會根據(jù)虛擬化實(shí)現(xiàn)本身會存在多個層次,如磁盤虛擬化,文件系統(tǒng)虛擬化,塊設(shè)備虛擬化等等。
以開源的塊存儲解決方法 Ceph 為例,Ceph 的客戶端依賴多個元信息服務(wù)器提供的智能理由能力,承擔(dān)起地址轉(zhuǎn)換的角色,根據(jù)請求的地址參數(shù)請求相應(yīng)的后端 OSD,OSD 將塊設(shè)備視為一個帶權(quán)重和屬性的存儲對象來提供數(shù)據(jù)存儲資源的持久性和均衡性,這個持久性可以是復(fù)制或者是擦除碼分發(fā)。再比如一個 Strata 提供的高性能分布式存儲,由 SDN 協(xié)議實(shí)現(xiàn)的到 Virtual NFS Server 的網(wǎng)絡(luò)路由高可用,由改進(jìn)的 NFS Server 提供數(shù)據(jù)的高可用。
此外,由于虛擬化本身的抽象存儲能力,虛擬化實(shí)現(xiàn)本身可以看成是眾多存儲設(shè)備的大腦,往往基于一些用戶輸入和定義規(guī)則能擴(kuò)展出更加誘人的特性,比如分層存儲,快照,災(zāi)備。
總而言之,存儲虛擬化是為了提高空間利用率,降低成本,提供理想化的資源(空間和IO能力)自由分配和組合的可能性,并且向用戶呈現(xiàn)的是數(shù)據(jù)而不是它的物理存儲位置及存儲方式,同時減小了對存儲硬件資源的綁定(增加了異構(gòu)存儲設(shè)備整合能力),將更多特性放在了虛擬化實(shí)現(xiàn)上。當(dāng)然,與原生的設(shè)備訪問相比,性能上損耗和保證能力的損失是存在的,這部分掌控取決于存儲虛擬化的實(shí)現(xiàn),同時存儲虛擬化技術(shù)是否能發(fā)揮這些功效的程度取決于其完整性及在核心數(shù)據(jù)管理體系結(jié)構(gòu)中的集成度。
軟件定義存儲
軟件定義存儲(Software defined Storage)實(shí)際上是另一個火熱概念,通常情況下它與虛擬化密切聯(lián)系并出現(xiàn)。但是軟件定義存儲實(shí)際上存在更大的適用范圍,它的目標(biāo)是從存儲硬件中分離出存儲功能和服務(wù)并提供編程接口,如 OpenStack Cinder, EMC ViPR, Nexenta 和 HP StoreVirtual 都是這個范疇。
再具體一點(diǎn),軟件定義存儲是把存儲硬件或軟件提供的控制能力抽象出來,并與數(shù)據(jù)層面的能力(數(shù)據(jù)訪問)分開,這些控制能力包括卷管理,RAID,QoS,數(shù)據(jù)復(fù)制,監(jiān)控,快照和備份等等,這個舉動意義在于這些控制能力抽象出來以后,任何廠商提供的存儲能力控制都是接近的,避免對廠商的綁定。這些作用很容易與以前提到的 Storage Hypervisor 聯(lián)系起來,只不過它們在不同時期的環(huán)境下提出和定義。然后它通過這些控制能力進(jìn)一步為管理員提供自定義、基于策略的虛擬存儲層,這些策略可以是基于空間、性能、費(fèi)用等等因素。它的優(yōu)勢在于與存儲虛擬化相比更加輕量,通常可以保留底層存儲系統(tǒng)如SAN,陣列的特性并仍然發(fā)揮作用,而且部署和實(shí)現(xiàn)難度都大幅度下降,可以采用更小的代價實(shí)現(xiàn)管理存儲基礎(chǔ)設(shè)施的能力。
那么在這里更期望用一些例子來闡述存儲虛擬化與軟件定義存儲的交集和聯(lián)系。OpenStack Cinder 是一個典型的軟件定義存儲產(chǎn)品,它目前支持大量的存儲廠商設(shè)備,它定義了一些卷管理,快照,備份,簡單統(tǒng)計(jì)等特性,用戶可以使用 Cinder 提供的接口來獲得不同存儲設(shè)備提供的相似能力。而 Ceph 可以看作一個典型的存儲虛擬化產(chǎn)品,它將大量的通用存儲設(shè)備聯(lián)合起來提供一個存儲池,并實(shí)現(xiàn)了一般存儲廠商產(chǎn)品的能力。而 Ceph 的塊存儲能力使得它成為了 Cinder 的一個 Driver。同時,Cinder 通過了這些基本 API 進(jìn)行擴(kuò)展,可以定義出不同的存儲池,智能化的存儲區(qū)域等等。
但是 EMC 的 ViPR 作為一個典型的軟件定義存儲產(chǎn)品仍然提供了數(shù)據(jù)訪問層的能力,它的 Object Data Service 可以支持對象存儲接口(S3, Swift)和 HDFS 接口。
因此分割存儲虛擬化與軟件定義存儲的關(guān)系是不現(xiàn)實(shí)的,在一般環(huán)境下,往往將軟件定義存儲視為偏管理數(shù)據(jù)的軟件,將存儲虛擬化視為處理數(shù)據(jù)訪問的實(shí)現(xiàn),兩者往往會在自身基礎(chǔ)上向?qū)Ψ降墓δ芑蛘咛匦陨习l(fā)展。
參考
ViPR 軟件定義的存儲 – EMC(http://china.emc.com/data-center-management/vipr/index.htm)
HITACHI STORAGE VIRTUALIZATION(http://www.hds.com/solutions/it-strategies/storage-virtualization/)
Storage Virtualization: The SNIA Technical Tutorial(https://www.snia.org/education/storage_networking_primer/stor_virt)
storage virtualization(http://searchstorage.techtarget.com/definition/storage-virtualization)