每一個可以努力的日子,都是一份厚禮。
Amazon CloudFront 內容分發服務(CDN)
Amazon CloudFront是一個內容分髮網絡,該服務可以很容易地將內容投送到終端用戶,具有低延遲、高數據傳輸速率等特點。簡單來說就是使用CDN進行網絡加速。
CDN是什麼?CloudFront又是什麼?
如果你已經對CDN有了基本了解,可以跳過這一節直接閱讀後面的內容。
CDN是Content delivery network(內容分髮網絡)的簡稱,這一技術以往只應用於大型商業性網站。通過使用這種技術,可以將網站上的靜態內容(例如.html文件、.jpg圖片)和動態內容(例如數據庫查詢)緩存到CDN提供商位於全球各地的多個服務器上。這樣當全世界不同訪客訪問這個網站的時候,就不再需要通過網站所在服務器讀取這些內容,而是可以從就近的CDN緩存服務器上讀取,因此內容的讀取速度更快,直接影響就是網頁的加載速度更快。
這一系列過程都是完全自動實現的,並且在配置好後,對於網站的內容提供方(例如正在寫這篇文章的我)也是完全透明的。我只需要按照正常方式撰寫並發布內容到本站,隨後相配套的程序就會自動把需要緩存的內容提交到我指定的緩存服務器上;而正在閱讀這篇文章的您,在打開本站文章時,會根據您的實際地理位置和網絡環境,由DNS服務器將您引導到速度最快的緩存服務器上,並從緩存服務器上直接下載顯示本站頁面所需的各種內容。
簡而言之,通過使用CDN,可以有效提升全球各地訪客打開網頁的速度。因此各大門戶網站、社交網站,以及網絡視頻站點,都會使用各種CDN技術。對於技術實力強大,並且有充足預算的企業,可能會自行在全球各地搭建緩存服務器(Google,騰訊,淘寶……);但預算不充足,或內容數量過少,自建CDN網絡不划算的企業,則會考慮使用專門的CDN服務提供商,藉助提供商建好的網絡進行加速,並為此付費。
欣聞國內目前有免費的CDN服務,有興趣的同學可以去看看。
CloudFront是由Amazon提供的一套覆蓋全球的CDN網絡。該服務擁有雲計算服務特點,可以根據流量和請求數量進行收費,並且相對來說費用還算低廉,因此適合小型公司或個人。
根據介紹,Amazon的CloudFront目前在全球下列地區建立了提供CloudFront服務的數據中心:
美國:維吉尼亞州-阿什本,德克薩斯州-達拉斯/沃斯堡,佛羅里達州-傑克遜維爾,加利福尼亞州-洛杉磯,佛羅里達州-邁阿密,紐約,新澤西州-紐瓦克,加利福尼亞州-帕羅奧圖,華盛頓州-西雅圖,密蘇里州-聖路易斯
歐洲:阿姆斯特丹,都柏林,法蘭克福,倫敦,巴黎
亞洲:香港,東京,新加坡
因此只要使用CloudFront服務,就相當於可以通過上述遍布全球主要地區的緩存服務器,為您的網站提供加速服務。
如何收費?
和其他雲計算服務一樣,按需收費,用多少收多少,沒有最低費用。當然你也可以一次性訂購長期服務,有折扣。具體的費率,可以在這裡看到。Amazon AWS也提供了計算器,幫助預算。
不同地區的流量和處理費用有略微差異,其中日本的費用最貴。在估算實際費用時需要注意,考慮您網站訪客的主要來源,例如對於大部分中國用戶,取決於具體的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美元。換來網站訪問速度的極大提升,我覺得還是挺划算的。
如何使用?
如果你使用的是DreamHost的主機,主機商提供了CloudFront設置,十分方便。參考這個鏈接。
如果您使用的別的主機沒有提供該功能設置,但只要你使用的WordPress搭建網站,那麼也可以通過WP插件的方式實現CDN設置。插件:OSSDL CDN Off Linker ,不過我個人推薦大名鼎鼎的緩存插件WP Super Cache,已經集成了前者的功能。插件工作原理是使用URL Rewriting功能,將指向靜態文件的鏈接由原始主機修改為CloudFront。假設在Wordpress中發布文章,其中包含一張圖片,該圖片的原始URL是“http://www.lovelucy.info/wp-content/uploads/picture.jpg”,那麼插件會自動將該鏈接的域名部分進行更換,即把“http://www.lovelucy.info”更換為“http://xxxxx.cloudfront.net”。這樣當訪客瀏覽頁面時,就會自動轉為向最近的CloudFront服務器請求這張圖片,從而實現加速。
1. 開通CloudFront服務
首先你得有個AWS帳號,之前在S3雲存儲等相關文章中已經介紹過了,此處不予冗述。
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.lovelucy.info測試,可以發現在CloudFront內容分髮網絡的幫助下速度已經有很大提升。
7. Super Cache插件設置重寫URL
使用Wordpress的SuperCache插件將網站內容中的URL進行替換,這樣瀏覽器就知道通過“cdn.lovelucy.info”這個域名找到所需內容(在CDN的緩存服務器中),而不會去“www.lovelucy.info”的域名下獲取內容(雖然也能找到,但這就等於沒有用到CDN的加速)。
“Off-site URL”處輸入上文添加的CNAME記錄對應的地址,如果你的wordpress是安裝在根目錄,請直接填寫“http://cdn.lovelucy.info”,域名結尾處不能輸入“/”斜線,同時必須包含“http://”或“https://”,以代表要使用的具體協議。
“Include dirs”選項,則對應了要重寫的內容所在目錄。以上圖為例,這裡列出了“wp-content,wp-includes”這兩個目錄,因此這兩個目錄下的內容(包括子目錄)中的“www.lovelucy.info”鏈接替換為“cdn.lovelucy.info”。對於WordPress來說,這兩個目錄下幾乎包含了網站的一切內容,例如文章插圖、主題文件、腳本文件、CSS文件等。
“exclude if substring”選項則決定了要排除,不進行重寫的內容類型,保留默認設置即可。
結束
到此為止已經全部設置完畢,訪問www.lovelucy.info,看看頁面源代碼,鏈接都被替換為了cdn.lovelucy.info,看看速度是不是很快呢?或者去http://pagespeed.googlelabs.com/在線測試一下網站訪問速度吧~
以上內容部分引自劉暉的Blog。
這篇文章由lovelucy於2011-05-17 17:32發表在雲計算。你可以訂閱RSS 2.0 也可以發表評論或引用到你的網站。除特殊說明外文章均為本人原創,並遵從署名-非商業性使用-相同方式共享創作協議,轉載或使用請註明作者和來源,尊重知識分享。 |
這文章太牛了。博主的網站飛快啊,說明起了作用。
AWS network latency test
恩。仔細看了下找到源碼了。得研究下php怎麼用。懂php的簡單介紹下。不勝感激。
那個API不一定要使用PHP來調用,用你熟悉的語言就可以了。只是往Amazon服務器上post一個請求而已。
工具怎麼用?急。哪位大俠幫幫忙。
我給了鏈接呀,你點進去看看唄。真有那麼急嗎?等24小時就自動會刷新的
恩,點進去看了。php不懂,想下載源碼也下載不下來。
幫忙介紹下如何使用。謝謝。
我是把在線升級包放在s3上,一個月左右會發布一個新版本。升級客戶端會提示有更新,如果cf不及時更新,我們的在線升級不就失效了嗎?所以等不了24小時。
你的升級包的名字是固定的?如果文件名不一樣的話,CF就自動會去抓取新文件。
“這和是否使用S3沒有關係。CloudFront管理面板沒有刷新選項,但現在提供了API來強制刷新,只是你需要自己編程。當然,已經有牛人寫好了工具。”
這個工具怎麼下載?如何使用?謝謝
如果使用S3,應該就會即時更新吧?在別家公司,都會給一個刷新緩存的面板,CloudFron現在好像都還沒有
這和是否使用S3沒有關係。CloudFront管理面板沒有刷新選項,但現在提供了API來強制刷新,只是你需要自己編程。當然,已經有牛人寫好了工具。
你好!我使用了源,可是在CDN裡面的頁面不會跟着我源的數據更新,有什麼辦法嗎?
Amazon CloudFront默認設置是24小時更新,等一天就好了。如果信息經常變更,使用CDN需要權衡。