优化 WAN 环境的 BLOB 缓存 (SharePoint Server 2010)

 

适用于: SharePoint Server 2010

上一次修改主题: 2016-11-30

本文将介绍如何在 WAN 环境中使用 Microsoft SharePoint 2010 产品的 BLOB 缓存。

缓存通常用作优化呈现管道(即从服务器收到请求到响应开始流回客户端计算机的这段时间)吞吐量的方式。尽管这也是优化整个网站性能的重要方式,但本部分内容着重介绍的是缓存发挥的以下作用:

  • 客户端缓存上的服务器配置角色。

  • 控制通过网络从服务器传输到客户端的项目的大小。

关于 BLOB 缓存

BLOB 缓存是一种仅可用于 SharePoint Server 2010 发布功能的机制。因此,对于基于协作门户网站模板的企业门户网站和基于发布门户网站模板的面向 Internet 的网站来说,它是理想的候选机制。BLOB 缓存让您可以配置与发布网站列表服务项目(如页面库和网站集图像)相关的缓存指令。当客户端计算机上的浏览器收到缓存指令后,它会检测到其检索的项目可以本地保存并且在缓存指令到期前不必再次进行请求。在异地分布式环境中,这样的功能是很重要的,因为它可以减少通过网络请求和发送的项目的数量。

SharePoint Server 2010 的 BLOB 缓存启用后,将出现两种不同的情况。第一种情况是,每当请求可缓存项目时,SharePoint Server 2010 会搜索收到请求的 Web 服务器的硬盘驱动器以查看是否存在本地副本。如果存在本地副本,则将其直接从本地磁盘流式传输给用户。如果本地磁盘上没有副本,则会从存储相关项目的 SQL 数据库中创建该项目的副本,然后将相关项目发送给发出请求的用户。之后,该项目的所有请求都会直接通过 Web 服务器进行处理,直到该项目的缓存值指示其已到期。这样可以减少数据库服务器上出现的争用情况,从而优化服务器场的性能。

启用 BLOB 缓存后出现的另一种情况是,在将项目发送到客户端时为其追加可缓存性标头。该标头用于指示浏览器应将项目缓存多长时间。例如,如果某张图片的可缓存性值为三天,则在未来三天内再次请求该图片时,浏览器会使用其本地缓存中存储的该图片的副本;而不是重新向服务器请求该图片。

使用 Fiddler 收集有关 BLOB 缓存的数据

在测试网站以了解要缓存的项目及其缓存方式时,您可以使用一种名为 Fiddler(该链接可能指向英文页面) (http://www.fiddlertool.com) 的免费调试应用程序。以下屏幕快照显示的是 Fiddler 在用于执行发布任务的简单 SharePoint 网站上捕获的内容。该网站是使用默认的协作门户网站模板创建的。页面上额外添加了一些文本内容,并且母版页上还添加了几张图片。

Fiddler 工具结果

Fiddler 应用程序中包含了几条重要的信息。

  • 左侧的 # 列指示浏览器在呈现页面时总共向服务器发送了 44 个 HTTP 请求。

  • “结果”列显示的是项目请求返回的 HTTP 结果代码;结果为 200 表示已成功检索项目。

  • URL 列指示要请求的特定项目。

  • “正文”列指示每个项目的大小。

  • “缓存”列显示的是与每个项目关联的缓存指令。“缓存”列中的数据表明多个项目都关联了一个缓存指令;即,这些项目的 max-age 属性大于 0。缓存指令是以秒表示。这就意味着,在上述页面中,已将多个项目配置为缓存 365 天(1 天 24 小时、1 小时 60 分钟、1 分钟 60 秒 = 60x60x24 = 86,400x365 = 31,536,000)。

请注意,具有该缓存指令的项目都驻留在 _layouts 目录中。这些项目具有该缓存设置是因 _layouts/images 虚拟目录在 IIS 中配置的方式所致。在创建新的 Web 应用程序时,SharePoint Server 2010 会自动创建多个映射到 Web 服务器物理磁盘上的文件夹的虚拟目录。在其创建 _layouts/images 虚拟目录时,它会添加应用于整个目录的缓存指令。以下屏幕快照显示了该目录在 IIS 管理器管理单元中的配置。

“设置常用 HTTP 响应头”对话框

由于这些项目都关联了一个非零缓存指令,因此,在下次请求页面时,浏览器将使用其本地浏览器缓存中的项目副本,而不会重新向服务器请求它。以下屏幕快照显示了第二次请求页面时 Fiddler 的快照。

Fiddler 工具结果

Fiddler 数据表明,请求的项目数已大大减少(从 44 个减少至 11 个)。值得注意的是,请求的数量会随页面的请求方式的不同而不同。如果您使用浏览器中的“刷新”按钮,则浏览器可能会重新请求所有项目,而不管是否存在本地缓存版本的项目。相反,如果页面请求是通过链接或快捷方式来执行的,则只请求未缓存的项目。

Fiddler 数据还表明,浏览器在向服务器请求其本地缓存中已有的母版页上的其他图片;304 响应代码指的就是这种情况。即,浏览器对某个项目执行了条件请求。304 响应表示,服务器上的项目版本与客户端上的项目版本相同,浏览器不必重新下载图片文件。即使相关文件未通过网络下载,浏览器仍然会向服务器发送往返请求来确定该文件的本地副本是否为最新版本。在异地分布式环境中,向服务器发送往返请求的成本是很高的。因此,尽可能减少这样的请求。要实现该目标,可以向其他所有项目(服务器始终返回的页面之外的页面)添加非零缓存指令。BLOB 缓存功能可以添加该缓存指令。

使用 Web.config 配置 BLOB 缓存

您可以通过要使用 BLOB 缓存的 Web 应用程序的 Web.config 文件来配置该缓存。在文本编辑器(如“记事本”)中打开 Web.config 文件,然后搜索 BlobCache 条目。默认情况下,该条目为:

<BlobCache location="" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv)$" maxSize="10" enabled="false" />

