View a markdown version of this page

電子商務和市場應用程式的 CloudFront - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

電子商務和市場應用程式的 CloudFront

電子商務或市場應用程式透過單一 CloudFront 分佈提供三種不同的內容類型:靜態資產 (產品影像、CSS、JavaScript)、動態頁面 (產品清單、搜尋結果) 和 API 回應 (購物車、庫存、定價)。每個內容類型都需要不同的快取行為、TTL 和原始伺服器組態,才能平衡新鮮度與效能。

如需適用於市集和電子商務分發的安全控制,請參閱 市場分佈的安全檢查清單。

架構概觀

Marketplace CloudFront 分佈使用多個快取行為,根據 URL 路徑模式將請求路由到正確的原始伺服器。靜態資產是從 Amazon Simple Storage Service (Amazon S3) 提供,而動態內容和 API 請求會轉送到應用程式伺服器前面的 Elastic Load Balancing (Application Load Balancer)。ElastiCache (Valkey) 叢集在 ALB 和資料庫之間提供應用程式層級快取,用於經常存取的產品資料。

分佈架構元件
元件 提供的內容 用途

CloudFront 分佈

所有內容 (單一網域)

全域節點快取、TLS 終止、使用快取行為請求路由

Amazon S3 原始伺服器 (靜態資產)

產品映像、CSS、JS、字型

具有原始存取控制 (OAC) 的耐用物件儲存。具有長 TTLs不可變內容。

ALB 原始伺服器 (動態內容)

產品頁面、搜尋、API 端點

應用程式伺服器的路由。個人化內容TTLs 或無快取。

ElastiCache 叢集 (Valkey)

產品目錄、庫存計數、工作階段資料

ALB 和資料庫之間的應用程式層級快取。經常存取的資料讀取低於毫秒。

電子商務的快取行為

快取行為決定 CloudFront 根據 URL 路徑模式處理請求的方式。對於市集,使用適當的快取政策和 TTLs 為每個內容類型設定個別行為。

建議的快取行為
路徑模式 Origin TTL 快取政策 理由

