“Desktop virtualization (或者稱為Virtual Desktop Infrastructure) 是一種基于服務器的計算模型,VDI概念最早由桌面虛擬化 廠商威睿提出,目前已經(jīng)成為標準的技術術語。雖然借用了傳統(tǒng)的瘦客戶端的模型,但是讓管理員與用戶能夠同時獲得兩種方式的優(yōu)點:將所有桌面虛擬機在數(shù)據(jù)中心進行托管并統(tǒng)一管理;同時用戶能夠獲得完整PC的使用體驗。
軟件定義
簡單的來說,虛擬桌面是指:支持企業(yè)級實現(xiàn)桌面系統(tǒng)的遠程動態(tài)訪問與數(shù)據(jù)中心統(tǒng)一托管的技術。一個形象的類比,就是現(xiàn)在,我們可以通過任何設備、在任何地點,任何時間訪問在網(wǎng)絡上的我們的郵件系統(tǒng),或者網(wǎng)盤;而未來我們可以通過任何設備,在任何地點、任何時間訪問在網(wǎng)絡上的屬于我們個人的桌面系統(tǒng)。
行業(yè)現(xiàn)狀
思科在2010年年底的時候,推出了 VMware View 4.5 和 Citrix XenDesktop兩款產(chǎn)品,該兩款產(chǎn)品已經(jīng)在2011年3月上市。這兩款產(chǎn)品的價格都低于500美元,包括 一個USB鍵盤、鼠標和客戶端授權。除此之外,思科表示該公司此前發(fā)布的Cius平板電腦將支持VMware View、Citrix Receiver 和wyse Pocket 云計算虛擬軟件;并且將會和微軟的Windows在一個數(shù)據(jù)中心進行互聯(lián)。Cius同樣也在2011年3月上市。
桌面虛擬化和瘦客戶端計算機已經(jīng)推出了很多年,通過idc服務器中心化電腦的功能、數(shù)據(jù)和應用程序給予數(shù)據(jù)和安全更多的控制。
技術架構
VDI桌面虛擬化的優(yōu)勢在于運算集中在服務器端,因此在以下兩種環(huán)境中特別合適:1、在極小的廣域網(wǎng)帶寬環(huán)境下,例如低于500Kbs的線路下,可以采用威睿等VDI產(chǎn)品進行部署,用戶可以使用平板電腦或者手機接入,訪問自己的桌面環(huán)境,實現(xiàn)隨時隨地辦公;2、在新建的全千兆網(wǎng)絡環(huán)境下,同時業(yè)務應用比較簡單的環(huán)境中,用戶部署VDI桌面虛擬化后可以購買100元左右的云終端作為客戶機,大大減少客戶機的硬件投入,拉平在服務器上的硬件投入,使得總投資更加合理。
虛擬桌面基礎架構(Virtual Desktop Infrastructure,簡稱VDI)是許多機構目前正在評估的全新模式,它是基于早期的RDP協(xié)議和瘦客戶機逐步演變而來的,也是目前國外威睿等國外虛擬化廠家長期鼓吹的模式。VDI旨在為智能分布式計算帶來出色的響應能力和定制化的用戶體驗,并通過基于服務器的模式提供管理和安全優(yōu)勢。它能夠為整個桌面映像提供集中化的管理,但這一模式目前也存在著其固有的問題。主要表現(xiàn)為:因其利用硬件仿真及瘦協(xié)議,使得視頻、奧多比 Flash、IP 語音(VoIP)以及其它計算或圖形密集型應用不適用于該模式,而且VDI 需要持久的網(wǎng)絡連接,因此不適于要求離線移動性的場合。此外,其基于服務器的模式對服務器的配置有極高的要求,這些問題的存在不能不讓眾多的用戶重新考慮部署VDI的實際意義及成本。從實際應用方面來分析,VDI模式還存在諸多需要解決的問題,而與之相關的虛擬化桌面,如遠程托管桌面、遠程虛擬應用程序、遠程托管專用虛擬桌面、本地虛擬應用程序及本地虛擬操作系統(tǒng)等虛擬化桌面也都存在著各種問題;另外還有對終端硬件的支持問題、對網(wǎng)絡及服務器硬件過度依賴的問題、以及數(shù)據(jù)安全性問題等。
虛擬操作系統(tǒng)基礎架構(Virtual OS Infrastructure,簡稱VOI)成為一個新的桌面虛擬化發(fā)展方向。而在國內(nèi),和信最早推出了基于VOI桌面虛擬化架構的虛擬終端管理系統(tǒng)。VOI桌面虛擬化技術不僅可實現(xiàn)基于服務端的遠程虛擬OS、APPS、UserProfiles的按需交付,也可實現(xiàn)基于客戶端的本地緩存OS、APP及UserProfiles,這樣不僅僅可利用終端本地資源處理計算及圖形密集型應用,比如:如音視頻、大型設計及工業(yè)軟件等,也可支持各種計算機外設以適應復雜的應用環(huán)境及未來的應用擴展。同時,對網(wǎng)絡和服務器的依賴性將大大降低,即使網(wǎng)絡中斷或服務器宕機終端也可繼續(xù)使用,數(shù)據(jù)可實現(xiàn)云端集中存儲,也可實現(xiàn)終端本地加密存儲,且終端應用數(shù)據(jù)不會因網(wǎng)絡或服務端故障而丟失。
虛擬桌面整體架構分為以下四層:
l 終端接入層
用戶的終端處于這個層面,虛擬桌面可以接受各種終端的接入。
l 接入網(wǎng)絡層
接入網(wǎng)絡層負責保證用戶安全接入,并且為桌面云資源提供負載均衡。
l 桌面管理層
桌面管理層負責整個虛擬桌面系統(tǒng)的調(diào)度,如新虛擬桌面的注冊及將虛擬桌面的請求指向可用的系統(tǒng),認證用戶身份并為其授權可以使用的桌面,除此之外桌面管理層本身也承擔負載均衡的作用。
l 資源池層
資源池層負責對計算資源池、存儲資源池、網(wǎng)絡資源池的統(tǒng)一管理,按需分配部署、資源動態(tài)調(diào)度等。
在 Windows Api 中提供了 CreateDesktop 函數(shù)來創(chuàng)建新的虛擬桌面,通過 SwitchDesktop 函數(shù)可以轉入到指定的桌面,在新創(chuàng)建的桌面中可以打開進程explorer.exe,CreateProcess 有個TStartupInfo結構的參數(shù),該結構中有個叫l(wèi)pDesktop的成員,它指定了在哪個桌面創(chuàng)建進程;該函數(shù)實現(xiàn)的虛擬桌面為Windows視圖系統(tǒng)創(chuàng)建多桌面擴展,使用戶或程序可以多個桌面上相互切換可視化的應用,與Linux 圖形界面中四方格切換相似,但是該技術與現(xiàn)行“桌面虛擬化技術”是兩種完全不同的概念,不可以混淆。
引用MSDN:
Creates a new desktop, associates it with the current window station of the calling process, and assigns it to the calling thread. The calling process must have an associated window station, either assigned by the system at process creation 時間 or set by the SetProcessWindowStation 函數(shù)
To specify the 開本 of the heap for the desktop, use the CreateDesktopEx function.
函數(shù)原型
HDESK WINAPI CreateDesktop(
_In_ LPCTSTR lpszDesktop,
_Reserved_ LPCTSTR lpszDevice,
_Reserved_ DEVMODE *pDevmode,
_In_ DWORD dwFlags,
_In_ ACCESS_MASK dwDesiredAccess,
_In_opt_ LPSECURITY_ATTRIBUTES lpsa
);
Parameters
lpszDesktop [in]
The 人名 of the desktop to be created. Desktop names are case-insensitive and may not contain backslash characters (\).
lpszDevice
Reserved; must be NULL.
pDevmode
Reserved; must be NULL.
dwFlags [in]
This parameter can be zero or the following value.
在c語言中的實現(xiàn)
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HDESK hOld = GetThreadDesktop(GetCurrentThreadId());
HDESK hNew = CreateDesktopA("Test", NULL, NULL, NULL, GENERIC_ALL, NULL);
if ((NULL == hOld) || (NULL == hNew))
{
MessageBox(NULL, "失敗!", "測試", MB_OK | MB_ICONERROR);
回車鍵 1;
}
SetThreadDesktop(hNew);
SwitchDesktop(hNew);
MessageBox(NULL, "成功!", "測試", MB_OK);
SwitchDesktop(hOld);
CloseDesktop(hNew);
return 0;
}
在VB中的實現(xiàn)
Private Sub Form_Load()
g_hDesktopThreadOld = GetThreadDesktop(App.ThreadID) '得到正常的桌面句柄
RegisterHotKey Me.hWnd, 1, MOD_ctrl, Asc("Q") '注冊訪問鍵
RegisterHotKey Me.hWnd, 2, MOD_CONTROL, Asc("W") '注冊熱鍵
g_hDesktopNameNew = "MyNewDesktop"
g_hDesktopNew = OpenDesktop(g_hDesktopNameNew, 0, False, DESKTOP_ALL) '如果新桌面已經(jīng)存在,就打開它
If g_hDesktopNew = 0 Then
g_hDesktopNew = CreateDesktop(g_hDesktopNameNew, vbNullString, ByVal 0&, 0, MAXIMUM_ALLOWED, ByVal 0&) '如果不存在,就新建一個
End If
Call SetThreadDesktop(g_hDesktopNew)
lpOldWinProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf myWindowProc) '子類化主窗口,接收訪問鍵消息
End Sub
Private Sub Form_Unload(Cancel As Integer)
If g_hDesktopNew <> 0 Then
CloseDesktop g_hDesktopNew '關閉新建的桌面句柄
End If
SetWindowLong Me.hWnd, GWL_WNDPROC, lpOldWinProc
End Sub
參考資料 >