天天看點

再議Citrix PVS架構與機制

一、PVS是存儲架構和網絡計算架構

我們說Citrix PVS架構本質上是一個存儲架構,是因為在Citrix PVS架構下,實作了計算和存儲的分離。首先在傳統的計算機上,計算資源和存儲資源是同處于相同計算機内部的通過高速總線連接配接起來的元件,而在儲存設備上,伺服器本地的存儲資源不在用于存儲資料檔案,存儲資料檔案的存儲空間通過網絡(TCP/IP or FC)傳送到專門的存儲控制器,由存儲控制器來配置設定和管理這些中繼資料和IO,并最終将資料落地到硬碟空間存儲起來。是以從原理出發,Citrix PVS就相當于儲存設備中是存儲控制器,其管理和配置設定使用者計算資源所需的中繼資料資源,同時管理和下發資料IO到存儲的硬碟上。

這種架構我們也可以将其稱為網絡計算模式或者分布式計算模式。網絡計算模式把計算任務分布到各客戶主機(PVS簡稱目标裝置),而資料(系統資料和使用者資料)集中存儲于網絡伺服器中,實作了存儲與計算的分離,部署在伺服器中的系統資料将可以供網絡中所有主機共享。但每個主機有自身的私有屬性資料(如各種硬體的型号和主機SID、網絡IP 位址和使用者登入參數等),通過共享的系統資料和該主機的私有資料可以組合一個可啟動的系統鏡像,進而建構其計算環境。

不管是存儲架構還是網絡計算架構,其基本的一個特征都是将計算資源和存儲資源進行有效分離。計算資源與存儲資源相分離後,PVS伺服器系統将二者之間的實體總線連接配接轉換為網絡實時連接配接,根據不同的應用需求實時地重新建構新的計算環境。PVS伺服器彌補了傳統分散計算環境的不足,具有資源動态映射、系統易于使用、管理維護簡單等特點。同時,資料資源的集中存儲使得管理者可以統一配置與管理原本分散的存儲資源,同時提供了分散模式下所不具備的安全性。

二、Citrix PVS的IO通路

基于計算資源和存儲資源分離模型,PVS架構必須是:

1、         目标裝置:本地沒有任何存儲資源(也可以有存儲資源用于緩存)的計算機或者伺服器,擁有計算資源所需的元件:比如CPU、記憶體和南北橋(IO橋)等計算資源,同時必須擁有NIC(網卡)裝置。

2、         存儲伺服器:用于存放作業系統以及應用程式的存儲空間。

3、         中繼資料管理伺服器:負責管理目标裝置和虛拟硬碟之間的映射關系,并管理目标裝置、使用者以及存儲資源。

4、         PVS用戶端虛拟硬碟:負責通過網絡連接配接目标裝置和網絡儲存設備中的虛拟硬碟,為每一個目标裝置映射虛拟的硬碟空間。

5、         利用以太網網絡将上述四個元件連接配接在一起構成PVS系統。

在Citrix PVS架構中,PVS伺服器內建了存儲伺服器和中繼資料管理伺服器。在PVS用戶端內建了目标裝置和PVS用戶端虛拟硬碟。是以在PVS中,其架構應該是前端PVS用戶端裝置—PVS伺服器—VHDX虛拟硬碟。是以按照傳統計算機的基本架構,我們可以認為PVS用戶端裝置包含了計算機的CPU和RAM資源,PVS伺服器就是硬碟控制器合作存儲控制器,VHDX虛拟硬碟就是傳統存儲資料的實體硬碟。隻不過傳統的IO通路被改變了。那麼我們從後端往前端推演,将這條IO路徑打通!

在PVS架構下,作業系統是存在在一個虛拟硬碟裡面的,這個虛拟硬碟利用的是微軟的VHDX格式的虛拟硬碟。虛拟硬碟顧名思義它并不是一塊真實的實體硬碟,并不需要我們增加額外的成本去購買,它僅僅是從一塊實體硬碟分區中虛拟出來的一個硬碟,VHDX不同于傳統硬碟的盤片、磁頭和磁道,VHDX硬碟的載體是檔案系統上的一個VHDX檔案。如果大家仔細閱讀VHDX檔案的技術标準(微軟在2005年公開了VHD格式檔案的全部細節,可以從微軟的TechNet網站下載下傳Virtual Hard Disk Image FormatSpecification),就會發現标準中定義了很多Cylinder、Heads和Sectors等硬碟特有的術語,來模拟針對硬碟的I/O操作。既然VHDX是一塊硬碟,那麼就可以跟實體硬碟一樣,進行分區、格式化、讀寫等操作。是以,VHDX也是硬碟的一種,就像2.5寸、3.5寸、SCSI、SATA、IDE等不同規格的硬碟一樣,VHDX是在一個檔案中的硬碟。CitrixPVS首先把作業系統和應用程式存放于VHDX虛拟硬碟中,而不是傳統的HDD或者SSD硬碟上。當然最終還是存儲在HDD或SSD上。而基于VHDX虛拟硬碟的具體的技術實作方式非常複雜。舉個例子來說,作業系統有硬碟系統和檔案系統兩部分,分别處理對硬碟的I/O讀寫指令(硬碟系統),和管理硬碟之上的分區、資料和檔案格式(檔案系統)。VHDX是存在于檔案之上的硬碟,可想而知它的技術實作必須橫跨硬碟系統和檔案系統這兩部分。

