Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構

3.4. 多媒體數據分離

3.4.1. 圖片伺服器分離

為什麼要將圖片伺服器分離出來?

  1. 圖片通常比較大,下載需要更長的時間,而web容器並發數也是相當寶貴的僅次於資料庫。

  2. 傳統瀏覽器一個窗口只占用一個連結數,目前主流瀏覽器都支持多綫程下載,下載HTML頁面同時,採用多綫程下載其它多媒體數據。

我們舉一個例子,你的伺服器並發能力只用1000,早期瀏覽器不支持多綫程,所以同一時刻,你的伺服器可以承受1000個人同時訪問。 但現在不同了,基本所有的瀏覽器都支持多綫程,假如你的頁面中有9張小圖片,同一時刻你的伺服器僅僅能應付1000/10 = 100個用戶。

所以我們要將圖片和其他多媒體檔案分離出來,單獨使用一台伺服器處理請求。

[提示]提示

圖片伺服器建議使用lighttpd與squid緩存配合使用效果更好或購買CDN的服務。

3.4.2. 目錄層次規劃

日期有利於歸檔

/www/images
/www/images/2008
/www/images/2008/01
/www/images/2008/01/01
			

分類不同用途的檔案

/www/images
/www/images/theme/2009

# article id 000001
/www/images/article/2009/01/000001

# product id 00001
/www/images/product/2009/01/01/00001

# member name neo
/www/images/member/2009/01/01/neo
			

根據你的數據量,創建目錄深度, 並且目錄深度有規律可循。

雖然64bit 檔案系統不限制檔案數量與目錄深度,但是我還是建議按我的方式規劃目錄。

這樣規劃目錄便于緩存控制,如:

images/2008/* 永久緩存

images/2009/* 緩存一個月

images/2010/* 緩存一小時

images/2010/06/* 緩存5分鐘

3.4.3. 多域名訪問

部分瀏覽器(IE)相同域名只能創建2個綫程,在頁面中使用多個域名可以解決這個限制

img1.example.com IN CNAME images.example.com.
img2.example.com IN CNAME images.example.com.
img3.example.com IN CNAME images.example.com.
...
imgN.example.com IN CNAME images.example.com.