各个 Dispatcher 版本与 AEM 相互独立。如果单击以前版本 AEM 文档中嵌入的 Dispatcher 文档链接,可能会重定向到此页面。
调度程序是Adobe Experience Manager的缓存和/或负载平衡工具,可与企业级Web服务器结合使用。
部署调度程序的过程独立于所选的Web服务器和操作系统平台:
要更好地了解Dispatcher如何与AEM协作,请执行以下操作:
根据需要使用以下信息:
Dispatcher 最常见的用法是缓存来自 AEM 发布实例的响应,从而提高面向外部发布的网站的响应速度和安全性。大部分讨论主要介绍这种情况。
但是,Dispatcher 也可以用于提高创作实例的响应速度,尤其是在有大量用户编辑和更新网站的情况下。有关这种情况的详细信息,请参阅下面的将 Dispatcher 与作者服务器一起使用。
发布 Web 有两种基本方法:
Dispatcher 可帮助实现既快速又动态的环境。它在静态 HTML 服务器(比如 Apache)中使用的目的是:
这意味着:
处理静态内容的速度和容易度与在静态 Web 服务器上的完全相同;此外,您还可以使用为静态 Web 服务器提供的管理和安全工具。
根据需要生成动态内容,完全没有必要再减慢系统速度。
Dispatcher 包含根据动态站点内容生成和更新静态 HTML 的机制。您可以详细指定将哪些文档存储为静态文件,哪些文档始终通过动态方式生成。
本节将阐明其中运用的原理。
静态 Web 服务器(如 Apache 或 IIS),负责向网站的访客提供静态 HTML 文件。静态页面只创建一次,因此针对每个请求都将交付相同的内容。
这个流程非常简单,因此相当高效。如果访客请求一个文件(例如 HTML 页面),通常将直接从内存中获取该文件,在最坏的情况下,也可以从本地驱动器读取该文件。静态 Web 服务器问世已有相当长的一段时间,因此有各种各样用于管理和安全管理的工具,而且它们能够很好地与网络基础结构集成。
如果您使用内容管理服务器(如 AEM),则由高级布局引擎处理访客的请求。该引擎从存储库中读取内容,包括样式、格式和访问权限,并将内容转换为根据访客需求和权限定制的文档。
这使您能够创建更丰富的动态内容,从而提高网站的灵活性和功能性。但是,布局引擎需要比静态服务器更大的处理能力,因此,如果许多访客同时使用系统,则此设置的速度可能会减慢。
缓存目录:对于执行缓存,Dispatcher 模块利用 Web 服务器的功能来提供静态内容。Dispatcher 将缓存文档放在 Web 服务器的文档根目录下。
如果没有配置 HTTP 标头缓存,则 Dispatcher 仅存储页面的 HTML 代码 - 它不会存储 HTTP 标头。如果您在网站内使用不同的编码,这可能是个问题,因为这些编码可能会丢失。要启用 HTTP 标头缓存,请参阅配置 Dispatcher 缓存。
将 Web 服务器的文档根目录放置在网络连接存储 (NAS) 上,会导致性能下降。此外,如果在多个 Web 服务器之间共享位于 NAS 上的文档根目录,则执行复制操作时可能会出现间歇性锁定。
Dispatcher 使用与请求的 URL 相同的结构存储缓存文档。
文件名长度可能存在操作系统级别的限制;例如,您的 URL 中带有许多选择器。
Dispatcher 有两种主要方法可用于在对网站进行更改后更新缓存内容。
在内容更新中,有一个或多个 AEM 文档发生了变更。AEM 向 Dispatcher 发送联合请求,以相应地更新缓存:
应注意以下几点:
自动失效可自动使部分缓存失效 - 不会实际删除任何文件。在每次内容更新时,都会处理所谓的 statfile,因此其时间戳记可以反映最新的内容更新日期。
Dispatcher 有一个遵循自动失效机制的文件列表。当请求该列表中的文档时,Dispatcher 会将缓存文档的日期与 statfile 的时间戳记进行比较:
同样,应当注意这几点:
可以定义配置文件中Dispatcher缓存的文档。 Dispatcher 根据可缓存文档列表检查请求。如果文档不在此列表中,则 Dispatcher 从 AEM 实例中请求该文档。
在以下情况下,Dispatcher 始终直接从 AEM 实例请求文档:
GET 或 HEAD(针对 HTTP 标头)方法可由 Dispatcher 缓存。有关响应头缓存的其他信息,请参阅缓存HTTP响应头部分。
Dispatcher 将缓存文件存储在 Web 服务器上,当做静态网站的一部分。如果用户请求一个可缓存的文档,则 Dispatcher 检查该文档是否存在于 Web 服务器的文件系统中:
为确定文档是否为最新状态,Dispatcher 将执行两个步骤:
没有配置为自动失效的文档仍保留在缓存中,直到被实际删除;例如,通过网站上的内容更新。
负载平衡就是在多个 AEM 实例间分发网站的计算负载。
您将获得:
更大的处理能力
在实践中,这意味着 Dispatcher 在多个 AEM 实例之间共享文档请求。由于现在每个实例处理的文档数量减少,您的响应速度将会加快。Dispatcher 保留每个文档类别的内部统计信息,以便能够估计负载并高效分发查询。
更大的故障保护范围
如果 Dispatcher 未收到实例的响应,它将自动将请求中继到另一个实例。因此,如果一个实例变得不可用,唯一的结果就是站点速度减慢,这与计算能力损失成正比。但是,所有服务都将继续。
您还可以在同一个静态 Web 服务器上管理不同的网站。
负载平衡可以有效分布负载,而缓存有助于减少负载。因此,在设置负载平衡之前,请尝试优化缓存并降低整体负载。良好的缓存机制可能会提高负载平衡器的性能,或者弃用不必要的负载平衡。
虽然单个 Dispatcher 通常就能够使可用 Publish 实例的容量饱和,但对于某些极少数的应用程序而言,最好在两个 Dispatcher 实例之间额外实施负载平衡。配置多个 Dispatcher 需慎重考虑,因为额外的 Dispatcher 将增加可用 Publish 实例的负载,而且容易降低大多数应用程序的性能。
Dispatcher 保留有关 AEM 每个实例处理文档的速度的内部统计信息。Dispatcher 将根据这些数据估算哪个实例在响应请求时将提供最快的响应速度,以便它在该实例上预留所需的计算时间。
不同类型请求的平均完成时间可能各不相同,因此 Dispatcher 允许指定文档类别。然后在估计计算时间时考虑这些类别。例如,您可以将 HTML 页面和图像区分开来,因为它们的标准响应时间可能相差很多。
如果您使用复杂的搜索功能,则可以为搜索查询创建新的类别。这有助于 Dispatcher 将搜索查询发送到响应最快的实例。这样可以防止速度较慢的实例在收到多个“成本较高的”搜索查询时发生停滞,而其他实例收到“成本较低的”请求。
粘性连接可确保同一个用户的文档全部在 AEM 的同一个实例上撰写。如果您使用个性化的页面和会话数据,这一点很重要。数据存储在该实例上,则同一用户发出的后续请求必须返回到该实例,否则数据就会丢失。
由于粘性连接会限制 Dispatcher 优化请求的能力,因此应仅在需要时使用。您可以指定包含“粘性”文档的文件夹,从而确保该文件夹中每个用户的所有文档都在同一个实例上撰写。
对于使用粘性连接的大多数页面,必须关掉缓存 - 否则无论会话内容是什么,所有用户都将看到相同的页面内容。
对于少数应用程序,可以同时使用粘性连接和缓存;例如,显示将数据写入会话的表单。
在复杂设置中,您可以使用多个 Dispatcher。例如,您可以使用:
在这种情况下,请确保每个请求只通过一个 Dispatcher。一个 Dispatcher 不能处理来自另一个 Dispatcher 的请求。因此,请确保两个 Dispatcher 都能直接访问 AEM 网站。
内容交付网络 (CDN)(如 Akamai Edge Delivery 或 Amazon Cloud Front)从距离最终用户较近的站点交付内容。这样,它可以
作为 HTTP 基础架构组件,CDN 的工作方式与 Dispatcher 非常相似:当 CDN 节点收到请求时,如果可能(缓存中提供该资源,而且是有效的)的话,它将从其缓存响应该请求。否则,它将连接下一个距离最近的服务器,以检索资源并缓存下来,以备响应后续请求(如果适用)。
“下一个距离最近的服务器”取决于您的具体设置。例如,在 Akamai 设置中,请求可以遵循以下路径:
在大多数情况下,Dispatcher 就是下一个服务器,它可以从缓存中提供文档,并影响返回到 CDN 服务器的响应标头。
有许多种方法可以控制 CDN 从 Dispatcher 中缓存以重新获取资源的时间。
显式配置
根据 mime 类型、扩展名、请求类型等,配置特定资源在 CDN 缓存中的保留时间。
到期和缓存控制标头
如果由上游服务器发送,则大多数 CDN 都将采用 Expires:
和 Cache-Control:
HTTP 标头。这可以实现,例如,使用mod_expires Apache模块。
手动失效
CDN 允许通过 Web 界面从缓存中删除资源。
基于 API 的失效
大多数 CDN 还提供允许从缓存中删除资源的 REST 和/或 SOAP API。
在典型的 AEM 设置中,按扩展名和/或路径进行的配置(可通过以上第 1 点和第 2 点实现),使为经常使用但不经常变更的资源(如设计图像和客户端库)设置合理缓存期限成为了可能。在部署新版本时,通常需要手动进行失效操作。
如果将此方法用于缓存受管内容,则意味着仅在配置的缓存期限到期且再次从 Dispatcher 中获取文档后,内容变更才对最终用户可见。
为实现更细粒度的控制,基于 API 的失效允许您在 Dispatcher 缓存失效时使 CDN 的缓存失效。根据CDN API,您可以实施您自己的ContentBuilder和TransportHandler(如果API不是基于REST的),并设置一个复制代理,使用这些代理使CDN缓存失效。
如果将AEM与触屏UI结合使用,则应不缓存作者实例内容。 如果为创作实例启用了缓存,则需要禁用缓存并删除缓存目录的内容。要禁用缓存,应编辑 author_dispatcher.any
文件并修改 /cache
部分的 /rule
属性,如下所示:
/rules
{
/0000
{ /type "deny" /glob "*"}
}
Dispatcher 可在创作实例之前使用以提高创作性能。要配置创作 Dispatcher,请执行以下操作:
在 Web 服务器中安装 Dispatcher(这可以是 Apache 或 IIS Web 服务器,请参阅安装 Dispatcher)。
您可能希望针对正在工作的 AEM 发布实例测试新安装的 Dispatcher,以确保已实现基准正确安装。
现在,确保 Dispatcher 能够通过 TCP/IP 连接到您的创作实例。
将示例的 dispatcher.any 文件替换为随 Dispatcher 下载提供的 author_dispatcher.any 文件。
在文本编辑器中打开 author_dispatcher.any
,并进行以下更改:
/renders
部分的 /hostname
和 /port
更改为指向创作实例。/cache
部分的 /docroot
更改为指向缓存目录。如果您正在将AEM与Touch UI结合使用,请参阅上面的警告。删除您在前面配置的 /cache
> /docroot
目录中的所有现有文件。
重新启动 Web 服务器。
请注意,如果使用提供的 author_dispatcher.any
配置,当您安装影响 /libs
或 /apps
下任何内容的 CQ5 功能包、热修复或应用代码包时,必须删除 Dispatcher 缓存中这些目录下的缓存文件,以确保下次再请求时,能够获取新更新的文件,而不是旧的缓存文件。
如果您使用之前配置的创作 Dispatcher 并启用 Dispatcher 刷新代理,请执行以下操作: