再议Citrix PVS架构与机制

 


1、PVS是存储架构和网络计算架构



咱们说Citrix PVS架构本质上是一个存储架构,是由于在Citrix PVS架构下,实现了计算和存储的分离。首先在传统的计算机上,计算资源和存储资源是同处于相同计算机内部的经过高速总线链接起来的组件,而在存储设备上,服务器本地的存储资源不在用于存储数据文件,存储数据文件的存储空间经过网络(TCP/IP or FC)传送到专门的存储控制器,由存储控制器来分配和管理这些元数据和IO,并最终将数据落地到硬盘空间存储起来。因此从原理出发,Citrix PVS就至关于存储设备中是存储控制器,其管理和分配用户计算资源所需的元数据资源,同时管理和下发数据IO到存储的硬盘上。前端

这种架构咱们也能够将其称为网络计算模式或者分布式计算模式。网络计算模式把计算任务分布到各客户主机(PVS简称目标设备),而数据(系统数据和用户数据)集中存储于网络服务器中,实现了存储与计算的分离,部署在服务器中的系统数据将能够供网络中全部主机共享。但每一个主机有自身的私有属性数据(如各类硬件的型号和主机SID、网络IP 地址和用户登陆参数等),经过共享的系统数据和该主机的私有数据能够组合一个可启动的系统镜像,从而构建其计算环境。后端

无论是存储架构仍是网络计算架构,其基本的一个特征都是将计算资源和存储资源进行有效分离。计算资源与存储资源相分离后,PVS服务器系统将两者之间的物理总线链接转换为网络实时链接,根据不一样的应用需求实时地从新构建新的计算环境。PVS服务器弥补了传统分散计算环境的不足,具备资源动态映射、系统易于使用、管理维护简单等特色。同时,数据资源的集中存储使得管理员能够统一配置与管理本来分散的存储资源,同时提供了分散模式下所不具有的安全性。缓存

 

2、Citrix PVSIO通路



基于计算资源和存储资源分离模型,PVS架构必须是:安全

一、         目标设备:本地没有任何存储资源(也能够有存储资源用于缓存)的计算机或者服务器,拥有计算资源所需的组件:好比CPU、内存和南北桥(IO)等计算资源,同时必须拥有NIC(网卡)设备。服务器

二、         存储服务器:用于存放操做系统以及应用程序的存储空间。网络

三、         元数据管理服务器:负责管理目标设备和虚拟硬盘之间的映射关系,并管理目标设备、用户以及存储资源。架构

四、         PVS客户端虚拟硬盘:负责经过网络链接目标设备和网络存储设备中的虚拟硬盘,为每个目标设备映射虚拟的硬盘空间。并发

五、         利用以太网网络将上述四个组件链接在一块儿构成PVS系统。分布式

Citrix PVS架构中,PVS服务器集成了存储服务器和元数据管理服务器。在PVS客户端集成了目标设备和PVS客户端虚拟硬盘。所以在PVS中,其架构应该是前端PVS客户端设备—PVS服务器—VHDX虚拟硬盘。因此按照传统计算机的基本架构,咱们能够认为PVS客户端设备包含了计算机的CPURAM资源,PVS服务器就是硬盘控制器合做存储控制器,VHDX虚拟硬盘就是传统存储数据的物理硬盘。只不过传统的IO通路被改变了。那么咱们从后端往前端推演,将这条IO路径打通!ide

PVS架构下,操做系统是存在在一个虚拟硬盘里面的,这个虚拟硬盘利用的是微软的VHDX格式的虚拟硬盘。虚拟硬盘顾名思义它并非一块真实的物理硬盘,并不须要咱们增长额外的成本去购买,它仅仅是从一块物理硬盘分区中虚拟出来的一个硬盘,VHDX不一样于传统硬盘的盘片、磁头和磁道,VHDX硬盘的载体是文件系统上的一个VHDX文件。若是你们仔细阅读VHDX文件的技术标准(微软在2005年公开了VHD格式文件的所有细节,能够从微软的TechNet网站下载Virtual Hard Disk Image FormatSpecification),就会发现标准中定义了不少CylinderHeadsSectors等硬盘特有的术语,来模拟针对硬盘的I/O操做。既然VHDX是一块硬盘,那么就能够跟物理硬盘同样,进行分区、格式化、读写等操做。所以,VHDX也是硬盘的一种,就像2.5寸、3.5寸、SCSISATAIDE等不一样规格的硬盘同样,VHDX是在一个文件中的硬盘。CitrixPVS首先把操做系统和应用程序存放于VHDX虚拟硬盘中,而不是传统的HDD或者SSD硬盘上。固然最终仍是存储在HDDSSD上。而基于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)块级存储;

