如何优化Dispatcher缓存?

本文提供了有关优化Dispatcher缓存的各种方法的详细说明。 它进一步描述了启用TTL(“生存时间”或到期)样式无效、禁用Dispatcher刷新代理、重新获取Dispatcher刷新等操作的步骤。

描述 description

环境

Adobe Experience Manager

问题/症状

本文重点介绍AEM Dispatcher中的最新优化以及如何最好地利用这些优化。 AEM Dispatcher是专为与Adobe Experience Manager一起使用而设计的缓存反向代理服务器。 它可以作为现有Web服务器软件中的模块安装和运行。 在撰写本文时,Apache HTTP Server、Microsoft IIS和iPlanet支持Dispatcher模块

解决方法 resolution

Dispatcher缓存如何工作?

在最基本的层面上,AEM Dispatcher是一个反向代理,它通过执行缓存、缓存刷新和缓存失效来工作。

有关Dispatcher的更多详细信息,请参阅相关链接:

  1. Dispatcher的工作方式以及如何安装
  2. Dispatcher中可用的配置选项
  3. 关于Dispatcher如何工作的网络研讨会 — 请注意,演示文稿中的某些信息基于旧版本的Dispatcher。
  4. 有关Dispatcher功能、CDN使用和安全性的Gems网络研讨会
  5. 有关Dispatcher中新功能的Gems会话(v4.1.9之后)

优化Dispatcher缓存

