虚拟化

Microsoft Application Virtualization 入门

Anthony Kinney

本文基于 App-V 的预发布版本。文中的所有信息均有可能发生变更。

概览:

  • App-V 体系结构
  • 管理虚拟应用程序
  • 使用 App-V 排序器
  • 将 App-V 与 Configuration Manager 集成

目录

App-V 体系结构
App-V 完整基础结构的工作原理
更新虚拟应用程序
排序
版本 4.5

Microsoft Application Virtualization(或 App-V)现在与我是心心相印了。App-V 过去称为 SoftGrid,我是在 Microsoft 收购创建 SoftGrid 的公司 Softricity 之后加入 Microsoft 的。现在,我为有机会为《TechNet 杂志》**撰写本文倍感兴奋,因为在收购之后发生了很多变化。

要了解 App-V,最好先探讨一下 IT 专业人员在企业管理方面面临的挑战。如今的商用台式机遭到了应用程序的冲击。在安装某个应用程序之前,它必须要经过一个漫长的回归测试,以确保它能与系统中安装的其他应用程序共存,且不会影响它们正常运行的能力。然后应用程序必须在其投入生产之前完成一系列的部署流程。由于应用程序基本上只能在安装位置使用,因此您的用户将被限制到特定的计算机。这使复杂而又关键的项目(例如,OS 和应用程序迁移、安全刷新和灾难恢复计划)更为复杂。

App-V 彻底改变了这一局面。有了 App-V,台式机管理变成了一个自动化的便捷流程,而不是一系列复杂、耗时而又占用资源的步骤。您可以更加轻松地部署、修补、更新和终止应用程序,同时获得更好的结果。

通过 App-V,用户可以坐在任何台式机前访问其应用程序。应用程序会按需交付,但运行起来与实际在本地安装并无二致。因此,没有必要安装应用程序组件或改变主机设备。

这种虚拟化的使用使 IT 专业人员对台式机的管理方式发生了巨大变化。不用改变主机设备,代之以运行虚拟化应用程序,这会带来诸多益处,包括:

  • 减少了应用程序的冲突
  • 应用程序更新更快、更方便
  • 可以并行运行同一应用程序的多个版本
  • 应用程序能灵活适应在线和离线用户
  • 减少了应用程序到应用程序的回归测试

App-V 体系结构

现在让我们来看一下在 App-V 平台的后台实际上发生了什么。此平台由几个主要组件组成:排序器、数据库、客户端、管理服务器、流式服务器和管理控制台(请参见图 1)。

fig01.gif

图 1 App-V 环境的布局(单击图像可查看大图)

App-V 系统的核心是 App-V 客户端。可以使用两种类型的客户端,即终端服务器客户端和桌面客户端。无论哪种情况,您计划在其上部署虚拟应用程序的每个桌面和终端服务器上均应安装客户端。此客户端占用的磁盘空间很少。它将安装一个驱动程序和可见的用户运行时组件(显示为任务栏指示器)。

此客户端将从 App-V 管理服务器收集虚拟应用程序的列表并显示可用的虚拟应用程序。它负责启动这些应用程序(由用户启动时)并管理客户端缓存。客户端还负责管理虚拟运行时环境的创建并确保各个环境在其自己的虚拟设备中运行。这种虚拟环境有多个组件,包括虚拟注册表、虚拟文件系统和虚拟服务管理器。

App-V 4.5 中提供了三个基础结构部署选项:完整基础结构、轻型基础结构和独立模式。部署完整基础结构时,后端包括 App-V Management Server 和 App-V Streaming Server(这是一个新组件,我稍后会加以介绍)。App-V Management Server 将托管和交付集中式虚拟应用程序,并会在应用更新或修补程序时更新虚拟应用程序。

此管理服务器依靠 SQL Server 来托管 App-V 数据库,该数据库包含虚拟应用程序的配置和设置。您应使用 Active Directory 组作为中央管理工具来置备和控制虚拟应用程序的权限。

为管理设置和配置,App-V 平台提供了一项 Microsoft .NET Framework Web 服务,只要安装了 IIS,便可在同一服务器上加载此服务。此 Web 服务充当 App-V 管理控制台(Microsoft 管理控制台 (MMC) 管理单元)与 App-V 数据库之间的联系人。管理员可以使用此控制台来发布和管理虚拟应用程序、分配 Active Directory 组、控制服务器设置以及运行虚拟化应用程序使用情况报告(请参见图 2)。

