- 应用程序和服务器虚拟化可以优化资源,但会对 CPU、RAM、磁盘和网络造成轻微的开销,这些开销必须加以测量和管理。
- 在 App-V 中,精心准备的基础镜像、SCS 模式、客户端参数和良好的配置文件管理 (UE-V/UPM) 的结合是缩短登录时间的关键。
- 物理服务器和虚拟化环境之间的选择取决于工作负载的类型:裸机用于追求极致性能,而虚拟机用于追求灵活性、可扩展性和集中管理。
- 压力测试和持续监控使您能够调整资源、检测瓶颈,并确保在 VDI、RDSH 和混合云中获得良好的用户体验。

简而言之,虚拟化是指创建物理资源(服务器、存储、网络或应用程序)的虚拟版本,从而在同一硬件上运行多个环境。这种将物理服务器“切片”成多个逻辑实例的能力是云计算和大多数现代数据中心的基础。
虚拟机 (VM)是一个独立的系统,它拥有自己的虚拟 CPU、内存、存储和网络,这些资源均来自主机的物理资源。每个虚拟机都像一台独立的计算机一样运行,通常封装在一个或多个文件中,因此相对容易移动、复制和恢复。
实现这一切的关键组件是虚拟机管理程序或VMM(虚拟机监视器)。它的功能是将主机的物理资源(CPU、内存、磁盘、网络)分离出来,并将它们分配给需要的不同虚拟机,控制它们的使用情况,并将它们彼此隔离,从而确保一个虚拟机的故障不会影响系统的其余部分。
虚拟机管理程序主要分为两大类。第一类(裸机)直接运行在服务器硬件上,常见于数据中心和私有云。第二类则作为应用程序安装在主机操作系统之上(例如,用于在笔记本电脑上运行多个虚拟机的桌面虚拟机管理程序)。
在 Linux 生态系统中,KVM(基于内核的虚拟机)尤为重要,它是一种集成到内核中的 1 型虚拟机管理程序,允许虚拟机利用 Linux 的性能和功能,并对 CPU、内存和设备进行非常精细的控制。
什么是应用虚拟化?它与服务器虚拟化有何不同?
应用程序虚拟化将应用程序与其操作系统分离,使程序无需实际安装在用户设备上即可运行。应用程序“认为”它在与操作系统通信,但实际上,它是与一个中间层(应用程序管理程序或隔离技术)通信,该中间层会重定向对文件、注册表和其他资源的访问。
通常,这些应用程序运行在中央服务器(数据中心或云端)上,并通过网络(局域网或互联网)传输到用户设备。对最终用户而言,应用程序看起来像是原生应用,但实际上它是在受控环境中发布或虚拟化的。
与在整个操作系统层面工作的服务器虚拟化不同,应用程序虚拟化是在单个程序层面工作的:例如 Word 文档、CRM、ERP、设计工具等。这大大简化了管理、隔离和更新,但也带来了与网络、存储和用户配置文件相关的性能挑战。
应用虚拟化对用户、IT 和企业的好处
从最终用户的角度来看,主要优势在于自由度。他们可以使用自己喜欢的设备(公司笔记本电脑、个人电脑、瘦客户机、平板电脑),访问公司应用程序,而无需担心安装、更新或维护任何内容。对他们来说,切换设备几乎是无缝的:登录后,快捷方式即可立即使用。
对于IT管理员来说,应用虚拟化是一项巨大的优势。他们无需在成百上千台计算机上部署和修补软件,只需在一台或几台服务器上安装和维护应用程序,然后将其发布给授权用户即可。这使得管理集中在一个位置,并大大加快了补丁、版本变更、安全配置和策略的实施速度。
开发人员也能从中受益。他们可以在同一系统上拥有不同的虚拟化环境,从而在各种操作系统版本或软件组合上测试代码,而无需搭建复杂的物理实验室。此外,虚拟化层提供的隔离性使他们能够打开可能损坏或危险的文件,而不会危及宿主系统。
对于整个组织而言,应用程序虚拟化有助于推行BYOD(自带设备办公)等举措,减少购买功能强大的企业设备的需求,简化支持流程,并且通常可以显著节省重复许可证、支持工时和提前续订硬件的费用。
合规性是关键所在。由于敏感数据并非存储在用户设备上(而是存储在数据中心或云端),因此更容易遵守 HIPAA 或 PCI-DSS 等法规,因为攻击面缩小了,访问控制和审计也更加集中。
虚拟化对性能的影响:CPU、内存、磁盘和网络
虚拟化总会引入一定的资源开销,因为在应用程序和硬件之间会增加一个额外的层(例如虚拟机管理程序、发布引擎、远程客户端等)。虽然如果平台规模合适,这种开销通常很小,但了解它在哪些方面最明显仍然很有必要。
在CPU层面,基准测试表明,运行在 KVM 或 VMware vSphere 上的典型虚拟机性能比直接运行在裸机硬件上的相同系统低 5% 到 7,5%。对于大多数企业应用(办公套件、Web 应用、ERP 系统)而言,这种性能差异可以接受,但对于计算密集型任务、人工智能或 3D 渲染而言,则可能至关重要。
DDR4 内存相比DDR5 内存,由于虚拟机管理程序需要额外的管理工作,有效速度可能会降低约 7% 到 13%。在高负载环境下,为了避免性能瓶颈,要么需要增加内存容量,要么需要限制每台主机上的虚拟机数量。
最显著的差异体现在存储性能(IOPS)上。使用 fio 等工具进行的测试表明,与裸机上的同一磁盘相比,在 4K 随机读/写操作中性能下降了约 17-25%。选择 NVMe 阵列、高性能 SSD、缓存以及良好的共享存储设计对于虚拟机和虚拟化应用程序的流畅运行至关重要。
网络延迟也会增加,尤其是在多个虚拟机共享同一物理接口,或者在远程会话之间传输图形密集型或视频密集型流量时。网络设计(VLAN、QoS、带宽、卸载)以及高效图形发布协议的使用对用户体验有着显著的影响。
Windows、App-V 和 VDI/RDS 环境:实际性能
在现代 Windows 环境(Windows 7 SP1、Windows 10、Windows 11、Windows Server 2012 R2 和 2016)中,使用Microsoft App-V进行应用程序虚拟化是远程桌面服务 (RDS) 场景和 VDI 基础架构中交付应用程序的关键技术之一。
在这些环境中,用户通常在非持久性机器(频繁重新生成的虚拟机或远程桌面会话主机)上工作。为了确保用户登录后几秒钟内即可访问其虚拟应用程序,优化App-V 客户端、配置文件管理解决方案以及基础镜像本身至关重要。
用户体验取决于几个相互关联的时间间隔:从用户输入凭据到可以与桌面交互的时间,从那时到 App-V 发布更新开始的时间,该更新的持续时间,以及最终虚拟应用程序快捷方式或文件关联可用所需的时间。
优化这些时间需要结合 App-V 配置(共享内容存储模式、并发发布限制、保留用户集成)、良好的性能分析解决方案(UE-V 或其他 UPM)以及根据主要目标设计的基础映像策略:最大性能或最大存储空间节省。
应用案例:性能导向型方法与存储导向型方法
我们可以将非持久性、有状态的 VDI/RDSH 环境中的 App-V 部署归为两大极端情况,因为在实践中,许多公司最终都处于两者之间:一种是针对性能进行优化,另一种是专注于减少存储消耗。
在以性能为导向的场景中,基础镜像会预先包含部分或全部相关的虚拟应用程序包及其连接组。这会增加镜像的准备和维护工作,但能提供最佳的用户体验:用户登录后,应用程序几乎可以立即运行。
这种面向存储的方法避免在基础镜像中包含用户特定的软件包,从而防止共享磁盘阵列被许多用户可能不需要的数据所占用。该方法优先考虑减小虚拟机镜像的大小,但代价是将一些配置操作转移到登录时进行,因此会略微增加某些应用程序的可用时间。
在实践中,通常的做法是将性能方法应用于一部分关键用户或软件包(例如,客户服务人员或经常使用的业务应用程序),而将存储方法应用于偶尔使用的用户或对启动时间不太敏感的应用程序。
为 App-V 准备环境和基础镜像
为了确保 VDI 或 RDSH 中的应用虚拟化顺利运行,必须正确配置基础镜像和配置文件管理解决方案(UE-V 或其他 UPM)。此阶段的任何错误通常会导致无休止的登录、集成丢失或不必要的重复发布。
在性能优化方法中,关键步骤包括启用系统集成的 App-V 客户端,使用 App-V 配置模板激活 UE-V(或等效解决方案),配置共享内容存储 (SCS) 模式以仅在磁盘上发布数据,以及设置注册表以在登录时保留用户集成。
此外,所有全局和用户连接包及组都必须预先配置(使用诸如 Add-AppvClientPackage 和 Add-AppvClientConnectionGroup 之类的命令),并且全局包必须预先发布。在某些情况下,建议执行全局和用户发布/更新周期,取消发布用户目标包,并清理配置文件中的 VFS 条目(例如,AppData\Local 和 AppData\Roaming 中与 App-V 相关的条目)。
在面向存储的方法中,准备工作类似,但仅预配置全局连接组和软件包。用户特定的软件包不会包含在基础镜像中,以避免增加虚拟机的大小和磁盘使用量。
此外,IT 管理员需要定期更新基础镜像,以反映软件包版本、安全补丁和新增访问权限的变化。在某些环境中,可能需要为不同的用户配置文件管理多个不同的镜像。
App-V 客户端的关键性能参数
App-V 客户端中有几个注册表设置会直接影响发布速度以及 CPU、磁盘和网络的负载,尤其是在同时有许多用户的 RDS 主机上。
共享内容存储 (SCS)模式仅允许将发布元数据存储在本地磁盘上,而应用程序的其余资源则按需从中央存储库(SAN、内容服务器)加载。如果与内容服务器的网络连接延迟较低,则可以节省本地 IOPS 并减少磁盘空间。
“登录时保留用户集成”选项可防止客户端在登录时拆分并重新集成未预配置的用户集成包。如果未启用此选项且存在大量未配置的用户集成包,则每次登录都可能导致每个集成包重复发布,从而显著影响登录时间。
另一个重要的参数是MaxConcurrentPublishingRefresh,它定义了最多可以同时触发一次发布更新的用户数量。如果 RDS 服务器上不设置此限制,当大量用户同时登录时,可能会导致 CPU 使用率飙升。设置一个合理的值可以缓解这些峰值,但代价是,在登录高峰期,部分用户可能需要稍等片刻才能看到新发布的应用程序。
用户配置文件管理:UE-V 和其他 UPM 解决方案
为了使虚拟应用程序在非持久环境中几乎立即启动,用户配置文件管理解决方案必须维护和应用会话之间的正确“用户集成”:注册表项、快捷方式、开始菜单、App-V 目录等。
微软的用户体验虚拟化 (UE-V)主要面向 VDI 和 RDS 场景。它能够捕获并存储用户设置,并在用户登录不同设备或会话时自动应用这些设置。对于 App-V,UE-V 可以使用特定的模板来捕获存储集成的确切注册表和文件路径。
一个重要的特殊之处在于对.lnk 文件(快捷方式)的处理。UE-V 仅在所有用户设备都安装了相同路径下的应用程序集相同的情况下,才支持从排除文件列表中移除 .lnk 扩展名。如果此条件不满足(例如,应用程序仅安装在一台计算机上或安装在不同的路径中),则同步 .lnk 文件可能会导致快捷方式失效。
在使用其他 UPM 解决方案(用户配置文件磁盘、第三方产品)时,至关重要的是,它们能够:保留指定的用户集成(日志和文件夹),在适当的时间(登录或应用程序启动、App-V 发布之前)同步配置文件,并在注销之前捕获这些位置的更改。
在 App-V 中,引入了 SyncAppvPublishingServer.exe 实用程序,旨在为配置文件解决方案提供清晰的触发机制:它会在用户登录时启动发布更新,但允许延迟更新,直到配置文件完全加载。这样可以防止 App-V 发布到不完整或过时的配置文件。
用户体验教程:每次登录时会发生什么
通过逐步观察流程,我们可以更好地了解用户在日常生活中如何看待应用程序虚拟化,这取决于我们采用的是性能方法还是存储方法。
在性能优化方法中,用户首次登录非持久性 VDI/RDSH 时会触发用户发布或更新操作。如果这是该用户首次接收虚拟应用程序,则此操作耗时与通常情况相同。操作完成后,性能分析解决方案会捕获用户集成信息(通常在用户注销时),其影响与保存用户其他状态类似。
在初始阶段,UPM 解决方案会先应用所有用户集成,然后 App-V 才会开始刷新发布流程。用户从一开始就能在桌面或“开始”菜单中看到快捷方式,其中许多快捷方式可以立即使用。如果权限没有更改,发布流程会在几秒钟内完成。如果有更改,则所需时间会根据虚拟化应用程序的数量和复杂程度而增加。
因此,通过保留 100% 的用户集成,发布期间的负载得以最小化:系统仅调整权限或版本更改,应用程序在登录后很短的时间内即可准备就绪。
在基于存储的方案中,首次登录也会启动用户发布流程,耗时与正常流程相同。然而,无论是首次登录还是后续登录,预配置(添加或更新)用户软件包的需求都可能延长应用程序的可用时间。根据软件包的数量和复杂程度,通常会增加 10 秒或更多。
在这种情况下,发布和更新过程必须在每次登录时重新配置所有虚拟应用程序,这不可避免地会延长发布刷新阶段。虽然这节省了磁盘空间,但会牺牲一些登录速度。
App-V 程序包生命周期和待处理状态
管理App-V 程序包的生命周期也会影响性能以及用户看到的版本一致性。当管理员更新程序包、更改权限或取消发布应用程序时,如果该程序包正在使用中,这些操作可能会一直处于挂起状态。
从 App-V 5.0 SP2 开始,引入了待处理状态。发布或取消发布操作不会失败,而是会被标记为在下次 App-V 服务重启或再次发出发布/取消发布命令时完成。对于全局发布的软件包,这通常需要重启服务器或客户端服务。
在非持久性环境中,这些待处理任务可能永远不会被处理,因为在满足条件之前,计算机可能已被丢弃或重新创建。待处理任务存储在用户配置文件中(例如,位于 HKEY_CURRENT_USER\Software\Microsoft\AppV\Client\PendingTasks 下),如果分析解决方案在登录前未应用此注册表项,则这些操作将处于待处理状态。
因此,保持基础镜像与软件包的实际状态(版本、权限、全局发布)一致至关重要。我们越少依赖待定状态,用户体验就越可预测,软件包卡住或意外消失的情况就越少。
优化排序和配置以提高发布性能
App-V 包含多种功能,这些功能会影响应用程序的发布和启动操作。在排序阶段进行某些调整,在高速网络环境下可能会产生显著差异。
例如,移除功能块 1 (FB1)就是一种情况。如果未定义 FB1(启动应用程序前预下载的最小文件集),应用程序将尝试立即启动并动态下载所需内容。在高速网络上,这可以加快首次启动速度,但在低速网络上,则可能导致中断或等待,因为需要同时下载其他内容。
使用序列器创建新包时,只需在流式传输步骤中取消选中“针对慢速网络优化包”选项即可。对于现有包,您可以更新包而不选择此优化选项。理想情况下,应在受控环境中执行这些测试,并在测试后始终将序列器恢复到干净的快照状态。
另一个方面是并行程序集(例如 Visual C++ 运行时)的管理。修改程序包无需重新排序:如果客户端已安装 SxS 依赖项,则 App-V 在发布过程中可能启动的 MSI 安装程序将不会运行,从而节省时间。程序包中包含过多的 SxS 程序集可能会在发布过程中触发额外的安装,从而影响性能。
使用动态配置文件(部署/用户配置)也会产生影响。App-V 客户端必须解析这些文件并运行脚本或应用虚拟注册表排除/包含项。如果每个程序包都包含大量配置,则发布速度会受到影响。仅在需要时才使用动态配置文件,并在不需要它们的程序包中禁用它们,可以显著缩短发布时间。
最后,值得检查一下软件包中包含的虚拟字体。虽然一个典型的软件包通常只包含不超过二十个虚拟字体,但每声明一个字体都会在部署更新过程中增加额外的工作量。通过动态配置禁用不必要的虚拟字体,并改为在镜像中安装实际需要的原生字体,有助于在用户众多的情况下节省部署时间。
虚拟机的一般性能优化
除了 App-V 之外,还有许多通用的做法可以提高任何虚拟机的性能,无论是在桌面、实验室还是生产环境中。
第一步是确保主机BIOS/UEFI中启用了硬件虚拟化扩展,例如Intel VT-x或AMD-V 。如果没有启用这些扩展,虚拟机管理程序将不得不通过软件模拟更多操作,性能将大幅下降。
此外,建议选择固定大小的虚拟磁盘而非动态虚拟磁盘。虽然动态虚拟磁盘在空间方面更灵活,但它们更容易出现碎片化,性能也会更差。如果主机空间充足,则值得从一开始就预留最大虚拟磁盘容量。
存储位置是另一个关键因素。尽可能将虚拟机托管在高速固态硬盘 (SSD)上,而不是机械硬盘或速度较慢的外部硬盘。系统启动时间、应用程序启动时间和数据访问速度方面的性能差异非常显著。
别忘了在客户机系统上安装虚拟机管理程序集成工具(例如 Guest Additions、VMware Tools 等)。这些工具会添加针对视频、网络、鼠标和存储的优化驱动程序,与操作系统自带的通用驱动程序相比,可以实现更流畅的运行。
最后,建议为每个虚拟机分配足够的内存和 CPU 核心,因为每个虚拟机都运行着一个完整的操作系统。对于 Windows 7/10/11 系统或当前的 Linux 发行版,2 GB 内存是一个非常紧的最低要求;实际上,分配更多内存可以显著提高性能。CPU 核心也是如此:如果主机有很多核心,合理地将它们分配给各个虚拟机将产生显著的性能差异。
物理服务器与虚拟化环境:何时选择哪种方案
在部署服务时,总会面临一个问题:究竟是选择虚拟机更好,还是选择专用物理服务器更好?这个问题没有标准答案,它取决于工作负载、延迟的严重程度以及成本和灵活性方面的目标。
物理(裸机)服务器无需虚拟机管理程序即可提供最大的原始性能。它们是高性能事务数据库、GPU密集型工作负载(人工智能、3D渲染、高级CAD)或实时服务(游戏、高编码流媒体)的首选,在这些应用中,每一毫秒都至关重要。
另一方面,虚拟机在高度灵活和可扩展的环境中表现出色。Web 服务、微服务和容器、开发和测试环境、虚拟桌面以及许多企业应用程序在虚拟化环境中都能出色地运行,从而实现快照、实时迁移、快速配置和集中式资源管理。
从许可和成本角度来看,如果使用按 CPU 或插槽付费的商业虚拟机管理程序,虚拟化环境可能更昂贵,但它可以节省硬件、空间和能源消耗。另一方面,专用物理服务器的许可费用可能更低,但如果仅托管少量应用程序,其资源利用效率会较低。
实际上,许多组织选择混合方法:物理服务器用于最关键和对性能要求最高的工作负载,而虚拟化集群用于其余服务,包括应用程序发布平台和 VDI。
压力测试和性能评估指标
仅凭直觉不足以做出明智的决策:还需要进行测量。对 CPU、内存、磁盘和网络进行压力测试,可以将虚拟化环境与物理服务器进行比较,并验证性能损失对于特定应用程序是否可以接受。
sysbench等工具可以帮助测量 CPU 的计算能力(例如,通过计算一定范围内的素数),而 memtester 或 stress-ng 等实用程序可以让你评估不同负载条件下的内存延迟和带宽。
对于存储而言,像fio这样的专用工具已成为衡量不同访问模式(顺序读/写、随机读/写以及二者组合)下 IOPS、吞吐量和延迟的事实标准。这些工具能够量化虚拟化层和所用磁盘后端类型的影响。
在网络层面,iperf3、netperf 和 ping等工具可用于测量物理主机、虚拟机和远程客户端之间的最大带宽、平均延迟和抖动。这些数据在发布图形应用程序或具有高交互需求的远程桌面时尤为重要。
将这些指标与真实世界的试点用户体验相结合,可以进行设计调整:从升级某些虚拟机的 RAM 或 CPU,到更改磁盘位置,修改并发 App-V 发布的最大大小,或者决定某个数据库应该在物理主机上运行。
鉴于以上所述,精心设计的应用和基础架构虚拟化能够在性能、灵活性和成本之间实现极佳的平衡。通过利用 App-V、UE-V、KVM 或商用虚拟机管理程序等技术,根据工作负载谨慎选择物理服务器和虚拟机,并微调关键的发布和用户配置文件参数,员工可以随时随地快速访问应用程序,而无需担心底层复杂性成为业务瓶颈。

