我觀察到 Amazon CloudFront 的回應延遲增加了。如何識別原因並減少延遲?
簡短描述
若要疑難排解 CloudFront 的延遲,請先識別下列哪些事件導致延遲:
- 請求在用戶端和 CloudFront 邊緣站點之間傳送所花費的時間。這包括網域名稱系統 (DNS) 查閱程序以及 TCP 和 SSL/TLS 交涉。
- 請求在 CloudFront 和原始伺服器之間傳送所花費的時間。這包括原始 DNS 查閱程序、與原始伺服器的 TCP 和 SSL/TLS 交涉,以及原始處理和回應物件所花費的時間。
然後,針對造成最大延遲的事件,執行疑難排解步驟。
解決方案
識別造成 CloudFront 延遲的事件:
若要識別造成 CloudFront 延遲的事件,請執行下列其中一個動作:
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-taken 和 time-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 的緩慢回應延遲?
如何對託管在 Amazon S3 上,並透過 CloudFront 提供服務的靜態網站延遲問題進行疑難排解?
應向 AWS Support 提供哪些資訊以診斷 CloudFront Web 分佈延遲問題?
如何確定是什麼導致了 API Gateway 中邊緣最佳化 API 端點的請求延遲?