BlobCache 元素中使用的属性具有以下含义:

  • location    指 Web 服务器硬盘驱动器上用于要存储缓存项目的位置。

  • path   应缓存的文件的类型的正则表达式。

  • maxSize **   **缓存可使用的大小(以 GB 为单位)。

  • enabled    设置为 true 可启用 BLOB 缓存。

设置单个项目的缓存到期值时,需要使用以下条件属性(默认情况下不包含此属性):

  • max-age   应在客户端计算机上缓存项目的时间(以秒为单位)。

通过将 max-age 属性设置为非零值,可缓存项目将获得与其关联的缓存到期值,这样一来,浏览器就不再需要下载项目了,甚至都可以不必检查项目是否有最新版本。例如,假定您需要启用缓存,并在 Web 服务器上分配最多 100 MB 缓存来存储项目。这些项目应每天到期一次,除了缓存预定义类型外,还应缓存 .htc 文件。为了满足这些需求,需要指定以下 BlobCache 属性:

<BlobCache location="C:\blobcache" path="\.(gif|jpg|png|css|js|htc)$ " maxSize="100" max-age="86400" enabled="true"/>

请注意,必须在服务器场中的每台 Web 服务器上对 Web.config 文件进行此更改。大多数情况下,BLOB 缓存将立即开始运行,但在实施这些更改时使用 iisreset 命令是最安全的。以下屏幕快照显示的是之前显示的页面请求的 Fiddler 数据,但只启用了 BLOB 缓存,如下所述。

Fiddler 工具结果

请注意,/SiteCollectionImages 库中的所有项目此时具有的 HTTP 状态代码为 200,这表示已成功下载这些项目。另外,这些项目此时都有一个关联的缓存指令,用于指定它们在一天(86,400 秒)内不会到期。如果再次请求页面,则 Fiddler 将显示不重新请求任何图片;因此,该页面的服务请求总数已从 44 减少为 3,而这剩余的 3 个请求中的两个请求只是 Web 服务器和客户端应用程序之间出现的 NTLM 身份验证协商。下图显示了重新请求页面时的 Fiddler 数据。

Fiddler 工具结果

使用 BLOB 缓存时的其他注意事项

在使用 BLOB 缓存时,您还要注意以下事项:

  • 它需要您额外执行一些配置任务,因为您必须更新每台 Web 服务器上的 Web.config 文件。不过,从获得好处来看,这样做是值得的。

  • 调查网站内容并确定是否有其他文件类型也应接受缓存处理。.htc 文件就是一个很好的示例。由于大多数发布网站中都使用了 .htc 文件,您应将该文件类型添加到要缓存的文件类型的列表中。

  • BLOB 缓存只能用来处理存储在 SharePoint 库中的项目;而不能用来缓存其他源中的内容。

  • 某些列表在默认情况下对匿名用户不可用。如果有匿名用户访问网站,则必须手动为以下列表配置权限才能缓存其项目:

    • 母版页样式库

    • 样式库

在使用 BLOB 缓存时,还需了解另外两个配置选项。第一个配置选项用来清除 BLOB 缓存。如果必须为特定网站清除缓存,则可以浏览到相关的网站集,然后依次单击“网站操作”、“网站设置”和“修改所有网站设置”菜单。在网站集管理任务列表中,单击“网站集对象缓存链接”。在“重置基于磁盘的缓存”部分,选中“强制此服务器重置其基于磁盘的缓存”复选框,然后单击“确定”。