CDN 是內容分髮網絡的簡稱,使用 CDN 可以將網站的靜態內容(例如純HTML文本、圖片、css、js等)緩存到網絡服務商的服務器上,從而讓訪客分流去 CDN 上獲取靜態資源,提升我們網站的訪問速度。我之前介紹過的 CloudFront 就是 Amazon 基於雲計算平台提供的 CDN 服務。

新浪 SAE 是國內一個優秀的雲計算平台,它提供的 Storage 服務同樣可以用來存儲靜態文件。新浪的服務器部署在多個數據中心,全國各地各種線路的訪問速度都十分流暢。充分利用其強大的分布式架構,基於 SAE 搭建 CDN 的想法具有可行性。

一、安裝和使用

1、 一個 SAE 帳號。使用新浪微博帳號即可申請,申請地址:http://sae.sina.com.cn/

2、部署代碼。直接 在線安裝

3、配置程序。登錄 SAE 後台,找到你剛剛創建的應用,點擊“代碼管理” – “部署代碼”。完成後點擊“編輯代碼”。在新窗口的代碼編輯器中,選擇編輯 index.php 文件,修改配置填入你的網站域名。

sae_cdn_config

4、使用 CDN。將網站中靜態文件的的根目錄 URL 替換成你的 SAE 應用地址,如將http://www.lovelucy.info/logo.jpg 換成 http://mysaecdn.sinaapp.com/logo.jpg。最後,刷新你的網站,然後感受網站加載速度的飛躍。

使用 WordPress 的同學可以利用 wp-super-cache 插件設置 CDN 重寫 URL,具體參見 CloudFront 配置 中的第 7 步。Off-site URL 配置項填入 http://mysaecdn.sinaapp.com 即可,這樣所有的靜態文件鏈接都會自動替換為 CDN 的鏈接。

supercache_cdn_setting

我為此專門設置了一個二級域名,CNAME 到 CDN 的域名地址上,所以截圖上填寫的是我的二級域名。

二、原理

用戶訪問 SAE 地址取靜態文件,當該文件是第一次被訪問時,程序發現 SAE 中沒有該文件,便去源服務器上取文件並保存到自己的 Storage 里,然後返回給前端;之後就直接從 SAE 取而不需要再訪問源服務器了。

使用 又拍雲 之類的 CDN 服務需要手動將圖片等文件上傳至 CDN 服務器,或者需要使用 API 進行專門的編程,這相當麻煩。而 SAE 的這個解決方案和 CloudFront 類似,資源文件仍保存在源服務器上,只要將靜態資源的前綴改為 SAE 的網址就行了,CDN 會自動抓取,而當不想使用 CDN 時可以再改回來,無痛切換。

三、配合 CloudFront 使用,區分國內外訪客

我的博客來自國外的訪客佔據了一半以上的流量,我原先使用的 Amazon CloudFront 可能更適合服務於國外用戶,但 CloudFront 在中國又比較慢,這真是一件糾結的事情。

好在我使用 dnspod 做域名解析,他們支持針對不同訪客的線路解析不同的地址。這樣就一勞永逸了。

cdn_dns_records

使用超級 ping 測試,全球各地的訪問速度都在 100 ms 左右,再不會出現超時的狀況了。

使用 CDN 的好處是顯而易見的,一是 CDN 服務器在全國各地都有很好的訪問速度,用戶下載資源時更快;二是減輕了我們自己服務器的壓力,提升了性能。