2NAS存储(CIFS或在某些状况下NFS);

若是是PVS本地的块级存储,那么PVS服务器到本地硬盘之间的访问就是标准的计算机硬盘访问模式,经过总线和PVS内存进行数据交换。若是是NAS存储(CIFSNFS)的状况下,那么数据就会经过SMB协议进行传输,而后再传送到本地。从PVS服务器发送出去的是SCSI指令,对于SMB/NFS来讲,就会经过SMB/NFS协议将SCSI指令打包,填上SMB的标签传输到VHDX虚拟硬盘,而后VHDX虚拟硬盘在接受到SCSI指令以后,解析并执行,并将所需的是数据块读取经过SMBNFS)协议返回给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客户端虚拟硬盘的技术细节,所以暂不清楚其架构和实现原理。所以我只能作一些猜想。首先对传统集中式系统中的存储资源与计算资源间的数据通道进行分析。

0?wx_fmt=png

如上图所示,用户数据和存储设备分别处于存储IO通路的两端,而位于二者之间的文件系统、硬盘设备驱动和硬盘控制器层至关于道路里面的的通道。经过对该通道中某一层次的层间接口进行功能模拟,就能够获取对数据的控制权,从而实现数据访问的重定向。

0?wx_fmt=png

无论PVS客户端虚拟硬盘的技术细节是什么,其最终都是采用在靠近用户数据端的硬盘设备驱动级进行软件模拟,在系统内核中虚拟SCSI硬盘,该SCSI硬盘将对虚拟SCSI硬盘的I/O请求转化为网络硬盘请求与存储服务器上的VHDX虚拟硬盘进行数据交互。也就是说,这个SCSI硬盘是模拟来回后端PVSvDisk进行一个映射的虚拟硬盘文件,前端PVS目标设备对存储资源所作的操做,都会经由该软件模拟的SCSI硬盘传递给后端PVS真正的VHDX虚拟硬盘。

所以,Citrix PVS架构下,其先后端的IO路通是:在目标设备上用户经过相应的操做读取或者写入数据时,应用或系统会经过硬盘设备驱动访问虚拟的SCSI硬盘,硬盘驱动收到系统的I/O请求后对SCSI请求做出解析,并将请求经过必定的网络协议转发给后台的PVS服务器,由PVS服务器对该请求做出应答后将结果数据经由网络返回给主目标设备,再由目标设备端的虚拟硬盘驱动将数据以SCSI请求的格式返回给上层系统。


3、Citrix PVS的缓存和IO管理



Citirx PVS将计算资源和存储资源分离以后,让你们共享同一个单一的操做系统镜像文件,那么它是如何去让你们共享这个操做系统文件的?这是关键点一。

同时,因为目标设备没有本地物理硬盘等存储设备,目标设备必须经过网络动态按需从PVS服务器端加载操做系统和应用程序的指令和数据,目标设备在动态加载指令和数据的过程当中会产生大量访问虚拟硬盘的I/O请求,这些I/O请求经过什么机制来管理。这是关键点二。

我认为,说明白了理解清楚了这两个关键点,再结合上述IO通路,你们也就明白了PVS的工做机制。所以,我将详细探讨PVS的这两个关键点。

