AWS CloudFront的主要用途就是實現向用戶交付靜態內容的優化。但是,亞馬遜通過進一步提供動態內容加載增速的功能而抬高了內容分發網絡(CDN)的準入門檻。這就使得該服務對于非視頻相關的應用更為有用,例如用戶生成內容的加速和個性化內容的分發。此外,亞馬遜對于動態內容分發和靜態內容分發的收費都是相同的。其成本源于AWS S3標準,但價格會隨著使用數量增長而下降。
例如,TwitPic就是CloudFront的早期使用者之一,他們主要將這一工具應用于提高其圖像共享應用程序的性能。該服務可允許用戶在Twitter以及其他社交平臺上發布照片。“我們使用CloudFront向我們的五千萬注冊用戶提供由用戶上傳的圖片。我們使用CloudFront響應每月超過五百億次的API調用,”TwitPic的前CTO,Bigcommerce 的現任主架構設計師Steve Corona說。
使用CloudFront可允許初創的小型公司實現彈性的內容交付,且無需建立一個大型的IT部門。否則的話,這家公司將在增長的成本效益方面面臨非常嚴重的挑戰。Corona解釋說,“每個月我們都在以數以PB級的流量交付著內容。最初的時候,我們使用亞馬遜S3服務來完成這一工作,因為那個時候我們還不知道我們在做些什么。事實證明,對于我們業務所需的流量來說,CloudFront是更便宜的。更重要的一點是,CloudFront交付數據的速度要比S3快得多。”
技術細節詳解
一個典型的網站通常包括了靜態內容和動態內容的組合。靜態內容包括了對網絡上所有用戶都呈相同顯示的圖片和樣式表,這些靜態內容最好被緩存在內容分發網絡(CDN) 的邊緣。而動態內容則包括了會頻繁變化的信息,或者基于用戶喜好、行為、位置或其他因素而變化的個性化內容。因此,所謂的動態內容也可以根據階段不同而被緩存起來。
網站的動態生成內容將造成網絡流量延遲現象的增加、多次連接源服務器以及增加CPU負載。為了解決這一問題,CloudFront使用了一個框架以處理查詢字符串參數和交付整個網站的cookies,而不必分離靜態內容和動態內容或者管理多個域。
CloudFront還允許應用程序開發人員通過為保存在源服務器上的文件設置緩存控制頭來配置緩存生存期(TTL)值。CloudFront使用這些手段來確定邊緣位置從源服務器檢索更新文件的頻度。當文件頻繁改變時,開發人員需要設置一個更小的TTL值,一般可小至零點幾秒。
緩存行為基礎
對于被用于確保用戶獲得最新數據的緩存設置,應謹慎地查看其配置。CloudFront使用了“近期最少使用”(LRU)緩存算法的一種變異算法。在CloudFront緩存中的內容被復制之后,用戶可以從緩存中而不是直接從源服務器提取數據。如果這一內容的TTL設置較短,那么用戶就還不如更高效地直接從源服務器提取內容。另一方面,如果TTL被設置為更長的時間,那么確保配置應用程序發送無效的請求是很重要的。
例如,加拿大的最大在線日報——星傳媒集團就使用了CloudFront的交付功能。鑒于該傳媒巨頭每月擁有著超過330萬的活躍用戶,其規模和性能就成為了系統設計的兩個重要組成部分。與此同時,不同類型的內容需要被設置不同的過期頻率。
為了解決這一挑戰,星傳媒集團的IT團隊根據不同的內容類型建立了19個不同的緩存行為規則。他們還制定了設計的指導方針,以限制查詢字符串的數量和使用客戶端的cookie而不是服務器端的cookie。這不僅增加了內容的高速緩存性,而且減少了緩存內容變型的數量。
這種方法也讓緩存傳統意義上的動態內容成為了可能。例如,搜索結果內容會被緩存兩分鐘,這就提高了交付搜索結果的速度,同時通過消除每次響應請求的需要就可減少源服務器上的工作負載。這種做法平衡了緩存和保留搜索結果的需要,并最終導致響應時間提高了50%。
保持數據時效性
例如選舉結果、體育成績以及股票行情等應用的數據都可被短時間緩存,具體從一秒鐘到一分鐘不等,從而獲得緩存的好處,且不必發出陳舊數據,亞馬遜網絡服務首席產品經理Nihar Bihani說。例如,在2012年,美國國家廣播電臺使用CloudFront來交付選舉結果,而其TTL被設置為30秒。
在其他情況下,該內容是根據地理位置而生成的,這也就使其更宜于在一個給定的區域為緩存內容設置一個較短的緩存時間。例如,已開發出流行Weather Bug應用程序的Earth Network公司就使用CloudFront來緩存天氣數據。由于位于同一地理區域內的用戶往往會訪問同一臺邊緣服務器,這就使得他們可以提取他們所在區域的天氣更新數據而不必對每一個請求都要求源服務器響應。
Bihani表示,通過使用特制的cookies和查詢字符串,這種基于位置的個性化服務是可以實現的,其中應記錄與用戶相關的數據并成為高速緩存的鍵值。他指出,“從某種意義上來說,因為它對于每一個用戶都是個性化的內容,所以它就是動態的,但與此同時這樣的動態數據也是可以被緩存的,這樣一來在舊金山地區的每一位用戶都可以得到一個緩存的內容副本而不需要用到Weather Bug的源服務器。”
無緩存內容分發網絡的價值 CDN的主要好處就是復制內容并將其置于離用戶更近的位置。但是,如果使用CloudFront作為代理服務器以提高至源服務器的連結性而不是緩存,那么即便是將TTL設置為零,網站性能仍然能夠得到提升,Bihani說。在這些情況下,這個邊緣服務器就能夠利用一個單一的優化連接和在多個用戶之間共享單一傳輸控制協議(TCP)連接的后端服務器,從而減少至源服務器的連接數量。
當第一位用戶通過邊緣服務器請求內容時,就會因建立與源服務器的連接而產生一些開銷和延遲,但是經由邊緣服務器的后續用戶請求就可以使用之前已經在源服務器和CloudFront邊緣服務器之間建立的TCP連接,從而減少檢索內容方面的延遲。
Bihani解釋道,“越是遠離源服務器,那么在互聯網上發生的丟包事件就越多。每一次發生丟包事件,我們就必須重新傳輸內容。如果使用了CloudFront,那么它不僅能夠使用永久連接,而且還可實現性能優化。”在一個物理距離很長的連接中(例如一位遠在新加坡的用戶向位于弗吉尼亞的源服務器發送內容檢索請求),使用CloudFront作為代理服務器就能夠減少一半的延遲時間。在紐約的用戶可能就能夠看到一些性能改善,雖然也不是那么明顯。
雖然CloudFront在改善動態內容交付性能上發揮了一定的作用,但是它并不是解決每一種網絡性能延遲原因的靈丹妙藥。就目前的情況來看,CloudFront服務的關注點在于優化傳輸內容的網絡路徑。它目前并不支持其他提高網絡性能的技術,如前端優化、JavaScript和CSS壓縮,或者圖像調整等。