Imported Layers

Amazon CloudFront (CDN) – 內容傳遞網路

Amazon CloudFront 是一個內容分發網絡,該服務可以很容易地將內容傳送到終端用戶,具有低延遲、高數據傳輸速率等特點。簡單來說就是使用CDN進行網絡加速。

CDN是什麼?

如果你已經對CDN有了基本了解,可以跳過這一節直接閱讀後面的內容。

CDN是Content delivery network (內容分發網絡的簡稱)

這一技術以往只應用於大型商業性網站。通過使用這種技術,可以將網站上的靜態內容(例如.html文件、.jpg圖片)和動態內容(例如數據庫查詢)緩存到CDN提供商位於全球各地的多個伺服器上。這樣當全世界不同訪客訪問這個網站的時候,就不再需要通過網站所在伺服器讀取這些內容,而是可以從就近的CDN緩存伺服器上讀取,因此內容的讀取速度更快,直接影響就是網頁的加載速度更快。

這一系列過程都是完全自動實現的,並且在配置好後,對於網站的內容提供方也是完全透明的。我們只需要按照正常方式撰寫並發布內容到本站,隨後相配套的程序就會自動把需要緩存的內容提交到我們指定的緩存伺服器上;而正在閱讀這篇文章的您,在打開本站文章時,會根據您的實際地理位置和網絡環境,由DNS伺服器將您引導到速度最快的緩存伺服器上,並從緩存伺服器上直接下載顯示本站頁面所需的各種內容。

簡而言之,通過使用CDN,可以有效提升全球各地訪客打開網頁的速度。因此各大門戶網站、社交網站,以及網絡視頻站點,都會使用各種CDN技術。對於技術實力強大,並且有充足預算的企業,可能會自行在全球各地搭建緩存伺服器(Google, Yahoo, Facebook……);但預算不充足,或內容數量過少,自建CDN網絡不划算的企業,則會考慮使用專門的CDN服務提供商,借助提供商建好的網絡進行加速,並為此付費。

CDN的總承載量可以比單一骨幹最大的頻寬還要大。這使得CDN可以承載的使用者數量比起傳統單一伺服器多。也就是說,有100Gbits/sec處理能力的伺服器放在同樣的資料中心,只有10Gbps/sec頻寬就只能發揮出10Gbps/sec的承載量。但如果放到十個有10Gbps/sec的地點,整個系統的承載量就可以到10*10Gbps/sec。同時,將伺服器放到不同地點,可以減少互連的流量,進而降低頻寬成本。
對於TCP傳輸而言,TCP的速度(throughput)會受到延遲時間(latency)與封包漏失率(packet lost)影響。為了改善這些負面因素,CDN通常會指派較近、較順暢的伺服器節點將資料傳輸給使用者。雖然距離並不是絕對因素,但這麼做可以盡可能提高效能,使用者將會覺得比較順暢。這使得一些比較高頻寬的應用(傳輸高清畫質的影片)更容易推動。CDN另外一個好處在於有異地備援。當某個伺服器故障時,系統將會調用其他鄰近地區的伺服器服務,進而提供接近100%的可靠度。除此之外,CDN提供給服務提供者更多的控制權。提供服務的人可以針對客戶、地區,或是其他因子調整。

關於 Amazon CloudFront

CloudFront是由Amazon提供的一套覆蓋全球的CDN網絡。該服務擁有雲端計算服務特點,可以根據流量和請求數量進行收費,並且相對來說費用還算低廉,因此適合小型公司或個人。

根據介紹,Amazon的CloudFront目前在全球下列地區建立了提供CloudFront服務的數據中心:

  • 美國:維吉尼亞州-阿什本,德克薩斯州-達拉斯/沃斯堡,佛羅裡達州-傑克遜維爾,加利福尼亞州-洛杉磯,佛羅裡達州-邁阿密,紐約,新澤西州-紐瓦克,加利福尼亞州-帕羅奧圖,華盛頓州-西雅圖,密蘇裡州-聖路易斯
  • 歐洲:阿姆斯特丹,都柏林,法蘭克福,倫敦,巴黎
  • 亞洲:香港,東京,新加坡

因此只要使用CloudFront服務,就相當於可以通過上述遍布全球主要地區的緩存伺服器,為您的網站提供加速服務。

如何收费?

和其他雲端計算服務一樣,按需收費,用多少收多少,沒有最低費用。當然你也可以一次性訂購長期服務,有折扣。具體的費率可以在這裡看到

