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


由於用戶紛紛反應山坡網的打開速度比較慢,所以兩天前我們決定把服務器從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。防盜鏈完成!

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM