如何最佳化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的詳細資訊,請參閱相關連結:
- Dispatcher運作及安裝方式。
- Dispatcher中可用的組態選項。
- 有關Dispatcher運作原理的網路研討會 — 請注意,簡報中的某些資訊是根據舊版本的Dispatcher。
- 有關Dispatcher功能、CDN使用和安全性的Gems網路研討會。
- 有關Dispatcher中新功能的Gems工作階段(v4.1.9之後)。
最佳化Dispatcher快取
以下是一些最佳化Dispatcher快取的方法:
-
快取幾乎所有內容 — 這表示快取使用者多次請求的任何內容。
-
快取不同時段的個人化內容 — 如果您的網站有個人化內容,請考慮在您的AEM應用程式中使用Apache Sling Dynamic Include,以利用Ajax (瀏覽器層級的非同步JavaScript和XML呼叫)、SSI (網頁伺服器層級的伺服器端包含)和ESI (CDN層級的Edge端包含)來快取不同時段的不同頁面部分。
-
永遠不要刪除即時Dispatcher上的Dispatcher快取 — 如果Dispatcher正在提供即時內容並且您刪除快取,則會導致大量請求返回AEM。 因此,絕不應該在即時Dispatcher上刪除Dispatcher快取。
-
裝填快取 — 在刪除Dispatcher快取之前,先從負載平衡器拿掉Dispatcher,刪除快取,然後執行Web編目程式工具以在Dispatcher上快取檔案,然後再將其放在負載平衡器上。
-
快取錯誤頁面 — 利用DispatcherPassError 1 (Apache Web Server特定)指令從Dispatcher快取中提供錯誤頁面,例如404。
-
GZip會壓縮所有檔案型別,預先壓縮的檔案除外 — 在Apache Web Server中,可以使用mod_deflate,但請確定未設定 Vary:使用者代理程式 標頭 。在 Microsoft IIS 中,請使用動態壓縮。
Apache設定範例(僅指定特定內容型別以避免預先壓縮檔案型別):
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
-
啟用/cache設定中的/serveStaleOnError — 當AEM執行個體出現錯誤時提供舊快取檔案。
-
將/gracePeriod 新增至/cache設定 — 定義在最後一個內容發佈事件(「啟動」)之後仍可從快取中提供過期、自動失效的資源的秒數。 這減少了在大型內容發佈活動 (例如「樹啟動」) 期間返回發佈執行個體的請求數量。
-
將規則新增至/ignoreUrlParams — 忽略應用程式不需要或不使用的查詢字串引數。 即使存在查詢字串,這也允許快取 URL。
-
快取Cache-Control和Last-Modified回應標頭 — 使用 /標頭 設定來快取HTTP回應標頭 Cache-Control 和 Last-Modified (和/或 ETag 標頭(如果您從AEM傳送)。 這有助於在 CDN 和瀏覽器層面簡化和最佳化快取。 快取這些標題使得只有 AEM 可設定標題,網頁伺服器本身則不行。 請注意,執行此操作時,您需要開始從AEM應用程式傳送標題。
-
快取內容的時間儘可能拉長 及 減少返回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 (「存留時間」或有效期) 樣式失效的步驟:
- 修改AEM應用程式中的原始程式碼,針對尚未設定的所有要求傳送 Cache-Control 標頭和 Last-Modified 。
- 安裝Dispatcher 4.1.11或更新版本。
- 在網站的任何伺服器陣列設定中設定 /enableTTL 1。
- 設定 /標題 設定以快取 Cache-Control 和 Last-Modified 標題。
- 重新啟動網頁伺服器。
II. 在發佈執行個體上停用Dispatcher排清代理程式:
Dispatcher現在將使用Cache-Control標頭來控制快取檔案的失效。 既然是這種情況,則不再需要從發佈執行個體中排清Dispatcher。
- 前往每個發佈執行個體上的/etc/replication/agents.publish.html。
- 前往每個排清代理程式的設定並停用該代理程式。
III. 允許來自作者執行個體的手動Dispatcher排清請求:
由於已停用排清代理程式,您將完全依賴 Cache-Control 標頭來控制何時在Dispatcher上重新整理內容。 您仍然可以允許使用者核發Dispatcher快取的手動排清:
- 在作者執行個體上安裝 ACS Commons - Dispatcher Flush UI。
- 在作者執行個體上設定排清代理程式。
- 在每個代理程式設定中,設定 觸發器 =
>
忽略預設的 選項為已啟用。 此選項會使得排清代理程式忽略使用者何時在 AEM UI 中按一下 (取消) 發佈 或者 (取消) 啟動。
正在重新擷取Dispatcher Flush
為了最佳化Dispatcher排清請求,所有Dispatcher排清代理程式都應該啟用稱為重新擷取排清的功能。
若要啟用重新擷取Dispatcher Flush,請執行以下操作:
-
前往 http://aemhost:port/crx/packmgr/index.jsp 並以管理員身分登入。
-
從此處下載套件。
-
將套件上傳並安裝到封裝管理員。
-
前往Dispatcher排清代理程式設定。 例如 /etc/replication/agents.author/flush.html
-
按一下 編輯。
-
設定以下內容
- 序列化類型 = 重新擷取 Dispatcher Flush
- 延伸 =
>
HTTP方法 = POST
-
按一下 儲存。
注意 — 上面安裝的套件只是一個基本範例。 若要自訂和最佳化重新擷取排清,您可以修改它傳送的 URI 清單。 程式碼是開放原始碼,並可以在此處找到。 程式碼會將URI清單當作引數新增到請求內文中,告知Dispatcher要重新擷取哪些路徑。 您可以根據應用程式需求新增更多路徑,以最佳化網站的快取功能。
重新擷取排清的詳細說明
通常Dispatcher Flush的運作方式是刪除檔案:
- 觸控式.stat檔案
- 刪除/content/foo。*
- 刪除/content/foo/_jcr_content
由於在步驟2中刪除檔案,下次使用者請求/content/foo.html或/content/foo.json之類的檔案時,當「重新擷取」檔案時,隨後也將對同一檔案的請求傳送到發佈執行個體,直到已快取檔案。 對於緩慢回應或高流量的頁面 (例如首頁頁面),這可能會導致溢出發佈執行個體層。
若要解決此問題,請啟用Dispatcher的一項稱為重新擷取的功能。 此功能可讓您傳送Dispatcher應主動「重新擷取」並取代而不是刪除的URI清單。
如需它如何運作以及如何設定的示範,請參閱 22:41-27:05 (在此簡報錄音中)。