如何最佳化Dispatcher快取?

本文提供最佳化Dispatcher快取的各種方法的詳細說明。 它進一步說明啟用TTL (「存留時間」或有效期)樣式失效、停用Dispatcher排清代理程式、重新擷取Dispatcher排清等功能的步驟。

說明 description

環境

Adobe Experience Manager

問題/症狀

本文主要介紹AEM Dispatcher中的最新最佳化以及如何將這些最佳化發揮到極致。 AEM Dispatcher是專為與Adobe Experience Manager一起使用而設計的快取反向Proxy伺服器。 它可以作為現有Web伺服器軟體中的模組來安裝和執行。 撰寫本文時,Apache HTTP Server、Microsoft IIS和iPlanet支援Dispatcher模組

解決方法 resolution

Dispatcher快取如何運作?

在最基本的層面上,AEM Dispatcher是一種反向Proxy,會透過執行快取、快取排清和快取失效來運作。

如需有關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 (網頁伺服器層級的伺服器端包含)和ESI (CDN層級的Edge端包含)來快取不同時段的不同頁面部分。

  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:使用者代理程式 標頭 。在 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 可設定標題,網頁伺服器本身則不行。  請注意,執行此操作時,您需要開始從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 Flush UI。 此工具可安裝在作者執行個體上。 它為使用者提供了一個 UI,他們可以在其中執行手動快取排清請求。

I. 啟用 TTL (「存留時間」或有效期) 樣式失效的步驟:

  1. 修改AEM應用程式中的原始程式碼,針對尚未設定的所有要求傳送 Cache-Control 標頭和 Last-Modified
  2. 安裝Dispatcher 4.1.11或更新版本。
  3. 在網站的任何伺服器陣列設定中設定 /enableTTL 1
  4. 設定 /標題 設定以快取 Cache-ControlLast-Modified 標題。
  5. 重新啟動網頁伺服器。

II. 在發佈執行個體上停用Dispatcher排清代理程式:

Dispatcher現在將使用Cache-Control標頭來控制快取檔案的失效。  既然是這種情況,則不再需要從發佈執行個體中排清Dispatcher。

  1. 前往每個發佈執行個體上的/etc/replication/agents.publish.html。
  2. 前往每個排清代理程式的設定並停用該代理程式。

III. 允許來自作者執行個體的手動Dispatcher排清請求:

由於已停用排清代理程式,您將完全依賴 Cache-Control 標頭來控制何時在Dispatcher上重新整理內容。  您仍然可以允許使用者核發Dispatcher快取的手動排清:

  1. 在作者執行個體上安裝 ACS Commons - Dispatcher Flush UI
  2. 在作者執行個體上設定排清代理程式。
  3. 在每個代理程式設定中,設定 觸發器 =>   忽略預設的 選項為已啟用。 此選項會使得排清代理程式忽略使用者何時在 AEM UI 中按一下 (取消) 發佈 或者 (取消) 啟動

正在重新擷取Dispatcher Flush

為了最佳化Dispatcher排清請求,所有Dispatcher排清代理程式都應該啟用稱為重新擷取排清的功能。

若要啟用重新擷取Dispatcher Flush,請執行以下操作:

  1. 前往  http://aemhost:port/crx/packmgr/index.jsp  並以管理員身分登入。

  2. 此處下載套件。

  3. 將套件上傳並安裝到封裝管理員。

  4. 前往Dispatcher排清代理程式設定。 例如  /etc/replication/agents.author/flush.html

  5. 按一下 編輯

  6. 設定以下內容

    • 序列化類型 = 重新擷取 Dispatcher Flush
    • 延伸 =>   HTTP方法 = POST
  7. 按一下 儲存

注意 — 上面安裝的套件只是一個基本範例。 若要自訂和最佳化重新擷取排清,您可以修改它傳送的 URI 清單。 程式碼是開放原始碼,並可以在此處找到。  程式碼會將URI清單當作引數新增到請求內文中,告知Dispatcher要重新擷取哪些路徑。  您可以根據應用程式需求新增更多路徑,以最佳化網站的快取功能。

重新擷取排清的詳細說明

通常Dispatcher Flush的運作方式是刪除檔案:

  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