如何降低來自 CloudFront 的緩慢回應延遲?

1 分的閱讀內容
0

從 Amazon CloudFront 下載物件或影像時,我看到高延遲。接收「X-Cache:Miss from cloudfront」回應的請求載入速度會比接收「X-Cache:Hit from cloudfront」回應的請求慢。為什麼會發生這種情況? 我該如何解決這個問題?

解決方法

當請求傳送至來源時,CloudFront 會傳回「X-Cache:Miss from cloudfront」。從最近的邊緣節點提供請求時,CloudFront 會傳回「X-Cache:Hit from cloudfron」。由於有一道轉送至來源的額外步驟,「Miss」請求的載入速度可能會較慢。

若要避免將請求轉送至來源所產生的延遲,請檢查下列各項內容,以確保可從 CloudFront 邊緣節點提供請求:

  • 請勿轉寄所有標頭、所有 Cookie 或所有查詢字串,因為這會導致 CloudFront 透過請求傳遞,而非快取。
  • 請確認您對於很少變更的靜態內容 (例如 CSS 檔案) 以及經常變更的動態內容 (例如 JavaScript 檔案) 具有個別的快取行為。對於靜態內容,請避免根據來源提供內容不需要的 Cookie、查詢字串或標頭進行快取。
    **注意:**針對 Web 分佈,CloudFront 的預設是在邊緣節點快取物件時不會考慮 Cookie。如果您的來源傳回兩個物件,且它們僅與 Set-Cookie 標頭中的值不同,CloudFront 只會快取物件的一個版本。
  • 針對在 CloudFront 查詢來源之前需要更多快取時間的路徑模式,延伸最小 TTL、最大 TTL 或預設 TTL。
  • 如果您的來源使用 Cache-Control 標頭,請確認這些指令與發佈設定的最小 TTL、最大 TTL 或預設 TTL 一致。
  • 如果您的來源使用 Expires 標頭,請確認標頭允許 CloudFront 視需要快取回應。
  • 確認您的原始伺服器為 Date 和 Last-Modified 標頭欄位設定有效且正確的值。
  • 限制對物件無效判定的使用。僅在必要時執行無效判定。
  • 檢查請求物件的頻率。如果不經常請求物件,CloudFront 可能會從邊緣節點移除該物件。

如果您正在提供動態內容,而且您預期為您的請求提供「X-Cache:Miss from cloudfront」回應,請考慮下列事項以降低延遲,而不使用快取:

  • 設定更多在地理位置上更接近申請者的原始伺服器。然後,設定單一延遲型路由 DNS 記錄 (例如 origin-latencybased-dnsrecord.example.com),以解決這些伺服器的問題。在 CloudFront 中,將 DNS 名稱 (例如 origin-latencybased-dnsrecord.example.com) 設定為您的分佈來源。此組態允許 CloudFront 根據請求所在的邊緣節點,以最低延遲從原始伺服器擷取內容。如果您使用 Amazon Route 53 做為 DNS 供應商,請參閱在 Amazon Route 53 中將其他區域新增至您的延遲型路由
  • 增加針對 CloudFront 來源保持連線的閒置逾時。此值指定 CloudFront 在關閉連線之前,與原始伺服器維持閒置連線的時間長度。預設的保持連線閒置逾時為五秒,但如果原始伺服器支援逾時,您可以設定更高的值至 60 秒。如果您的發佈將動態內容的請求轉送至來源,則增加逾時值有助於降低延遲。這是因為 CloudFront 不必為每個請求建立新的連線。
    **注意:**一個來源可以有多個 IP 地址指派給它。若要跨多個來源 IP 地址使用持續連線,CloudFront 仰賴更高的請求率和增加請求頻率。這是因為請求會跨來源 IP 地址路由循環配置資源,而且每個 IP 地址的連線都會持續。

相關資訊

增加從 CloudFront 邊緣快取 (快取命中率) 提供的請求比例

我應該提供 AWS Support 哪些資訊以診斷 CloudFront Web 分佈延遲問題?

管理內容在邊緣快取中停留的時間長度 (到期)

使用 Amazon S3 主控台將標頭新增至物件

AWS 官方
AWS 官方已更新 2 年前