2017-02-17 55 views
0

Amazon cloud frontCloudfront決定從緩存或服務器獲取數據?

亞馬遜CloudFront的是,加快配送的 靜態和動態Web內容,如html的,的CSS,.PHP和圖像 文件,給用戶的網絡服務。 CloudFront通過全球數據中心網絡 提供您的內容,稱爲邊緣位置。

對於每個我不知道的人,CloudFront必須緩存以URL作爲關鍵字的內容。網址可以同時投放靜態內容和動態內容。假設我有100個weburl,其中30個提供靜態內容,70個提供動態內容(用戶特定數據)。我有每一個問題,關於靜態和動態內容

動態內容: - 說用戶_A通過url_A訪問美國他的數據。該數據已被緩存。他更新了名字。現在,同一用戶將訪問美國同一地點的數據或從英國另一地點的 訪問數據。我們在更新之前看到數據。如果是,邊緣位置將如何知道數據需要從服務器獲取而不是從緩存中獲取? 邊緣位置是否繼續顯示來自緩存的數據以進行可配置的時間量,如果時間已過,則從服務器中獲取?

是否CloudFront的允許配置,需要從服務器,而不是緩存總是獲取特定的URL的?

靜態內容: - 即使靜態數據可能會在每次發佈時發生變化,但有可能發生變化。雲端如何知道緩存的靜態內容是陳舊的,需要從服務器獲取?

回答

1

亞馬遜CloudFront的使用了保質期(或生存時間 - TTL)您指定。

對於靜態內容,可以設置分配的默認TTL,或者可以將TTL指定爲標題的一部分。 TTL過期後,CloudFront邊緣位置將檢查對象上的上次修改時間戳是否已更改。如果它已更改,它將獲取更新的副本。如果沒有更改,它將繼續爲新時間段提供現有副本。

如果靜態內容已更改,您的應用程序必須發送失效請求以告知CloudFront即使在TTL未過期時也重新加載對象。

對於動態內容,您的應用程序通常會指定爲零的TTL。因此,該URL將始終從原始獲取,從而允許服務器修改用戶的內容。

的半和半方法是使用參數(例如xx.cloudfront.net/info.html?user=foo)。在配置CloudFront的分佈,你可以指定是否不同參數(例如user=fred)應作爲一個單獨的對象或者它是否應該被忽視治療。

另請注意,每個CloudFront邊緣位置都有自己的緩存。所以,如果有人訪問來自於美國,這將導致它被英國緩存的頁面。

參見文檔:Specifying How Long Objects Stay in a CloudFront Edge Cache (Expiration)

+0

1.你說'你可以設置默認的TTL的分佈',我們可以設置默認TTL在設置CloudFront的? 2.'如果靜態內容已更改,則您的應用程序必須發送無效請求'Cloudfront是否提供任何供應/配置以將無效請求 發送到雲端?它是在URL級別還是用於完整分發? –

+0

@JohnRotenstein,小細節...根據文檔,CloudFront不使用HEAD來檢查陳舊的對象,它使用[條件'GET'](http://docs.aws.amazon.com/AmazonCloudFront/最新/ DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#RequestCustomConditionalGETs),發送'If-Match' /'If-None-Match'和/或If-Modified-Since'以及最後提供的值。最終的結果是相似的(如果不改變,避免傳輸),但是它也避免了第二個請求,如果'HEAD'響應顯示過時的緩存對象確實已經在原點更新了,那麼這將是必要的。 –

+0

@sqlbot謝謝,修復! –

相關問題