和傳統硬碟一樣,在Citrix PVS上,要把VHD檔案當作硬碟一樣讀寫,必須有相應的驅動程式。在Windows開發出來了VHDX虛拟硬碟格式之後就在Windows的系統中内置了VHDX虛拟硬碟的驅動程式,是以基本上現在使用Windwos作業系統都可以無縫的接入VHDX的虛拟硬碟并和普通硬碟一樣進行讀寫操作。是以,在基于Windows平台上安裝配置Citrix PVS元件,對于下發SCSI指令到硬碟執行讀寫操作就可以利用Window自有的特性來進行。就類似于把PVS伺服器系統當成了一台存儲控制器來使用,并管理VHDX虛拟硬碟。

解決了作業系統在後端存儲的空間問題之後,我們就需要了解PVS伺服器到VHDX虛拟硬碟之間的IO通路問題。

在日常的PVS部署中,vDisk的存儲VHDX虛拟硬碟一般都存儲在:

1)塊級存儲;

2)NAS存儲(CIFS或在某些情況下NFS);

如果是PVS本地的塊級存儲,那麼PVS伺服器到本地硬碟之間的通路就是标準的計算機硬碟通路模式,通過總線和PVS記憶體進行資料交換。如果是NAS存儲(CIFS或NFS)的情況下,那麼資料就會通過SMB協定進行傳輸,然後再傳送到本地。從PVS伺服器發送出去的是SCSI指令,對于SMB/NFS來說,就會通過SMB/NFS協定将SCSI指令打包,填上SMB的标簽傳輸到VHDX虛拟硬碟,然後VHDX虛拟硬碟在接受到SCSI指令之後,解析并執行,并将所需的是資料塊讀取通過SMB(NFS)協定傳回給PVS伺服器端。

資料塊為什麼會傳遞到PVS伺服器呢?在Citrix PVS架構下,PVS伺服器将存儲控制器和中繼資料管理伺服器合二為一,是以資料塊應該傳遞給的是PVS内部的存儲控制器子產品。和傳統的控制器陣列一樣,這些資料塊都首先傳入控制器的緩存中,然後控制器再将調用TCP/IP協定棧将資料打包,分段,貼上IP标簽,最後調用PVS伺服器的以太網卡驅動程式,最後将資料發送到PVS網卡。PVS網卡會根據以太網的協定進行資料傳輸。

資料會傳輸到架構的最後一環:目标裝置和PVS用戶端虛拟硬碟。在目标裝置上,我們說如果沒有啟動作業系統的時候,目标裝置就是一台沒有作業系統的計算機或伺服器,該計算機或伺服器沒有本地系統硬碟。而PVS用戶端虛拟硬碟呢?PVS用戶端虛拟硬碟負責動态連接配接計算資源和存儲資源,它以軟體的方式為使用者模拟虛拟的SCSI網絡硬碟,将系統對網絡硬碟通路的請求轉化為對網絡儲存設備通路的網絡協定請求包,進而為計算系統提供虛拟的存儲空間。PVS用戶端虛拟硬碟就是我們在部署了PVS系統之後,啟動我們的目标裝置,在系統的右下角,我們會看見一個PVS虛拟硬碟,該硬碟就是一台PVS用戶端虛拟硬碟。

在擁有PVS用戶端虛拟硬碟的目标裝置上,首先是以太網卡接受到來自PVS伺服器的資料,然後就是TCP/IP協定棧拆包,将資料最終發送到PVS用戶端虛拟硬碟上。PVS用戶端虛拟硬碟再根據傳統計算機硬碟架構的模式,将資料首先通過緩存系統,然後傳遞回目标裝置的RAM。 RAM将資料和指令發送到處理器,在那裡将其處理為以螢幕更新的形式發送給使用者的輸出。這樣使用者在其顯示器上就最終看見了其請求和内容和資訊。

在這裡Citrix沒有披露一些關于PVS用戶端虛拟硬碟的技術細節,是以暫不清楚其架構和實作原理。是以我隻能做一些猜測。首先對傳統集中式系統中的存儲資源與計算資源間的資料通道進行分析。

再議Citrix PVS架構與機制

如上圖所示,使用者資料和儲存設備分别處于存儲IO通路的兩端,而位于兩者之間的檔案系統、硬碟裝置驅動和硬碟控制器層相當于道路裡面的的通道。通過對該通道中某一層次的層間接口進行功能模拟,就可以擷取對資料的控制權,進而實作資料通路的重定向。

再議Citrix PVS架構與機制

不管PVS用戶端虛拟硬碟的技術細節是什麼,其最終都是采用在靠近使用者資料端的硬碟裝置驅動級進行軟體模拟,在系統核心中虛拟SCSI硬碟,該SCSI硬碟将對虛拟SCSI硬碟的I/O請求轉化為網絡硬碟請求與存儲伺服器上的VHDX虛拟硬碟進行資料互動。也就是說,這個SCSI硬碟是模拟來回後端PVS的vDisk進行一個映射的虛拟硬碟檔案,前端PVS目标裝置對存儲資源所做的操作,都會經由該軟體模拟的SCSI硬碟傳遞給後端PVS真正的VHDX虛拟硬碟。

是以,Citrix PVS架構下,其前後端的IO路通是:在目标裝置上使用者通過相應的操作讀取或者寫入資料時,應用或系統會通過硬碟裝置驅動通路虛拟的SCSI硬碟,硬碟驅動收到系統的I/O請求後對SCSI請求作出解析,并将請求通過一定的網絡協定轉發給背景的PVS伺服器,由PVS伺服器對該請求作出應答後将結果資料經由網絡傳回給主目标裝置,再由目标裝置端的虛拟硬碟驅動将資料以SCSI請求的格式傳回給上層系統。

三、Citrix PVS的緩存和IO管理

Citirx PVS将計算資源和存儲資源分離之後,讓大家共享同一個單一的作業系統鏡像檔案,那麼它是如何去讓大家共享這個作業系統檔案的?這是關鍵點一。

同時,由于目标裝置沒有本地實體硬碟等儲存設備,目标裝置必須通過網絡動态按需從PVS伺服器端加載作業系統和應用程式的指令和資料,目标裝置在動态加載指令和資料的過程中會産生大量通路虛拟硬碟的I/O請求,這些I/O請求通過什麼機制來管理。這是關鍵點二。

我認為,說明白了了解清楚了這兩個關鍵點,再結合上述IO通路,大家也就明白了PVS的工作機制。是以,我将詳細探讨PVS的這兩個關鍵點。

我們說如果将一個作業系統共享給所有的人一起使用,所有的使用者就相當于具有管理者權限,是以使用者可以對作業系統上的所有檔案進行讀、寫、修改的任何操作,這會造成當某個使用者誤删或者無意修改了某個系統檔案的時候,會導緻系統崩潰;在作業系統檔案系統中,由于共享檔案系統意味着臨時檔案目錄也被共享,而PVS目标裝置的程式在運作時也會動态建立相應的臨時檔案,是以當不同PVS目标裝置運作同一個程式時就會産生資料不一緻性的問題,進而導緻程式在運作時會出現問題。為了解決存在的資料不一緻性問題,PVS為每個使用者提供了一個使用者緩存空間,該空間是緩存使用者對系統做出的修改以及建立的臨時檔案的存儲空間,并且強制性必須将使用者特定的檔案移動到該使用者的私有存儲區。這樣就可以使得所有使用者共享的作業系統部分處于隻讀狀态,而每個使用者針對其所建立的臨時檔案和修改的操作,都儲存到使用者的緩存空間中,進而解決因使用者修改了系統或運作相同應用所帶來的系統崩潰或資料不一緻性問題。

這就是PVS利用緩存系統解決大家共享同一個單一的作業系統鏡像檔案的問題。這個使用者緩存空間也就是Citrix PVS的Write Cache盤的由來。但是,Citrix PVS的Write Cache盤并不僅僅是用于緩存使用者的臨時檔案或者對系統的修改,還應該緩存Windows的虛拟記憶體。

同時,Windows作業系統本身,也會存在一個緩存系統。該緩存系統介于記憶體和硬碟之間,主要是作為緩沖,屏蔽硬碟和記憶體之間的讀寫速度的差異性。

Windows用于檔案頁面映射和緩存檔案的記憶體區域稱為系統緩存。系統緩存通常稱為Windows作業系統的檔案緩存。如果檔案在記憶體中緩存,那麼處理器在加載資料的時候,就直接從RAM調用。 下圖說明了當使用者第一次從硬碟(如Microsoft Word)啟動應用程式時,Windows檔案緩存如何工作。

再議Citrix PVS架構與機制

如上圖所示,首次從硬碟讀取檔案時,将其複制到系統緩存中。 當檔案被加載到使用者緩存空間中時,該應用程式的資料就從系統高速緩存空間被調用或映射給RAM。當使用者關閉應用程式時,該檔案的虛拟塊級檔案資料仍然存在于系統高速緩存中。隻要有足夠的空閑實體記憶體,該檔案将保留在記憶體緩存中一段時間。是以,對于檔案的後續啟動或讀取請求,Windows将直接從記憶體加載檔案,而不是從磁盤讀取。類似這種系統級的緩存機制為計算機運作提供了巨大的性能改進。

