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