不同地區的流量和處理費用有略微差異,其中日本的費用最貴。在估算實際費用時需要注意,考慮您網站訪客的主要來源,例如對於大部分中國用戶,取決於具體的ISP和網絡環境,往往會通過位於香港/新加坡,或日本的緩存伺服器獲取內容。

下面以我們的網站 為例計算費用。本網站的整個目錄下所有文件,包含php,以及png等,全部加起來算整200 MB。由於訪客訪問網站時所請求的每個文件(PHP、腳本、CSS、圖片等)都會產生一個請求,就算平均每個頁面會產生50個請求,假設每天的頁面瀏覽量是300個。(其實這些數據通過Google Analysis都可以獲得一個准確值,但我們也懶得去找了,用近似值計算好了。)

因此每月,通過CloudFront分發15 GB數據的費用為:15 GB * $0.201/GB = $3.015

另外,每月產生的請求數量為 50 * 300 * 30 = 450000個,這些請求都是HTTP請求,因此請求處理費用為 450000 / 10000 * 0.0095 = $0.4275

所以假設本站的所有訪客都通過位於日本的緩存伺服器獲取內容,我們每月需要付出 3.015 + 0.4275 = $3.44,約合¥22。當然,實際上不可能所有訪客都使用日本的緩存伺服器,因此只要數據量和瀏覽量沒有太大變化,每月實際的付出只會低於這個價格,事實上從我們的賬單上看每月不到1美元。換來網站訪問速度的極大提升,我們覺得還是挺劃算的。

如何使用 Amazon CloudFront (CDN)?

1. 開通CloudFront服務

首先你得有個 AWS 帳號

2. 創建一個CloudFront分發

登錄AWS控制台,切換到CloudFront選項卡(沒有該選項? 也許你還沒開通CloudFront), 選擇“新建分發”。

3. 設置分發類型和來源

分發類型選擇“Download”,我們們用於網頁加速的都是靜態內容下載,Sreaming流媒體類型用於音視頻加速。源類型選擇“Custom Origins”,所謂“源”(Origin),就是你要分發的內容所在的伺服器。之前,CloudFront只支持選擇S3作為分發源,所以需要將網站的所有文件先上傳到S3中,不僅麻煩,而且還是一筆花銷。現在CloudFront已經支持Custom Origins(只限於Download類型),也就是可以直接從你自己的主機上獲取內容進行分發。

如今我們們使用CloudFront已經不需要S3這個中間步驟,減少了存儲費用,設置也方便多了。

4. 設置CNAME

可以選擇添加CNAME(什麼是CNAME記錄),只需要輸入要使用的二級網址即可。注意:此處設置後,需要到自己的網址注冊商處添加一條該CNAME的DNS記錄,後面會談到。

5. 完成部署

創建分發後,等待一段時間,直到Status為Deployed,即表示分發已經成功部署。訪問分發伺服器測試一下dt2k392a4aki6.cloudfront.net

6. 添加DNS記錄

到自己的網址管理商處,添加一條之前用到的CNAME記錄,value值即CloudFront提供給你的分發伺服器地址。等待該網址在全球生效,訪問cdn.ten2.tw測試,可以發現在CloudFront內容分發網絡的幫助下速度已經有很大提升。

7. Super Cache插件设置重写URL

使用Wordpress的SuperCache插件將網站內容中的URL進行替換,這樣瀏覽器就知道通過“cdn.ten2.tw”這個網址找到所需內容(在CDN的緩存伺服器中),而不會去“www.ten2.tw”的網址下獲取內容(雖然也能找到,但這就等於沒有用到CDN的加速)。

“Off-site URL”處輸入上文添加的CNAME記錄對應的地址,如果你的wordpress是安裝在根目錄,請直接填寫“http://cdn.ten2.tw”,網址結尾處不能輸入“/”斜線,同時必須包含“http://”或“https://”,以代表要使用的具體協議。

“Include dirs”選項,則對應了要重寫的內容所在目錄。以上圖為例,這裡列出了“wp-content,wp-includes”這兩個目錄,因此這兩個目錄下的內容(包括子目錄)中的“www.ten2.tw”鏈接替換為“cdn.ten2.tw”。對於WordPress來說,這兩個目錄下幾乎包含了網站的一切內容,例如文章插圖、主題文件、腳本文件、CSS文件等。

“exclude if substring”選項則決定了要排除,不進行重寫的內容類型,保留默認設置即可。

結束。現在可以開始使用 Amazon 的 CDN 了!

到此為止已經全部設置完畢,到你們的網站去看看頁面原始碼,鏈接都被替換為了cdn.xxx.com,看看速度是不是很快呢?
或者去 http://pagespeed.googlelabs.com/ 在線測試一下網站訪問速度吧~