由于使用者紛紛反應山坡網的打開速度比較慢,是以兩天前我們決定把伺服器從linode遷移到阿裡雲。
整個遷移過程非常平滑,基本上一個小時就完成了。而且阿裡雲的配套設施提供的也很不錯,運作狀态監控什麼的都有。在此向大家推薦阿裡雲!
話說由于我們資金有限,就選擇了ECS伺服器中最低檔的一款,512MB記憶體,2MB帶寬。而山坡網上會有很多書籍封面圖檔,這導緻了頁面打開的速度并沒有想象中提高的多,使用者反應速度雖有提升,但不明顯。
此時我想到了七牛雲存儲,雖說知道它已經幾個月了,但始終沒有正式開始用,總覺得我們挺窮的,雲存儲這類高端大氣上檔次的東西一時半會兒估計用不上。但還是抱着學習一下的心思打開它看了看。這一看我就樂瘋了。

這……不敢相信啊!二話不說,立馬決定把所有書籍封面圖檔都遷移到雲端!
接着打開七牛的API文檔看了一下,嗯,簡單明了。10分鐘後就照着動手了。
七牛的Go SDK提供了兩種上傳政策,上傳記憶體資料或者上傳檔案。本來最佳的方式應該是直接上傳記憶體資料,但考慮到伺服器記憶體比較小,是以我選擇了性能上次之的檔案上傳方式。
思路定下來之後就簡單了,在檔案下載下傳完成之後,上傳到雲端,傳回key值作為書籍封面的url儲存到資料庫。上傳的函數如下:
//将本地檔案上傳到七牛雲存儲,傳回key。
func UploadToQiniu(filepath string) (string, error) {
bucket := "xxxxxxx"
//擷取uptoken
putPolicy := rs.PutPolicy{Scope: bucket}
uptoken := putPolicy.Token(nil)
//上傳
var ret qnio.PutRet
err := qnio.PutFileWithoutKey(nil, &ret, uptoken, filepath, nil)
return ret.Key, err
}
接着就可以用“http://xxxxxx.qiniu.com/<key>”的方式通路圖檔資源了。
有經驗的人此時應該想到一個問題,防盜鍊。對啊,就算每個月有100萬次免費的GET請求,可以頂不住盜鍊哪!
七牛早就想到了,很簡單,把存儲空間設定成為私有的,然後使用如下函數生成通路連結。
//處理成通路七牛雲存儲私有空間的url
domain := "xxxx.qiniudn.com"
baseUrl := rs.MakeBaseUrl(domain, urlStr)
policy := rs.GetPolicy{}
return policy.MakeRequest(baseUrl, nil)
這樣就會在通路的url後面加上一個有時間限制的token。防盜鍊完成!
再接下來就處理一下曆史資料,寫個小程式把所有現有的書籍封面都上傳到雲端,同時更新資料庫。
半小時之内,山坡網就搭上了雲存儲的快車,我和我的小夥伴們都驚呆了!
我這隻是用了七牛提供的衆多功能中最簡單的,其實照這個思路,可以把站點上所有靜态的資源都放到雲端,僅讓我們的伺服器處理必要的動态内容。這樣成本會大幅降低。
在此,我向所有網站的開發和營運者們推薦七牛雲存儲!靠譜!