/static/*

Amazon S3

365 天

CachingOptimized

版本控制的檔案名稱 (例如 app.a1b2c3.js) 允許最大 TTL。永遠不需要快取失效 - 使用新的檔案名稱部署新版本。

/images/*

Amazon S3

30 天

CachingOptimized

產品映像不常變更。當賣方更新映像時,請使用 cache-tag 無效。低於靜態資產的 TTL,因為影像 URLs 可能會重複使用。

/api/products/*

ALB

60 秒

自訂 (包括查詢字串)

產品清單和搜尋 APIs 經常變更,但可容忍短暫過時。在分頁和篩選條件的快取金鑰中包含查詢字串參數。

/api/cart/*

ALB

0 (無快取)

CachingDisabled

購物車操作是使用者特定的,且必須始終到達原始伺服器。完全停用快取。

/api/inventory/*

ALB

5 秒

自訂 (包括查詢字串)

庫存計數會在銷售事件期間快速變更。非常短的 TTL 可防止過度銷售,同時減少原始負載。

Default (*)

ALB

0 (無快取)

CachingDisabled

預設行為會將未快取的請求轉送至應用程式以進行伺服器端轉譯。包含個人化內容 (建議、使用者名稱) 的頁面不應快取在邊緣。

注意

從最特定到最不特定排序快取行為。CloudFront 會依列出的順序評估路徑模式,並使用第一個相符項目。將 放在 /api/cart/*之前/api/*,以確保購物車請求繞過快取。

如需快取行為的詳細資訊,請參閱快取行為設定。

市集內容的 TTL 策略

TTL 組態會決定 CloudFront 在檢查原始伺服器是否有更新之前,提供快取內容的時間長度。根據內容新鮮度如何影響客戶體驗,電子商務應用程式需要不同的 TTL 策略。

不可變資產 (CSS、JS、字型)

設定最大 TTL (365 天)。使用內容雜湊的檔案名稱,讓每個部署建立新的 URLs。永遠不會失效 - 舊版本會在使用者載入新的檔案名稱時自然過期。在原始Cache-Control: public, max-age=31536000, immutable伺服器設定 。

產品映像

將 TTL 設定為 30 天,更新時快取標籤會失效。當賣方上傳新映像時, 會依產品的快取標籤失效,而不是依路徑失效。這只會以受影響的物件為目標,而沒有廣泛的萬用字元失效。在原始Cache-Control: public, max-age=2592000伺服器設定 。

產品目錄 API

將 TTL 設定為 60 秒。產品清單、描述和定價可容忍短暫的過時。這可減少流量尖峰期間的原始負載 (快閃銷售、產品啟動),同時保持資料的合理最新狀態。Cache-Control: public, max-age=60, stale-while-revalidate=30 設定為在 CloudFront 在背景擷取新回應時提供過時的內容。

庫存和定價 API

將 TTL 設定為 5 秒。這些值會經常變更,並影響購買決策。非常短的快取仍會在流量尖峰期間依數量級減少原始伺服器負載,數千名並行使用者會看到相同的 5 秒快取回應,而不是每個命中原始伺服器。

使用者特定內容 (購物車、建議)

停用快取 (TTL = 0)。因使用者而異的內容必須一律到達原始伺服器。如果您錯誤地快取使用者特定的內容,CloudFront 可能會將某個使用者的資料提供給另一個使用者。針對這些行為使用 CachingDisabled受管政策。

原始伺服器組態

靜態資產的 Amazon S3 原始伺服器

使用 Amazon S3 儲存貯體做為產品映像和靜態資產的原始伺服器。設定原始存取控制 (OAC) 以限制對儲存貯體的直接存取 — 所有請求都必須流經 CloudFront。

Amazon S3 原始伺服器設定
設定 Value 理由

原始網域

marketplace-assets.s3.amazonaws.com

使用 Amazon S3 REST API 端點 (而非網站端點) 來支援 OAC。

原始存取

原始存取控制 (OAC)

僅限制對 CloudFront 的儲存貯體存取。防止 S3 URL 直接存取您的資產。

Origin Shield

已啟用 (最接近儲存貯體的區域)

在節點和原始伺服器之間新增集中式快取層。降低 S3 請求成本並改善映像的快取命中率。

連線嘗試

3

預設。對暫時性 S3 錯誤重試。

動態內容的 ALB 原始伺服器

使用 Application Load Balancer 做為動態產品頁面、搜尋和 API 端點的原始伺服器。ALB 路由到您的應用程式伺服器 (Amazon EC2 執行個體、Amazon ECS 任務或使用目標群組的 Lambda 函數)。

ALB 原始伺服器設定
設定 Value 理由

原始網域

ALB DNS 名稱

直接使用 ALB DNS 名稱。請勿使用 IP 地址 — ALB IPs變更。

通訊協定

僅限 HTTPS

加密 CloudFront 與原始伺服器之間的流量。敏感資料 (使用者工作階段、付款資訊) 的必要項目。

原始伺服器自訂標頭

X-Origin-Verify: <secret-value>

限制 ALB 存取來自 CloudFront 的請求。ALB 會檢查此標頭,並拒絕直接存取嘗試。

連線逾時

10 秒

短於預設值 (30 秒)。在原始伺服器問題上快速失敗,而不是讓邊緣連線保持等待。

回應逾時

30 秒

允許複雜搜尋查詢和目錄操作的時間。如果您的 API 有長時間執行的操作,請增加 。

保持連線逾時

5 秒

重複使用 ALB 的連線。減少後續請求的 TLS 交握額外負荷。

使用 ElastiCache (Valkey) 進行應用程式層級快取

CloudFront 會在邊緣快取內容,但需要資料庫查詢的經常存取資料會受益於額外的應用程式層級快取。執行 Valkey 的 ElastiCache 叢集位於應用程式伺服器和資料庫之間,為產品目錄資料、庫存計數和工作階段狀態提供低於毫秒的讀取。

雙層快取策略
Layer 其快取的內容 TTL 快取遺漏行為

CloudFront 邊緣

完整 HTTP 回應 (API JSON、HTML 頁面、映像)

5 秒 – 365d (依行為)

將請求轉送至 ALB 原始伺服器

ElastiCache (Valkey)

應用程式資料物件 (產品記錄、庫存、工作階段)

30 秒 – 5 分鐘 (依資料類型)

應用程式會查詢資料庫,並將結果寫入快取

在產品頁面請求上:

  1. CloudFront 會檢查其邊緣快取。命中時, 會立即傳回快取的回應。

  2. 錯過時,CloudFront 會轉送至 ALB。

  3. 應用程式會檢查 ElastiCache 是否有產品資料。在命中時, 會從快取的資料 (毫秒以下) 建置回應。

  4. 在 ElastiCache 遺漏時, 會查詢資料庫、寫入 ElastiCache,並傳回回應。

  5. CloudFront 會根據行為的 TTL 設定快取邊緣的回應。

當賣方更新產品時:

  1. 應用程式會使 ElastiCache 中的產品金鑰失效。

  2. 應用程式會將產品標籤的快取標籤失效傳送至 CloudFront。

  3. 下一個請求會透過兩個快取層觸發新的回應。

常見問答集

以下各節回答有關電子商務和市場工作負載快取策略的常見問題。

如何使用快取處理個人化內容?

將個人化元素與可快取的內容分開。從 CloudFront 快取提供頁面 shell (產品詳細資訊、影像、描述),並使用略過快取的用戶端 API 呼叫載入個人化元素 (建議、購物車計數、使用者名稱)。透過這種方法,您可以快取昂貴的頁面轉譯,並保持最新的個人化。

如何在失效和短 TTLs之間進行選擇?

針對經常且可預測變更的內容 (庫存、定價),使用短 TTLs (5–60 秒)。對很少變更但必須在變更時立即更新的內容使用失效 (賣方編輯後的產品映像、合規審查後的產品描述)。失效具有每個請求的成本和並行限制 - 請勿使用它來取代適當的 TTLs。

如何為快閃記憶體銷售和流量遽增做好準備?

CloudFront 會自動擴展以處理流量尖峰。若要在銷售期間最大化快取命中率:在事件開始之前請求預熱產品頁面,暫時增加 API TTLs (例如,將庫存 TTL 從 5 秒增加到 15 秒),以吸收邊緣的更多流量,並確保 ElastiCache 叢集有足夠的記憶體空間來增加快取寫入。在事件期間監控 CloudFront 快取命中率指標。

我是否應將 Origin Shield 用於我的市集?

是。Origin Shield 在區域節點快取和原始伺服器之間新增集中式快取層。對於電子商務工作負載,它會減少熱門產品的原始伺服器請求 (因為 Origin Shield 服務所有節點的快取命中)、降低映像的 S3 GET 成本,並平滑 ALB 的流量尖峰。在最接近原始伺服器的區域中啟用它。如需詳細資訊,請參閱使用 Amazon CloudFront Origin Shield。