fig02.gif

图 2 管理控制台(单击图像可查看大图)

轻型基础结构包括 App-V 流式服务器,它可执行活动/软件包升级等流功能。此选项不需要 Active Directory 或 SQL Server,它没有桌面配置服务,而且不具备许可和计量功能。不过,轻型基础结构允许将流功能添加到 System Center Configuration Manager (SCCM) 和其他第三方企业软件部署 (ESD) 解决方案。

在独立模式下,App-V 排序器可以创建 MSI 文件,用它自动添加虚拟应用程序(请参见图 3)。MSI 文件包含元数据,任何 ESD 系统都可以识别该数据并控制虚拟化应用程序。此模式要求客户端处于独立模式,这样只允许虚拟应用程序有基于 MSI 的更新,不允许出现流。此模式允许组织利用 App-V 隔离功能。

fig03.gif

图 3 App-V 排序器(单击图像可查看大图)

MSI 文件非常灵活,只要有 App-V 客户端,它们就可以完全独立运行,而不需要任何服务器组件。这意味着它们可以手动部署(使用磁盘),也可以通过任何传统部署工具部署。

在 App-V 4.5 中,HTTP 和 HTTPS 是当前支持流的协议。这样就可以获得更好的流性能,采用更广泛的协议,尤其对于跨安全广域网 (WAN) 和跨 Internet 的流更是如此。

App-V 完整基础结构的工作原理

用户登录到装有客户端(App-V 终端服务或桌面客户端)的设备,客户端会向服务器请求分配给当前用户的应用程序列表。服务器将与 Active Directory 进行通信,以确定此用户所属的组,然后将应用程序的列表重新返回给客户端。客户端便开始针对已分配给该特定用户的虚拟应用程序构建公告。

在此发布过程中,要执行多个操作:

  • 复制配置文件
  • 创建桌面图标
  • 创建“发送到”链接
  • 创建开始菜单文件夹
  • 配置文件类型

此过程非常快速,最重要的是,它可确保环境看起来与用户预期的一样,没有什么直观变化。虚拟应用程序会像它们在本地安装那样运行,当然,它们不会改变主机。图标指向 App-V 客户端(它依赖于启动程序文件 (OSD 文件) 进行配置),而不是指向驻留在程序文件目录中的可执行文件。

特别要注意,此过程对网络的影响非常小,因为与传统软件部署不同,不需要安装任何东西。这有极大的好处,尤其是在漫游用户环境中,因为应用程序可供用户使用,但在应用程序启动之前不会实际交付任何内容。这种公告方法还提供了 App-V 的按需和漫游应用程序功能。

当用户启动虚拟应用程序时,客户端会读取 OSD 配置文件,此文件存储在本地计算机中。这将告诉客户端与 App-V 管理服务器进行通信时使用哪个协议以及该应用程序驻留在哪台服务器上。

相应的服务器会向下传送初始启动阈值(通常为完整应用程序的 20–40%)以响应客户端。整个启动阈值传送完成后(再次重申,只是应用程序的 20–40%),虚拟应用程序便可以运行了。

这种流实际上是随 App-V 引入的模式转变的关键元素之一。它只发送足量的应用程序,以使应用程序在运行时不会浪费宝贵的网络宽带。发送给客户端的所有数据均驻留在设备上的本地缓存文件中,可从本地缓存启动此应用程序的所有后续启动,从而消除额外的网络流量。

虚拟应用程序完成流操作后,客户端会构建一个隔离环境,以防止此应用程序改变本地计算机(也就是说,应用程序不占用客户端空间)。但是保存和编辑文件时,客户端允许虚拟应用程序访问本地文件系统,只要用户在本地系统中具有相应的权限,它还允许应用程序与本地服务(如打印)进行交互。但虚拟应用程序对本地系统的文件和注册表所做的任何更改都将被重定向到虚拟化环境,以便主机设备保持不变。

当应用程序运行时,之前没有使用的所有功能都将根据需要交付并缓存以备后续使用。这样做的好处是初始启动时只会加载用户需要的组件,不需要的功能不会消耗网络资源。(新版本提供了一些客户端缓存方面的改进,使缓存使用率和后台流更加智能化。)

以 Microsoft Office Word 为例。几乎所有用户都使用拼写检查器(没有它我根本无法撰写本文!);因此,它是初始启动的一部分。但 Word 中的“帮助”功能又是怎么样呢?没有那么多的用户使用此功能,因此,不需要在初始启动中交付。它会在某个用户对其进行首次访问时被发送给该用户。

当用户完成操作后关闭应用程序时,客户端会消除虚拟环境并将所有用户设置存储在用户特定的位置,以保留该环境并在下一次启动时重新构建。虚拟应用程序已被传送的部分(百分比)均保留在本地缓存中,可供下一次启动使用。如果其他用户登录到同一主机系统并启动同一虚拟应用程序,则此新用户将从已存储在缓存中的应用程序受益。

要删除虚拟应用程序公告,只需将此用户从相应的 Active Directory 组中删除即可。要将虚拟应用程序从台式机中完全卸载,只需清除缓存即可。由于应用程序永远不会真正安装在本地,因此不会出现询问您“您是否要删除此共享组件?”这样烦人的提示。

请注意,即使虚拟应用程序存储在缓存中,也并不意味着所有用户都有权访问它。与本地安装的应用程序不同(用户只需搜索或浏览他们无权访问的可执行文件),虚拟应用程序的存在没有直观或物理表示,除非 Active Directory 组向此用户授予了相应的显式权限。

更新虚拟应用程序

更新是使用排序器来完成的。应用程序经过修订包括更新后,便可将其置于下一版本的 App-V 管理服务器上。该服务器随后会在下一次启动时通知客户端发生了更改。如果仍使用前一版本,则用户依旧可以访问该版本,直到虚拟应用程序关闭。下一次启动时,构成更新的变化量将被向下传送到客户端并载入缓存,从而形成了应用程序的更新版本。

假设您有 1,000 名用户在运行 Word 2000。管理员需要将 Word 2000 (word2K.sft) 更新为 Word 2000 SP3,因此她将 word2K.sft 文件复制到排序站并在排序器中选择“Open for Package Upgrade”(打开软件包升级)。选择该选项后,管理员便可从上一软件包状态开始工作。然后她可以复制 DLL,运行更新,或在虚拟应用程序内执行修补程序以将其更新为 Word 2000 SP3。之后,管理员将保存这个已更新的软件包。

排序器会自动分配一个新文件名 (word2K_2.sft),以防止文件重名并指示排序的版本。将此新软件包与旧软件包置于 App-V 管理服务器的同一目录中,以使 Word 2000 (word2K.sft) 和 Word 2000 SP3 (word2K_2.sft) 最终驻留在相同目录中。管理员之后会使用 App-V 管理控制台将这两个 SFT 文件连接在一起。

在客户端,打开 Word 2000(不带 SP3)的活动会话的用户将继续正常工作。在管理员完成上述链接操作之后启动应用程序新会话的用户将会收到一条消息,指示已检测到更改。然后客户端开始仅向下传送 word2K.sft 与 word2K_2.sft 之间的变化量,并将应用程序自动更新为 Word 2000 SP3。

由于虚拟应用程序具备动态特性,因此回滚操作也是非常容易的。只需返回到 App-V 管理控制台并删除新添加的版本。这会使客户端在重新启动时回滚到上一版本。为确保软件包数据无交叉,客户端会自动清除缓存并重新传送正确的 SFT 文件。当您考虑必须要执行哪些操作才能回滚使用更加传统的软件部署工具实际安装的应用程序更新时,这是一个值得考虑的权衡。

要发挥 App-V 的优势,您必须创建虚拟应用程序包。App-V 排序器在这里就派上用场了。您为传统软件部署工具编写脚本和创建软件包时获得的任何知识和体验都会帮您轻松向排序过渡。(应该指出的是,要阐述排序需要用一整篇文章。)

大多数软件部署解决方案依靠脚本捕获应用程序自行安装的方式,然后在其他计算机上重复此过程,无需再访问每台计算机来安装或更新应用程序。应用程序安装完成后,常规软件部署工具会彻底擦除软件包。然后您必须安装该应用程序可能依赖的所有依赖关系、运行其他脚本或执行手动步骤以根据需要配置应用程序。

App-V 中的根本改变是排序过程生成了一个已安装应用程序的映像,包含它的所有依赖关系和配置。App-V 客户端可“完成”这一任务,而无需改变该映像的处理设备。

排序器会生成多种多样的文件,其中最重要的是 SFT 文件,它包含所有应用程序资产、依赖关系和配置信息。在某些情况下,它还可能包含多个应用程序。毫无疑问,此文件可能会非常大。可以对其应用一些压缩选项,但对您网络和设备性能的充分了解是必不可少的。排序器创建的图标文件 (.ico) 用于通告虚拟应用程序,以使其像在本地安装一样运行。

OSD 文件也非常重要,其选项是无穷尽的。默认情况下,这是一个基于 XML 的文件,用于告知 App-V 客户端如何启动虚拟应用程序。也可以对 OSD 文件进行修改,以配置和控制虚拟应用程序的启动和运行方式。我强烈建议您阅读“排序管理指南”和“排序最佳方法”文档,以熟悉通过 OSD 文件提供的属性和值。

最后,新的 manifest.xml 文件包含基于软件包的配置信息,可用于与第三方 ESD 解决方案和 MSI 部署集成。排序器还可以为虚拟应用程序包生成一个 MSI 文件。可使用此文件将虚拟应用程序加载到独立(无服务器)客户端或 ESD 系统。

排序器本身是一个基于向导的工具,可引导您完成应用程序安装并将其转换成虚拟应用程序(请参见图 4)。第一步是配置软件包的默认属性。这些属性存储在 OSD 文件中,包括软件包名称和注释。一些高级设置允许您指定从中进行传送的服务器、内容目录和软件包应支持的操作系统。

fig04.gif

图 4 排序向导(单击图像可查看大图)

第二步是安装、配置和测试应用程序。在安装期间,排序器会捕获对本地系统所做的全部更改,包括文件系统、注册表和系统。此向导中还有几个实用工具,可用于完成 Windows Update 集成等操作。

下一步是配置文件类型关联并指定应将快捷方式放置在什么位置。标准位置包括“开始”菜单、桌面和快速启动栏,但也可以创建自定义位置。

然后您需要启动此应用程序并配置初始启动阈值。App-V 在此步骤中确定需要交付给客户端以使应用程序开始运行的应用程序初始部分。

要配置这一初始代码(通常称为 Feature Block 1 或 FB1),只需启动应用程序并使用用户所需的最常见功能。例如,启动 Word,然后启动拼写检查器。应用程序在此阶段调用的任何 DLL、文件或注册表项会被自动指定为 FB1 的一部分。此时未使用的所有文件、设置或组件均被添加到 FB2 中。之后使用此应用程序时,客户端将会收到一个 SFT 文件的映射,指示 FB1 开始和停止位置以及 FB2 中存在的其他文件的位置,以便客户端可以在应用程序需要时检索这些文件。

排序过程的最后一步是确保所有内容正确配置。排序器显示的对话框如图 5 所示,它表示 SFT 并允许您对软件包做出任何最后添加或更改。

fig05.gif

图 5 确认和调整最终软件包(单击图像可查看大图)

版本 4.5

经过两年的准备,App-V 4.5 计划在今年晚些时候发布。这是 Microsoft 这一产品首次面世,它通过引入几项重要的增强功能(例如,动态虚拟应用程序交互、扩展可伸缩性和更为符合 Microsoft 国际化与安全的要求)推动了应用程序虚拟化。

动态虚拟应用程序交互允许虚拟化应用程序彼此进行交互。这种交互称为动态套件合成 (DSC)。 DSC 不是为取代将多个应用程序添加到同一软件包的功能。而是提供了一种新方法来集成在各虚拟应用程序之间共享的依赖关系、中间件和插件。

管理员可以指定哪些虚拟化应用程序可彼此交互。例如,假设您有五个 Web 应用程序,它们需要同一 Java 版本。在 App-V 4.1 中,您必须将此相同的 Java 版本添加到五个单独软件包中的每一个。假设 Java 版本需要一个补丁。管理员稍后必须为五个不同的软件包提供补丁。如使用 DSC,Java 只需打包一次,即可配置为能供所有五个 Web 应用程序使用的软件包。因此,修补 Java 只需要管理员为 Java 软件包提供一次补丁。

