如何优化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 中可用的配置选项。
- 关于 Dispatcher 如何工作的网络研讨会 – 请注意,演示文稿中的某些信息基于旧版本的 Dispatcher。
- 关于 Dispatcher 功能、CDN 使用和安全性的 Gems 网络研讨会。
- 关于 Dispatcher 中新功能的 Gems 会话(v4.1.9 之后)。
优化Dispatcher缓存
以下是一些优化Dispatcher缓存的方法:
-
缓存几乎所有内容 — 这意味着缓存用户多次请求的任何内容。
-
缓存不同时段的个性化内容 — 如果您的网站有个性化内容,请考虑使用 Apache Sling Dynamic包含 在AEM应用程序中利用Ajax(浏览器级别的异步JavaScript和XML调用)、SSI(Web服务器级别的服务器端包含)和ESI(CDN级别的边缘端包含),在不同时段缓存页面的不同部分。
-
永远不要删除实时 Dispatcher 上的 Dispatcher 缓存 – 如果 Dispatcher 正在提供实时内容并且您删除了缓存,这将导致大量请求返回 AEM。因此,绝不应该在实时 Dispatcher 上删除 Dispatcher 缓存。
-
填充缓存 — 在删除Dispatcher缓存之前,先从负载平衡器中提取Dispatcher,删除缓存,然后运行Web爬虫工具在Dispatcher上缓存文件,然后再将其放在负载平衡器中。
-
缓存错误页 — 利用 DispatcherPassError 1 (Apache Web Server特定)指令,用于从Dispatcher缓存中提供错误页面,例如404。
-
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
-
启用 /serveStaleOnError 在/cache配置中 — 当AEM实例出现错误时提供旧缓存文件。
-
添加 /gracePeriod 到/cache配置 — 定义在最后一次内容发布事件(“激活”)之后,过时的、自动失效的资源仍可从缓存中获得服务的秒数。这减少了在大型内容发布活动(例如“树激活”)期间返回发布实例的请求数量。
-
将规则添加到 /ignoreUrlParams — 忽略应用程序不需要或不使用的查询字符串参数。即使存在查询字符串,也允许缓存 URL。
-
缓存Cache-Control和Last-Modified响应标头 — 使用 /headers 缓存HTTP响应标头的配置 Cache-Control 和 上次修改时间 (和/或 ETag 标头(如果您的从AEM发送)。这有助于在 CDN 和浏览器级别简化和优化缓存。缓存这些标头使得只有 AEM 设置标头,而不是 Web 服务器本身。请注意,执行此操作时,您需要开始从 AEM 应用程序发送标头。
-
尽可能长时间地缓存内容 和 减少返回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(“生存时间”或到期)样式失效的步骤:
- 修改AEM应用程序中要发送的源代码 Cache-Control 标题和 上次修改时间 适用于尚未设置的所有请求。
- 安装Dispatcher 4.1.11或更高版本。
- 设置 /enableTTL 1 在站点的.any场配置中。
- 设置 /headers 用于缓存的配置 Cache-Control 和 上次修改时间 标头。
- 重新启动 Web 服务器。
二、在发布实例上禁用 Dispatcher 刷新代理:
Dispatcher现在将使用Cache-Control标头来控制缓存文件的失效。既然是这种情况,则不再需要从发布实例中刷新 Dispatcher 。
- 前往每个发布实例上的/etc/replication/agents.publish.html 。
- 前往每个刷新代理的配置并禁用该代理。
三、允许来自作者实例的手动 Dispatcher 刷新请求:
现在刷新代理已禁用,您将完全依赖 Cache-Control 标头,用于控制何时在Dispatcher上刷新内容。您仍然可以允许用户手动刷新 Dispatcher 缓存:
- 安装ACS Commons – 作者实例上的 Dispatcher 刷新 UI。
- 在作者实例上配置刷新代理。
- 在每个代理配置中,设置 触发器 =
>
忽略默认值 选项启用。 此选项使用户在 AEM UI 中单击 (取消)发布 或者 (取消)激活 时忽略刷新代理。
重新获取Dispatcher刷新
为了优化Dispatcher刷新请求,所有Dispatcher刷新代理都应该启用一个称为重新获取刷新的功能。
要启用重新获取 Dispatcher 刷新,请执行以下操作:
-
前往 http://aemhost:port/crx/packmgr/index.jsp 并以管理员身份登录。
-
在此处下载文档包。
-
将包上传并安装到包管理器。
-
前往 Dispatcher 刷新代理配置。 例如:/etc/replication/agents.author/flush.html
-
单击 编辑。
-
设置以下内容
- 序列化类型=重新获取 Dispatcher 刷新
- 扩展 =
>
HTTP方法 = POST
-
单击 保存
注意 — 上面安装的软件包只是一个基本示例。要自定义和优化重新获取刷新,您可以修改它发送的 URI 列表。代码是开源的,可见此处。该代码将 URI 列表作为参数添加到请求正文中,告诉 Dispatcher 要重新获取哪些路径。 您可以根据应用程序要求添加更多路径,以优化站点的缓存功能。
重新获取刷新的详细说明
通常,调度程序刷新通过删除文件来工作:
- 触控.stat文件
- 删除/content/foo。*
- 删除/content/foo/_jcr_content
由于文件在步骤2中被删除,下次用户请求/content/foo.html或/content/foo.json等文件时,当“重新获取”文件时,随后对同一文件的请求也将发送到发布实例,直到文件被缓存。对于响应缓慢或流量较大的页面(例如主页),这可能会导致发布实例层泛滥。
要解决此问题,请启用 Dispatcher 的一项称为重新获取的功能。此功能允许您发送 Dispatcher 应主动“重新获取”并替换而不是删除的 URI 列表。
请参阅该演示录音中的 22:41-27:05,获取有关它如何工作以及如何配置的演示。