2012-10-08 66 views

回答

17

S3不向CloudFront發送任何失效信息。默認情況下,CloudFront將保存信息,最長時間爲緩存控制標頭指定的最長時間,當從原始數據檢索數據時它會設置此標頭(如果感覺像這樣,它可能會先從緩存中刪除項目)。

您可以通過創建無效批次來使緩存條目無效。這會花費你的錢:每個月的第1000個請求是免費的,但除此之外,它每個請求的成本爲0.005美元 - 如果你每天失去1000個文件,每月需要花費150美元(除非你可以使用通配符功能)。您當然可以使用Amazon Lambda函數來觸發此事件,以響應s3事件。

另一種方法是在對象更改時使用不同的路徑(實際上是世代緩存鍵)。同樣,如果希望cloudfront獲取新副本,則可以將查詢參數追加到url並更改該查詢參數(要執行此操作,您需要告訴CloudFront使用查詢字符串參數 - 默認情況下會忽略它們)。

另一種方式,如果你只是不經常(但很大)的變化是簡單地創建一個新的雲端分佈。

+0

我有一種可怕的感覺,情況是如此。看起來他們錯過了一個功能。你能提供一個參考嗎?還是隻是沒有指定?謝謝。 – Joe

+0

將一個新版本上傳到S3意味着您想清除CloudFront中的緩存是一個錯誤的假設。是的,這可能是你正在尋找的行爲,但是AWS會放任你放棄,這就是你想要的。在很多情況下,我會在CloudFront中將內容緩存,並知道它會根據我的設置過期,並會提前更新S3中的內容。就我而言,自動失效與我想要的相反。 –

+0

不假設,但它似乎是一個有用的參數。 – Joe

3

據我所知,所有的CDN都是這樣工作的。

這就是爲什麼您通常使用類似foo-x.y.z.ext的東西來版本資產在CDN上。我不會使用foo.ext?x.y.z,因爲某些瀏覽器和代理從不緩存?QUERY_STRING的資產。

一般來說,你可能要檢查了這一點: https://developers.google.com/speed/docs/best-practices/caching

它包含了大量的最佳實踐和進入細節做什麼,它是如何工作。

關於S3和Cloudfront,我並不是非常熟悉緩存失效,但是馮檢基所說的都是正確的。

有些提供程序還允許您直接清除緩存,但由於CDN的性質,這些更改幾乎不會立即發生。另一種方法是設置較小的TTL(過期標題),以便資產更新更頻繁。但我認爲這也擊敗了CDN的目的。

在我們的案例(Edgecast)中,高速緩存失效是可能的(手動過程)且免費,但我們很少這樣做,因爲我們相應地版本化了我們的資產。

+0

感謝您的回答。我對S3和CloudFront(以及其他人)都很熟悉,我在詢問這兩種亞馬遜產品之間的具體集成。 – Joe

+0

好的,我沒有具體說明。所以是的 - 我的建議是仍然是版本資產,並在對象上設置「Cache-Control」標頭。 – Till

+0

感謝看起來我只是要解決它。我仍然認爲這是他們錯過的一個必不可少且易於實現的功能。 – Joe