如何优化Dispatcher缓存?

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

描述 description

环境

Adobe Experience Manager

问题/症状

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

解决方法 resolution

Dispatcher缓存如何工作?

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

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

优化Dispatcher缓存

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

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

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

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

  4. 填充缓存   — 在删除Dispatcher缓存之前,先从负载平衡器中提取Dispatcher,删除缓存,然后运行Web爬虫工具在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. 启用 /serveStaleOnError   在/cache配置中 — 当AEM实例出现错误时提供旧缓存文件。

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

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

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

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

使用TTL

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

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

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

  1. 修改AEM应用程序中要发送的源代码  Cache-Control  标题和  上次修改时间  适用于尚未设置的所有请求。
  2. 安装Dispatcher 4.1.11或更高版本。
  3. 设置  /enableTTL 1  在站点的.any场配置中。
  4. 设置  /headers  用于缓存的配置  Cache-Control  和  上次修改时间  标头。
  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 要重新获取哪些路径。  您可以根据应用程序要求添加更多路径,以优化站点的缓存功能。

重新获取刷新的详细说明

通常,调度程序刷新通过删除文件来工作:

  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