下圖說明了即使在檔案已關閉之後,讀取檔案的後續請求還是從系統緩存提供,而不是從硬碟讀取。

再議Citrix PVS架構與機制

而我們知道,在制作PVS鏡像模闆的時候,需要制定系統的虛拟記憶體空間的位址和路徑。虛拟記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體(一個連續完整的位址空間),而實際上,它通常是被分隔成多個實體記憶體碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行資料交換。在一個Windows系統上,其記憶體架構往往是這樣的:

再議Citrix PVS架構與機制

硬體保留、正在使用、已修改、備用和可用(自由)幾個部分。

在使用中(硬體保留+使用中):這裡是記憶體核心區域,需要小心,這裡運作着系統必備的代碼。

緩存(修改+備用):這裡就是系統的緩存資料,其通過高速緩存檔案置換機制來進行這些緩存進行處理。而這些經過置換出來的緩存檔案不會立即就丢棄掉,而是将其置換出來放置在系統的虛拟記憶體當中。

可用或自由使用的:這是沒有使用的記憶體空間。

在上一篇文章的當中,有位朋友問我虛拟記憶體和PVS的緩存是什麼關系?這就是我寫這部分Windows緩存所要解釋的問題。上述以及解釋了Windows緩存和虛拟記憶體的關系,接下來還需要繼續說明一些概念,以幫助大家了解。

首先我們需要講頁面檔案。分頁是一種記憶體管理技術,通過它,系統可以從硬碟中檢索頻繁通路的資料并存儲在記憶體中使用。作業系統是從頁面的塊中檢索來自該硬碟的資料。是以,頁面檔案本質上是一個“頁面”的集合,這些頁面存儲在硬碟上。虛拟記憶體的這種擴充很重要,因為它允許作業系統利用硬碟來存儲可能不适合記憶體的資料,進而提高性能并防止應用程式崩潰。頁面檔案還允許程序的實體位址空間是非連續的(防止諸如碎片和其他問題之類的事情),但這是關于分頁和記憶體分段的,本文中不做讨論。暫且了解了一些頁面檔案和虛拟記憶體的概念之後,我想說明的是,在PVS架構下,使用虛拟記憶體的頁面檔案技術,就會有利于提高PVS的緩存政策以及緩存的命中率。

PVS本身也通過緩存機制來緩存目标裝置和PVS伺服器之間的讀寫差異性。

由于PVS目标裝置沒有存儲資源。作業系統、應用程式和資料都集中存儲在伺服器上。服務端發送給不同PVS目标裝置的I/O資料内容大部分是重複的,并且不同PVS目标裝置會對服務端産生大量回寫,這些并發I/O操作大大增加了PVS伺服器的網絡負載,進而延長了PVS目标裝置I/O請求的響應時間。是以Citrix針對現有的PVS架構,設計了基于PVS的這個場景下的緩存機制:

1)、基于PVS伺服器的Cache

2)、基于PVS目标裝置的Cache

服務端Cache位于PVS伺服器上,針對CitrixPVS環境中不同PVS目标裝置對同一鏡像檔案的讀取内容大部分是重複的這個特點,為服務端上的所有虛拟磁盤鏡像檔案設定獨立Cache,通過改進Cache管理政策提高對共享資料在Cache中的命中率,加快系統對VS目标裝置讀請求的響應時間。也就是說,PVS一般都會将PVS目标裝置在系統啟動時所需的啟動的幾百兆檔案資料到拷貝進記憶體或緩存中,然後加快PVS目标裝置在遠端請求啟動系統的速度。通過這個伺服器端的緩存政策,就可以很好的解決PVS目标裝置對于PVS伺服器大量重複的讀IO請求。

PVS目标裝置的Cache主要是設定在PVS的Write Cache盤上,其系統在初始化時會請求配置設定Write Cache盤上一組連續的存儲空間。即在每個PVS目标裝置的虛拟硬碟驅動層設定一個彼此獨立的Cache政策,來減少不同PVS目标裝置對伺服器端的I/O請求。因為該政策會将經常需要去PVS伺服器讀取的資料緩存到Write Cache盤上的緩存空間,當使用者下次還需要資料時,直接從PVS目标裝置的Write Cache盤上的緩存空間拷貝到PVS目标裝置的RAM中運作。

Write Cache盤在PVS架構下可以放置在PVS伺服器以及PVS目标裝置的本地或者記憶體中。它放置的位置對于PVS本身的緩存機制也有一定的影響。如下圖所示:

再議Citrix PVS架構與機制

繼續閱讀