WordPress 使用阿里雲 OSS 及 Super Cache

再來一篇技術 BLOG,繼使用阿里雲的 CDN 和 RDS 服務優化網站的存取速度之後,還是有上升空間的,於是繼續摺騰,給網站繼續加速。

首先就是使用阿里雲的 OSS 服務
因為本站圖片較多,現在每個頁面大概需要載入 2-4MB 的數據,可是伺服器卻只有可憐的 2M 頻寬,只有一個用戶存取而且是滿速載入完一個頁面也需要 8-16 秒,完全無法接受。即使使用了 CDN,當遇到用戶從一個尚未快取此檔案的新節點存取這個檔案的時候,還是要從 ECS 上讀取數據的,這時候,2M 頻寬就成了一個很嚴重的瓶頸,所以使用 OSS 是非常好的選擇,阿里雲 OSS 出口是 BGP 多線,而且沒有頻寬限制。

阿里雲 OSS 的價格非常便宜,費用分為 3 部分,

  • 儲存:50T 以下,每天 0.0058 元/GB,每小時 0.00024 元/GB,因為阿里雲的計費方式是按小時計算,而且只捨不進,最小單位 0.01 元,也就是說要到 45GB 的時候才會開始每小時收 1 分錢。之前都是免費的。
  • 流量:8 點到 0 點是每 0.75 元/GB,這樣算下來是,相當於 0.0007 元/MB,也就是說一小時內大概每 14M 流量收費 1 分,14M 以內免費。0 點到 8 點半價。
  • 請求:每萬次 0.01 元,同樣也是一個小時內不到一萬次不要錢。

對於我這個儲存只有 1G 多點的網站,每小時請求也就幾百次,所以只有流量是有可能收費的。CDN 的流量費用是 OSS 的一半,所以 OSS+CDN 就成為了速度又快,價格又便宜的好選擇。這樣只有當用戶存取一個 CDN 節點上沒有快取的檔案時,才會向 OSS 請求,這時候 OSS 會計費,當 CDN 節點已經快取了這個檔案,則只會計算 CDN 的費用,OSS 就不用流量了。

其實早在一個多月前就已經開始使用 OSS+CDN 了,實際用下來,費用和只用 CDN 時沒什麼變化,於是其實雲端伺服器 ECS+關聯式資料庫 RDS+開放儲存 OSS+CDN 才是終極解決方案,當然如果存取量再上去的話,就可以用多台 ECS 做負載均衡了。

下面來說說實際操作,把數據搞到 OSS 上並不是一件容易的事。首先是開通,這部分很簡單:
新建一個 bucket:
QQ20150105-2

object 管理中可以進行比較基本的上傳和刪除檔案等操作:
QQ20150105-1

在設定中根據說明可以綁定自己的域名:
QQ20150105-3

然後在 CDN 設定中,新建一個源自 bucket 的域名
QQ20150105-4

選擇要使用 CDN 的 bucket 和域名,稍等片刻就可以得到 cname 了,去域名後台設定一下就可以使用了。
QQ20150105-5

下一步就是要把本站所有的圖片都放到 OSS 上,這絕對不是一件容易的事,檔案非常多,而且資料夾層級關係也較複雜,OSS 又沒有一種可以像 FTP 一樣上傳的工具,後來找到了一個工具叫OSSExplore,可以在 Windows 下實現類似於 FTP 式的 OSS 管理,至少可以按資料夾上傳了。雖說實際上用起來 bug 還是挺多的,但是勉強也是把圖片們上傳上去了,然後就是尋找替換資料庫裡的圖片地址之類的,這個就比較簡單了。

阿里雲的 WordPress 外掛程式
在 WordPress 後台上傳的檔案要直接傳到 OSS 上,存取的地址也要相應改成 OSS 的地址,需要用到相應的外掛程式實現。這個真心是最難找的東西,網上能找到的要麼無法下載,要麼已經 out of date,找來找去居然沒有找到一個真正可以使用的。。。

最終找到了Aliyun OSS Support這個外掛程式,看了一下算比較近更新的,找到了幾個 bug,聯繫了作者Ivan Chou,也都順利了解決了,於是在這裡推薦一下這個外掛程式,刪除檔案的時候同樣也會在 OSS 上刪除,上傳到 OSS 的同時也可以選擇在本地硬碟上保留一個備份,也算是目前 WordPress 上唯一一個可以比較好的支援 OSS 的外掛程式了,雖然還有改進的空間。也非常感謝作者的努力,希望在未來可以越做越好。

減少外掛程式
大家都知道 WordPress 以外掛程式多樣使用方便著稱,但是外掛程式的問題非常多,尤其是版本相容啊,還有引用多個 js/css 檔案,大大增加了請求數量,一旦引用一個在牆外的檔案,那就更麻煩了。嘗試過像 Minify 等合併 js/css 的外掛程式,並沒有什麼太大作用。

於是能不用外掛程式解決的問題都不要用外掛程式,很多功能都是可以通過主題 functions.php 中的代碼實現的。比如說替換 Google fonts 的地址,評論回覆發提醒郵件,禁止載入自帶的 jquery,搜尋檔案不搜尋頁面等等。

之前使用了像 addthis 之類的分享外掛程式,後來被牆換成 jiathis,後來覺得分享只需要微博和微信就夠了,於是直接使用微博的原生分享按鈕了,還能在來源上顯示我的站點~~~Fancyzoom 也通過修改把請求的資源全部轉移至 CDN 上。

於是我現在精簡之後,使用的外掛程式只有這幾個,大部分都是後台使用的,前台完全不載入:
QQ20150105-7

WP Super Cache
這個解決的主要問題是首字節時間太長的問題,不知道是因為我的網站首頁需要調用的數據過多還是什麼原因,每個頁面的首字節時間一直在 300-500ms 之間,算是非常長了,這個站點並沒有什麼過多互動的東西,文章發佈了之後也不會經常有變化,於是徹底的靜態化快取是一個很好的解決辦法。

WP Super Cache 這個外掛程式就是做這件事的,通過 URL Rewrite,使本來需要動態生成的頁面,只需要生成一次,快取下來,在別人存取的時候直接存取快取的靜態頁面,大大加快了首字節時間,同時支援把 wp-include 和 wp-content 資料夾裡的靜態檔案移到 CDN 中,本站也同時開啟了這個功能。

QQ20150105-6

經過優化,現在基本上首字節時間都是在 100ms 以內了,實測經常在 20-50ms,有了很大提升。整個頁面載入時間也由以前的 1-2 秒提升到了 0.5-1 秒(非首次存取),首次存取時間比較受用戶的頻寬因素影響。要想達到 1 秒以內需要至少有 20M 的寬頻才有可能,也是最近才意識到全國大部分地方並達不到這個速度。。。

評論請移步微信公眾號

, , , ,


讚賞