虚拟桌面 :基于服务器的计算模型

更新时间:2024-09-21 01:38

“Desktop virtualization (或者称为Virtual Desktop Infrastructure) 是一种基于服务器的计算模型,VDI概念最早由桌面虚拟化 厂商威睿提出,目前已经成为标准的技术术语。虽然借用了传统的瘦客户端的模型,但是让管理员与用户能够同时获得两种方式的优点:将所有桌面虚拟机数据中心进行托管并统一管理;同时用户能够获得完整PC的使用体验。

软件定义

简单的来说,虚拟桌面是指:支持企业级实现桌面系统的远程动态访问与数据中心统一托管的技术。一个形象的类比,就是现在,我们可以通过任何设备、在任何地点,任何时间访问在网络上的我们的邮件系统,或者网盘;而未来我们可以通过任何设备,在任何地点、任何时间访问在网络上的属于我们个人的桌面系统。

行业现状

思科在2010年年底的时候,推出了 VMware View 4.5 和 Citrix XenDesktop两款产品,该两款产品已经在2011年3月上市。这两款产品的价格都低于500美元,包括 一个USB键盘、鼠标和客户端授权。除此之外,思科表示该公司此前发布的Cius平板电脑将支持VMware View、Citrix Receiver 和wyse Pocket 云计算虚拟软件;并且将会和微软Windows在一个数据中心进行互联。Cius同样也在2011年3月上市。

桌面虚拟化和瘦客户端计算机已经推出了很多年,通过idc服务器中心化电脑的功能、数据和应用程序给予数据和安全更多的控制。

技术架构

VDI桌面虚拟化的优势在于运算集中在服务器端,因此在以下两种环境中特别合适:1、在极小的广域网带宽环境下,例如低于500Kbs的线路下,可以采用威睿等VDI产品进行部署,用户可以使用平板电脑或者手机接入,访问自己的桌面环境,实现随时随地办公;2、在新建的全千兆网络环境下,同时业务应用比较简单的环境中,用户部署VDI桌面虚拟化后可以购买100元左右的云终端作为客户机,大大减少客户机的硬件投入,拉平在服务器上的硬件投入,使得总投资更加合理。

虚拟桌面基础架构(Virtual Desktop Infrastructure,简称VDI)是许多机构目前正在评估的全新模式,它是基于早期的RDP协议和瘦客户机逐步演变而来的,也是目前国外威睿等国外虚拟化厂家长期鼓吹的模式。VDI旨在为智能分布式计算带来出色的响应能力和定制化的用户体验,并通过基于服务器的模式提供管理和安全优势。它能够为整个桌面映像提供集中化的管理,但这一模式目前也存在着其固有的问题。主要表现为:因其利用硬件仿真及瘦协议,使得视频、奥多比 Flash、IP 语音(VoIP)以及其它计算或图形密集型应用不适用于该模式,而且VDI 需要持久的网络连接,因此不适于要求离线移动性的场合。此外,其基于服务器的模式对服务器的配置有极高的要求,这些问题的存在不能不让众多的用户重新考虑部署VDI的实际意义及成本。从实际应用方面来分析,VDI模式还存在诸多需要解决的问题,而与之相关的虚拟化桌面,如远程托管桌面、远程虚拟应用程序、远程托管专用虚拟桌面、本地虚拟应用程序及本地虚拟操作系统等虚拟化桌面也都存在着各种问题;另外还有对终端硬件的支持问题、对网络及服务器硬件过度依赖的问题、以及数据安全性问题等。

虚拟操作系统基础架构(Virtual OS Infrastructure,简称VOI)成为一个新的桌面虚拟化发展方向。而在国内,和信最早推出了基于VOI桌面虚拟化架构的虚拟终端管理系统。VOI桌面虚拟化技术不仅可实现基于服务端的远程虚拟OS、APPS、UserProfiles的按需交付,也可实现基于客户端的本地缓存OS、APP及UserProfiles,这样不仅仅可利用终端本地资源处理计算及图形密集型应用,比如:如音视频、大型设计及工业软件等,也可支持各种计算机外设以适应复杂的应用环境及未来的应用扩展。同时,对网络和服务器的依赖性将大大降低,即使网络中断或服务器宕机终端也可继续使用,数据可实现云端集中存储,也可实现终端本地加密存储,且终端应用数据不会因网络或服务端故障而丢失。

虚拟桌面整体架构分为以下四层:

l 终端接入层

用户的终端处于这个层面,虚拟桌面可以接受各种终端的接入。

l 接入网络层

接入网络层负责保证用户安全接入,并且为桌面云资源提供负载均衡。

l 桌面管理层

桌面管理层负责整个虚拟桌面系统的调度,如新虚拟桌面的注册及将虚拟桌面的请求指向可用的系统,认证用户身份并为其授权可以使用的桌面,除此之外桌面管理层本身也承担负载均衡的作用。

l 资源池层

资源池层负责对计算资源池、存储资源池、网络资源池的统一管理,按需分配部署、资源动态调度等。

在 Windows Api 中提供了 CreateDesktop 函数来创建新的虚拟桌面,通过 SwitchDesktop 函数可以转入到指定的桌面,在新创建的桌面中可以打开进程explorer.exe,CreateProcess 有个TStartupInfo结构的参数,该结构中有个叫lpDesktop的成员,它指定了在哪个桌面创建进程;该函数实现的虚拟桌面为Windows视图系统创建多桌面扩展,使用户或程序可以多个桌面上相互切换可视化的应用,与Linux 图形界面中四方格切换相似,但是该技术与现行“桌面虚拟化技术”是两种完全不同的概念,不可以混淆。

引用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 函数

To specify the 开本 of the heap for the desktop, use the CreateDesktopEx function.

函数原型

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语言中的实现

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中的实现

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) '如果新桌面已经存在,就打开它

If g_hDesktopNew = 0 Then

g_hDesktopNew = CreateDesktop(g_hDesktopNameNew, vbNullString, ByVal 0\u0026, 0, MAXIMUM_ALLOWED, ByVal 0\u0026) '如果不存在,就新建一个

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 \u003c\u003e 0 Then

CloseDesktop g_hDesktopNew '关闭新建的桌面句柄

End If

SetWindowLong Me.hWnd, GWL_WNDPROC, lpOldWinProc

End Sub

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: