Go語言實戰 - 網站性能優化第一彈「七牛雲存儲」

因爲用戶紛紛反應山坡網的打開速度比較慢,因此兩天前咱們決定把服務器從linode遷移到阿里雲。node

整個遷移過程很是平滑,基本上一個小時就完成了。並且阿里雲的配套設施提供的也很不錯,運行狀態監控什麼的都有。在此向你們推薦阿里雲!數據庫

話說因爲咱們資金有限,就選擇了ECS服務器中最低檔的一款,512MB內存,2MB帶寬。而山坡網上會有不少書籍封面圖片,這致使了頁面打開的速度並無想象中提升的多,用戶反應速度雖有提高,但不明顯。小程序

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

image

這……不敢相信啊!二話不說,立馬決定把全部書籍封面圖片都遷移到雲端!服務器

接着打開七牛的API文檔看了一下,嗯,簡單明瞭。10分鐘後就照着動手了。dom

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

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

半小時以內,山坡網就搭上了雲存儲的快車,我和個人小夥伴們都驚呆了!

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

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

相關文章
相關標籤/搜索