咱们说若是将一个操做系统共享给全部的人一块儿使用,全部的用户就至关于具备管理员权限,所以用户能够对操做系统上的全部文件进行读、写、修改的任何操做,这会形成当某个用户误删或者无心修改了某个系统文件的时候,会致使系统崩溃;在操做系统文件系统中,因为共享文件系统意味着临时文件目录也被共享,PVS目标设备的程序在运行时也会动态建立相应的临时文件,因此当不一样PVS目标设备运行同一个程序时就会产生数据不一致性的问题,从而致使程序在运行时会出现问题。为了解决存在的数据不一致性问题,PVS为每一个用户提供了一个用户缓存空间,该空间是缓存用户对系统作出的修改以及建立的临时文件的存储空间,而且强制性必须将用户特定的文件移动到该用户的私有存储区。这样就可使得全部用户共享的操做系统部分处于只读状态,而每一个用户针对其所建立的临时文件和修改的操做,都保存到用户的缓存空间中,从而解决因用户修改了系统或运行相同应用所带来的系统崩溃或数据不一致性问题。

这就是PVS利用缓存系统解决你们共享同一个单一的操做系统镜像文件的问题。这个用户缓存空间也就是Citrix PVSWrite Cache盘的由来。可是,Citrix PVSWrite Cache盘并不只仅是用于缓存用户的临时文件或者对系统的修改,还应该缓存Windows的虚拟内存。

同时,Windows操做系统自己,也会存在一个缓存系统。该缓存系统介于内存和硬盘之间,主要是做为缓冲,屏蔽硬盘和内存之间的读写速度的差别性。

Windows用于文件页面映射和缓存文件的内存区域称为系统缓存。系统缓存一般称为Windows操做系统的文件缓存。若是文件在内存中缓存,那么处理器在加载数据的时候,就直接从RAM调用。 下图说明了当用户第一次从硬盘(如Microsoft Word)启动应用程序时,Windows文件缓存如何工做。

0?wx_fmt=jpeg

如上图所示,首次从硬盘读取文件时,将其复制到系统缓存中。 当文件被加载到用户缓存空间中时,该应用程序的数据就从系统高速缓存空间被调用或映射给RAM。当用户关闭应用程序时,该文件的虚拟块级文件数据仍然存在于系统高速缓存中。只要有足够的空闲物理内存,该文件将保留在内存缓存中一段时间。所以,对于文件的后续启动或读取请求,Windows将直接从内存加载文件,而不是从磁盘读取。相似这种系统级的缓存机制为计算机运行提供了巨大的性能改进。

下图说明了即便在文件已关闭以后,读取文件的后续请求仍是从系统缓存提供,而不是从硬盘读取。

0?wx_fmt=jpeg

而咱们知道,在制做PVS镜像模板的时候,须要制定系统的虚拟内存空间的地址和路径。虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它一般是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在须要时进行数据交换。在一个Windows系统上,其内存架构每每是这样的:

0?wx_fmt=png

硬件保留、正在使用、已修改、备用和可用(自由)几个部分。

在使用中(硬件保留+使用中):这里是内存核心区域,须要当心,这里运行着系统必备的代码。

缓存(修改+备用):这里就是系统的缓存数据,其经过高速缓存文件置换机制来进行这些缓存进行处理。而这些通过置换出来的缓存文件不会当即就丢弃掉,而是将其置换出来放置在系统的虚拟内存当中。

可用或自由使用的:这是没有使用的内存空间。

在上一篇文章的当中,有位朋友问我虚拟内存和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主要是设置在PVSWrite Cache盘上,其系统在初始化时会请求分配Write Cache盘上一组连续的存储空间。即在每一个PVS目标设备的虚拟硬盘驱动层设置一个彼此独立的Cache策略,来减小不一样PVS目标设备对服务器端的I/O请求。由于该策略会将常常须要去PVS服务器读取的数据缓存到Write Cache盘上的缓存空间,当用户下次还须要数据时,直接从PVS目标设备的Write Cache盘上的缓存空间拷贝到PVS目标设备的RAM中运行。

Write Cache盘在PVS架构下能够放置在PVS服务器以及PVS目标设备的本地或者内存中。它放置的位置对于PVS自己的缓存机制也有必定的影响。以下图所示:

0?wx_fmt=png

若是利用PVS目标设备的一部分RAM做为PVS的缓存,那么其效果将会是极大的下降存储的IOPS