文章出處

由于用戶紛紛反應山坡網的打開速度比較慢,所以兩天前我們決定把服務器從linode遷移到阿里云。

整個遷移過程非常平滑,基本上一個小時就完成了。而且阿里云的配套設施提供的也很不錯,運行狀態監控什么的都有。在此向大家推薦阿里云!

話說由于我們資金有限,就選擇了ECS服務器中最低檔的一款,512MB內存,2MB帶寬。而山坡網上會有很多書籍封面圖片,這導致了頁面打開的速度并沒有想象中提高的多,用戶反應速度雖有提升,但不明顯。

此時我想到了七牛云存儲,雖說知道它已經幾個月了,但始終沒有正式開始用,總覺得我們挺窮的,云存儲這類高端大氣上檔次的東西一時半會兒估計用不上。但還是抱著學習一下的心思打開它看了看。這一看我就樂瘋了。

image

這……不敢相信啊!二話不說,立馬決定把所有書籍封面圖片都遷移到云端!

接著打開七牛的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。防盜鏈完成!

再接下來就處理一下歷史數據,寫個小程序把所有現有的書籍封面都上傳到云端,同時更新數據庫。

半小時之內,山坡網就搭上了云存儲的快車,我和我的小伙伴們都驚呆了!

我這只是用了七牛提供的眾多功能中最簡單的,其實照這個思路,可以把站點上所有靜態的資源都放到云端,僅讓我們的服務器處理必要的動態內容。這樣成本會大幅降低。

在此,我向所有網站的開發和運營者們推薦七牛云存儲!靠譜!


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()