以下是优化Dispatcher缓存的一些方法:

  1. 缓存几乎所有内容 — 这意味着缓存用户多次请求的任何内容。

  2. 缓存不同时间段的个性化内容 — 如果您的网站有个性化内容,请考虑在您的AEM应用程序中使用Apache Sling Dynamic Include以利用Ajax(浏览器级别的异步JavaScript和XML调用)、SSI(Web服务器级别的服务器端包含)和ESI(CDN级别的Edge端包含)来缓存不同时间段的页面的不同部分。

  3. 永远不要删除实时Dispatcher上的Dispatcher缓存 — 如果Dispatcher正在提供实时内容并且您删除了缓存,则会导致大量请求返回AEM。  因此,绝不应该在实时Dispatcher上删除Dispatcher缓存。

  4. 填充缓存 — 在删除Dispatcher缓存之前,先从负载平衡器中提取Dispatcher,删除缓存,然后运行网络爬虫工具在Dispatcher上缓存文件,然后再将其放在负载平衡器中。

  5. 缓存错误页面 — 利用DispatcherPassError 1 (Apache Web Server特定)指令从Dispatcher缓存中提供错误页面,例如404。

  6. GZip压缩所有文件类型,预压缩文件除外 — 在Apache Web Server中,可以使用mod_deflate,但请确保未设置 Vary: User-Agent 标头 。在 Microsoft IIS 中,使用动态压缩

    Apache配置示例(仅指定某些内容类型以避免预压缩文件类型):

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript

  7. 在/cache配置中启用/serveStaleOnError — 当AEM实例出现错误时提供旧缓存文件。

  8. /gracePeriod 添加到/cache配置 — 定义在最后一次内容发布事件(“激活”)之后,过时的、自动失效的资源仍可从缓存中获得服务的秒数。这减少了在大型内容发布活动(例如“树激活”)期间返回发布实例的请求数量。

  9. 将规则添加到/ignoreUrlParams — 忽略应用程序不需要或不使用的查询字符串参数。即使存在查询字符串,也允许缓存 URL。

  10. 缓存Cache-Control和Last-Modified响应标头 — 使用 /标头 配置缓存HTTP响应标头 Cache-ControlLast-Modified (和/或 ETag 标头(如果您从AEM发送)。这有助于在 CDN 和浏览器级别简化和优化缓存。缓存这些标头使得只有 AEM 设置标头,而不是 Web 服务器本身。  请注意,执行此操作时,您需要开始从AEM应用程序发送标头。

  11. 尽可能长时间地缓存内容减少返回AEM的请求 — 通过启用所有刷新代理上的重新获取刷新功能优化刷新请求。 请参阅下面标题为​ 重新获取Dispatcher Flush ​的部分。 或使用 /enableTTL 并设置 Cache-Control: max-age=… 标头来尽可能长时间地缓存文件。有关此话题的详细信息,请参阅以下内容

使用TTL

从Dispatcher版本4.1.11开始,可以在任何文件配置中设置/enableTTL 1。  此设置使Dispatcher遵守HTTP Cache-Control响应标头中设置的缓存过期时间。  换句话说,Dispatcher的功能类似于CDN,当文件过期时,会发生主要形式的缓存失效。  一旦您实施此操作,并开始发送 Cache-Control: max-age=…  对于来自AEM的所有响应,您可以在发布实例中安全地禁用Dispatcher刷新代理。

在发布实例上禁用刷新代理后,您可能仍希望能够刷新Dispatcher缓存。在这种情况下,您可以使用ACS Commons – Dispatcher 刷新 UI。此工具安装在作者实例上。它为用户提供 UI,用户可以在其中执行手动缓存刷新请求。

一、启用 TTL(“生存时间”或到期)样式失效的步骤:

  1. 修改AEM应用程序中的源代码,针对尚未设置的所有请求发送 Cache-Control 标头和 Last-Modified
  2. 安装Dispatcher 4.1.11或更高版本。
  3. 在站点的任何场配置中设置 /enableTTL 1
  4. 设置 /标头 配置以缓存 Cache-ControlLast-Modified 标头。
  5. 重新启动 Web 服务器。

二、在发布实例上禁用Dispatcher刷新代理:

Dispatcher现在将使用Cache-Control标头来控制缓存文件的失效。  既然是这种情况,则不再需要从发布实例中刷新Dispatcher 。

  1. 前往每个发布实例上的/etc/replication/agents.publish.html 。
  2. 前往每个刷新代理的配置并禁用该代理。

三、允许来自创作实例的手动Dispatcher刷新请求:

现在刷新代理已禁用,您将完全依赖 Cache-Control 标头来控制何时在Dispatcher上刷新内容。  您仍然可以允许用户手动刷新Dispatcher缓存:

  1. 安装ACS Commons – 作者实例上的 Dispatcher 刷新 UI
  2. 在作者实例上配置刷新代理。
  3. 在每个代理配置中,设置 触发器 =>   忽略默认的 选项已启用。 此选项使用户在 AEM UI 中单击 (取消)发布 或者 (取消)激活 时忽略刷新代理。

正在重新获取Dispatcher刷新

为了优化Dispatcher刷新请求,所有Dispatcher刷新代理都应该启用一个称为重新获取刷新的功能。

要启用重新获取Dispatcher刷新,请执行以下操作:

  1. 前往 http://aemhost:port/crx/packmgr/index.jsp 并以管理员身份登录。

  2. 此处下载文档包。

  3. 将包上载并安装到包管理器。

  4. 转到Dispatcher刷新代理配置。 例如:/etc/replication/agents.author/flush.html

  5. 单击 编辑

  6. 设置以下内容

    • 序列化类型=重新获取 Dispatcher 刷新
    • 扩展 =>   HTTP方法 = POST
  7. 单击 保存

注意 — 上面安装的软件包只是一个基本示例。要自定义和优化重新获取刷新,您可以修改它发送的 URI 列表。代码是开源的,可见此处。  该代码会将URI列表作为参数添加到请求正文中,告诉Dispatcher要重新获取哪些路径。  您可以根据应用程序要求添加更多路径,以优化站点的缓存功能。

重新获取刷新的详细说明

通常,Dispatcher刷新通过删除文件来工作:

  1. 触控.stat文件
  2. 删除/content/foo。*
  3. 删除/content/foo/_jcr_content

由于文件在步骤2中被删除,下次用户请求/content/foo.html或/content/foo.json等文件时,当“重新获取”文件时,随后对同一文件的请求也将发送到发布实例,直到文件被缓存。对于响应缓慢或流量较大的页面(例如主页),这可能会导致发布实例层泛滥。

要解决此问题,请启用Dispatcher的一项称为重新获取的功能。  此功能允许您发送Dispatcher应主动“重新获取”并替换而不是删除的URI列表。

请参阅该演示录音中的 22:41-27:05,获取有关它如何工作以及如何配置的演示。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f