咱們說Citrix PVS架構本質上是一個存儲架構,是由於在Citrix PVS架構下,實現了計算和存儲的分離。首先在傳統的計算機上,計算資源和存儲資源是同處於相同計算機內部的經過高速總線鏈接起來的組件,而在存儲設備上,服務器本地的存儲資源不在用於存儲數據文件,存儲數據文件的存儲空間經過網絡(TCP/IP or FC)傳送到專門的存儲控制器,由存儲控制器來分配和管理這些元數據和IO,並最終將數據落地到硬盤空間存儲起來。因此從原理出發,Citrix PVS就至關於存儲設備中是存儲控制器,其管理和分配用戶計算資源所需的元數據資源,同時管理和下發數據IO到存儲的硬盤上。前端
這種架構咱們也能夠將其稱爲網絡計算模式或者分佈式計算模式。網絡計算模式把計算任務分佈到各客戶主機(PVS簡稱目標設備),而數據(系統數據和用戶數據)集中存儲於網絡服務器中,實現了存儲與計算的分離,部署在服務器中的系統數據將能夠供網絡中全部主機共享。但每一個主機有自身的私有屬性數據(如各類硬件的型號和主機SID、網絡IP 地址和用戶登陸參數等),經過共享的系統數據和該主機的私有數據能夠組合一個可啓動的系統鏡像,從而構建其計算環境。後端
無論是存儲架構仍是網絡計算架構,其基本的一個特徵都是將計算資源和存儲資源進行有效分離。計算資源與存儲資源相分離後,PVS服務器系統將兩者之間的物理總線鏈接轉換爲網絡實時鏈接,根據不一樣的應用需求實時地從新構建新的計算環境。PVS服務器彌補了傳統分散計算環境的不足,具備資源動態映射、系統易於使用、管理維護簡單等特色。同時,數據資源的集中存儲使得管理員能夠統一配置與管理本來分散的存儲資源,同時提供了分散模式下所不具有的安全性。緩存
基於計算資源和存儲資源分離模型,PVS架構必須是:安全
一、 目標設備:本地沒有任何存儲資源(也能夠有存儲資源用於緩存)的計算機或者服務器,擁有計算資源所需的組件:好比CPU、內存和南北橋(IO橋)等計算資源,同時必須擁有NIC(網卡)設備。服務器
二、 存儲服務器:用於存放操做系統以及應用程序的存儲空間。網絡
三、 元數據管理服務器:負責管理目標設備和虛擬硬盤之間的映射關係,並管理目標設備、用戶以及存儲資源。架構
四、 PVS客戶端虛擬硬盤:負責經過網絡鏈接目標設備和網絡存儲設備中的虛擬硬盤,爲每個目標設備映射虛擬的硬盤空間。併發
五、 利用以太網網絡將上述四個組件鏈接在一塊兒構成PVS系統。分佈式
在Citrix PVS架構中,PVS服務器集成了存儲服務器和元數據管理服務器。在PVS客戶端集成了目標設備和PVS客戶端虛擬硬盤。所以在PVS中,其架構應該是前端PVS客戶端設備—PVS服務器—VHDX虛擬硬盤。因此按照傳統計算機的基本架構,咱們能夠認爲PVS客戶端設備包含了計算機的CPU和RAM資源,PVS服務器就是硬盤控制器合做存儲控制器,VHDX虛擬硬盤就是傳統存儲數據的物理硬盤。只不過傳統的IO通路被改變了。那麼咱們從後端往前端推演,將這條IO路徑打通!ide
在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客戶端虛擬硬盤的技術細節,所以暫不清楚其架構和實現原理。所以我只能作一些猜想。首先對傳統集中式系統中的存儲資源與計算資源間的數據通道進行分析。
如上圖所示,用戶數據和存儲設備分別處於存儲IO通路的兩端,而位於二者之間的文件系統、硬盤設備驅動和硬盤控制器層至關於道路里面的的通道。經過對該通道中某一層次的層間接口進行功能模擬,就能夠獲取對數據的控制權,從而實現數據訪問的重定向。
無論PVS客戶端虛擬硬盤的技術細節是什麼,其最終都是採用在靠近用戶數據端的硬盤設備驅動級進行軟件模擬,在系統內核中虛擬SCSI硬盤,該SCSI硬盤將對虛擬SCSI硬盤的I/O請求轉化爲網絡硬盤請求與存儲服務器上的VHDX虛擬硬盤進行數據交互。也就是說,這個SCSI硬盤是模擬來回後端PVS的vDisk進行一個映射的虛擬硬盤文件,前端PVS目標設備對存儲資源所作的操做,都會經由該軟件模擬的SCSI硬盤傳遞給後端PVS真正的VHDX虛擬硬盤。
所以,Citrix PVS架構下,其先後端的IO路通是:在目標設備上用戶經過相應的操做讀取或者寫入數據時,應用或系統會經過硬盤設備驅動訪問虛擬的SCSI硬盤,硬盤驅動收到系統的I/O請求後對SCSI請求做出解析,並將請求經過必定的網絡協議轉發給後臺的PVS服務器,由PVS服務器對該請求做出應答後將結果數據經由網絡返回給主目標設備,再由目標設備端的虛擬硬盤驅動將數據以SCSI請求的格式返回給上層系統。
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文件緩存如何工做。
如上圖所示,首次從硬盤讀取文件時,將其複製到系統緩存中。 當文件被加載到用戶緩存空間中時,該應用程序的數據就從系統高速緩存空間被調用或映射給RAM。當用戶關閉應用程序時,該文件的虛擬塊級文件數據仍然存在於系統高速緩存中。只要有足夠的空閒物理內存,該文件將保留在內存緩存中一段時間。所以,對於文件的後續啓動或讀取請求,Windows將直接從內存加載文件,而不是從磁盤讀取。相似這種系統級的緩存機制爲計算機運行提供了巨大的性能改進。
下圖說明了即便在文件已關閉以後,讀取文件的後續請求仍是從系統緩存提供,而不是從硬盤讀取。
而咱們知道,在製做PVS鏡像模板的時候,須要制定系統的虛擬內存空間的地址和路徑。虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它一般是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在須要時進行數據交換。在一個Windows系統上,其內存架構每每是這樣的:
硬件保留、正在使用、已修改、備用和可用(自由)幾個部分。
在使用中(硬件保留+使用中):這裏是內存核心區域,須要當心,這裏運行着系統必備的代碼。
緩存(修改+備用):這裏就是系統的緩存數據,其經過高速緩存文件置換機制來進行這些緩存進行處理。而這些通過置換出來的緩存文件不會當即就丟棄掉,而是將其置換出來放置在系統的虛擬內存當中。
可用或自由使用的:這是沒有使用的內存空間。
在上一篇文章的當中,有位朋友問我虛擬內存和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自己的緩存機制也有必定的影響。以下圖所示:
若是利用PVS目標設備的一部分RAM做爲PVS的緩存,那麼其效果將會是極大的下降存儲的IOPS。