如何疑難排解並減少 CloudFront 增加的延遲?

上次更新日期:2022 年 6 月 2 日

我觀察到 Amazon CloudFront 的回應延遲增加了。如何識別原因並減少延遲?

簡短描述

若要疑難排解 CloudFront 的延遲,請先識別下列哪些事件導致延遲:

  • 請求在用戶端和 CloudFront 邊緣站點之間傳送所花費的時間。這包括網域名稱系統 (DNS) 查閱程序以及 TCP 和 SSL/TLS 交涉。
  • 請求在 CloudFront 和原始伺服器之間傳送所花費的時間。這包括原始 DNS 查閱程序、與原始伺服器的 TCP 和 SSL/TLS 交涉,以及原始處理和回應物件所花費的時間。

然後,針對造成最大延遲的事件,執行疑難排解步驟。

解決方案

識別造成 CloudFront 延遲的事件:

若要識別造成 CloudFront 延遲的事件,請執行下列其中一個動作:

  • 執行下列 cURL 命令:
curl -w "DNS_resolution: %{time_namelookup}| TCP_negotiation_time: %{time_connect}| SSL_negotiation_time: %{time_appconnect}| TTFB: %{time_starttransfer}| Total time: %{time_total} \n" -o /dev/null -vsL https://www.example.com

注意:將 example.com 換成您的 CloudFront 網域名稱或備用網域名稱 (CNAME) 和 URL 路徑。

  • 在 Web 瀏覽器的開發人員工具中,檢查網路請求的每個階段需花費多久時間。例如,如果您使用的是 Mozilla Firefox,則 [時刻] 標籤會提供此資訊。
  • 根據每個事件或請求的 time-taken,請參閱本文中的相關解決方案章節。

    如果您觀察到過去發生的延遲,請檢查 CloudFront 存取記錄中的 time-takentime-to-first-byte 欄位。CloudFront 存取記錄不會記錄用戶端進行 DNS 查閱程序和 TCP 和 SSL/TLS 交涉所花費的時間

    減少 DNS 解析的延遲

    • 提高用戶端 DNS 中的 DNS 快取時間。
    • 提高本機 DNS 伺服器中快取的存留時間 (TTL)
    • 提高 DNS 註冊機構/供應商中 DNS 記錄上的 TTL
    • 如果您的網際網路服務供應商提供的解析程式 DNS 伺服器導致延遲,請考慮使用公有 DNS 伺服器。

    減少 TCP 和 SSL/TLS 中的延遲 - 交涉時間

    • 檢查您的區域網路頻寬和網際網路頻寬。
    • 檢查您的網際網路伺服器供應商或路由器是否有任何網路中斷。
    • 透過您的網際網路服務供應商或網路路由,將您的區域網路效能最佳化。
    • 確認您使用的是正確的 DNS 解析程式,可讓您的 Web 瀏覽器找到最接近且正確的 POP 位置。
    • 若要改善 HTTPS 網站效能,請保持簡短的認證鏈。
    • 延遲可能是由防火牆、Proxy 或本機路由器造成的。若要確定哪些項目造成延遲,請從系統執行下列 MTR 命令。如需詳細資訊,請參閱使用 MTR 診斷網路問題
    mtr -rw example.com --no-dns
    注意:將 example.com 換成您的網域名稱。

    減少第一個位元組所用時間 (TTFB) 和總使用時間 (TTL) 的延遲時間

    如果 CloudFront 傳回 "X-Cache:Hit from cloudfront" (X-Cache:從 CloudFront 命中)

    從最近的邊緣站點發出請求時,CloudFront 會傳回 "X-Cache:Hit from cloudfront" (X-Cache:從 CloudFront 命中)。若要減少延遲:

    如果 CloudFront 傳回 "X-Cache:Miss from cloudfront" (X-Cache:從 CloudFront 未命中)

    如果 CloudFront 在將請求傳送給原始位置時傳回 "X-Cache:Miss from cloudfront" (X-Cache:從 CloudFront 未命中)。若要減少延遲:

    • 縮短 CloudFront 邊緣站點到原始位置之間的往返時間 (RTT)。如果來自 CloudFront 邊緣站點的請求傳送到最近的原始位置,則 RTT 會較少。但是,如果請求來自地理位置遠離原始的邊緣站點,則 TTFB 會受到影響。若要最佳化 RTT,請在離使用者更近的多個地區複製原始伺服器。然後,設定原始網域名稱的 DNS,以便根據延遲或地理位置,將請求路由到原始伺服器。如果您使用 Amazon Route 53 做為 DNS 供應商,請參閱選擇路由政策以取得詳細資訊。
    • 開啟 CloudFront 自動壓縮功能來壓縮檔案,並降低下載速度。如果 CloudFront 自動壓縮不支援您的檔案格式,請在原始位置預先壓縮該檔案,並使用 Content-Encoding 標頭提供該檔案。
    • 透過啟用原始延遲指標,檢查從原始位置到 CloudFront 的延遲。注意:適用標準 CloudWatch 費率
    • 開啟 CloudFront Origin Shield
    • 新增開啟 Server-Timing 標頭功能的回應標頭政策。此功能可協助您了解在 CloudFront 與原始之間造成延遲的事件。