对于中间件和插件也是如此。随着 Microsoft 发布的临近以及最终确定所有最新添加的内容,我打算在博客中写一篇有关其他使用案例方案的文章。

可伸缩性的增强功能包括流式基础结构和后端基础结构。后端组件已进行了修改,它可以更好地支持群集和故障转移方案,而且更适合 WAN 和 LAN。增强功能源自几个关键的添加项。

第一个是全新的流式服务器组件,它允许进行流化,而无需 Active Directory 和 SQL Server 后端基础结构。您仍然会得到按需交付和集中更新软件包的所有巨大益处,而没有苛刻的后端要求。它可广泛用于分支机构方案和与第三方 ESD 解决方案的集成。

App-V 客户端也进行了一些改进。例如,客户端现在将所有使用情况信息存储在本地,以便可以跟踪此信息,无论客户端信息与网络是连接的还是断开的。客户端缓存也进行了扩展和改善,可以在有限的磁盘空间中提供更好的性能。现在还支持排序非英语应用程序、在非英语操作系统中运行 App-V 以及本地化为其他多种语言。

将 App-V 与 Configuration Manager 集成

App-V 4.5 中的许多增强功能和新功能都是针对将 App-V 集成到 SCCM 2007 R2 而设计的。正像我之前所探讨的,虚拟化和流化可交付传统软件部署工具未提供的应用程序。我并不是说 App-V 将取代这些工具,而是说 App-V 可以对其进行补充和扩展。

通过这种集成,您可以获取 SCCM 的所有可伸缩性、报告、设备识别和 WAN 功能以及 App-V 的所有流化和隔离功能。下面列出了会从这两项技术集成中受益的领域:

应用程序发布,SCCM R2 集成支持按需交付、漫游应用程序、初始启动阈值和应用程序部署的所有功能,无需改变客户端 PC。

更新 SCCM,分发点 (DP) 可以在软件包更新时仅部署虚拟应用程序的变化量。它引入了集中式功能,只需单击一次便可将虚拟化应用程序还原为以前版本。

管理,版本 R2 引入了一项全新的虚拟应用程序公告向导,允许管理员从单个控制台部署虚拟化应用程序以及传统软件包和公告。

打包,将 App-V 与 SCCM 集成后不需要将应用程序重新打包。必须从 SCCM 外部使用 App-V 序列完成应用程序的初始排序,但管理员可以使用 SCCM 更新现有软件包。

授权许可,可以使用 SCCM 中的现有工具跟踪虚拟应用程序的授权许可和计量。

BITS,SCCM 提供了一种全新的方法来使用行业标准的 BITS 协议将虚拟化应用程序部署到 App-V。虽然 SCCM DP 可以流化,但有些时候流化并不是部署虚拟化应用程序的理想方法。通过 SCCM 进行部署时,有两个选项可以使用。您可以使用标准流,也可以使用 BITS 的服务质量 (QoS) 功能来以更加可控的方式进行部署。如果您想在用户启动虚拟应用程序之前预加载缓存,这也是非常有用的。

计算机部署,SCCM 可以将虚拟化应用程序部署到指定计算机并继续支持基于用户的 App-V 目标平台方法。当您将虚拟应用程序部署到便携式计算机、网亭和实验室计算机时,这会很有用。如果软件由设备授权(而非指定用户),这还为协助实施许可证控制提供了方便。

可伸缩性,需要部署两个具有大量重叠的单独工具是一个常见问题。通过将 SCCM 的可伸缩性、WAN 优势与 APP-V 的隔离和流化优势相集成,您可以使用现有的 SCCM 处理管理和部署,从而简化处理过程。

Anthony Kinney 是一位技术销售专业人员,负责 Microsoft 桌面优化包。Anthony 是在 2006 年 Microsoft 收购 Softricity 后加入 Microsoft 的。在 Softricity 工作时,Anthony 编写并设计了 SoftGrid(现在为 App-V)的第一个培训程序。可通过 Anthony.kinney@microsoft.com 与他联系。