一、淘寶網(wǎng)的困境
對于淘寶網(wǎng)這樣的大型電子商務網(wǎng)站,對于圖片服務的要求特別的高。而且對于賣家來說,圖片遠勝于文字描述,因此賣家也格外看重圖片的顯示質(zhì)量、訪問速度等問題。根據(jù)淘寶網(wǎng)的流量分析,整個淘寶網(wǎng)流量中,圖片的訪問流量會占到90%以上,而主站的網(wǎng)頁則占到不到10%。同時大量的圖片需要根據(jù)不同的應用位置,生成不同大小規(guī)格的縮略圖??紤]到多種不同的應用場景以及改版的可能性,一張原圖有可能需要生成20多個不同尺寸規(guī)格的縮略圖。
淘寶整體圖片存儲系統(tǒng)容量1800TB(1.8PB),已經(jīng)占用空間990TB(約1PB)。保存的圖片文件數(shù)量達到286億多個,這些圖片文件包括根據(jù)原圖生成的縮略圖。平均圖片大小是17.45K;8K以下圖片占圖片數(shù)總量的61%,占存儲容量的11%。對于如此大規(guī)模的小文件存儲與讀取需要頻繁的尋道和換道,在大量高并發(fā)訪問量的情況下,非常容易造成讀取延遲。
2007年之前淘寶采用NetApp公司的文件存儲系統(tǒng)。至2006年, NetApp公司最高端的產(chǎn)品也不能滿足淘寶存儲的要求。首先是商用的存儲系統(tǒng)沒有對小文件存儲和讀取的環(huán)境進行有針對性的優(yōu)化;其次,文件數(shù)量大,網(wǎng)絡(luò)存儲設(shè)備無法支撐;另外,整個系統(tǒng)所連接的服務器也越來越多,網(wǎng)絡(luò)連接數(shù)已經(jīng)到達了網(wǎng)絡(luò)存儲設(shè)備的極限。此外,商用存儲系統(tǒng)擴容成本高,10T的存儲容量需要幾百萬,而且存在單點故障,容災和安全性無法得到很好的保證。
二、淘寶網(wǎng)自主開發(fā)的目的
商用軟件很難滿足大規(guī)模系統(tǒng)的應用需求,無論存儲還是CDN還是負載均衡,因為在廠商實驗室端,很難實現(xiàn)如此大的數(shù)據(jù)規(guī)模測試。 研發(fā)過程中,將開源和自主開發(fā)相結(jié)合,會有更好的可控性,系統(tǒng)出問題了,完全可以從底層解決問題,系統(tǒng)擴展性也更高。 在一定規(guī)模效應基礎(chǔ)上,研發(fā)的投入都是值得的。當規(guī)模超過交叉點后自主研發(fā)才能收到較好的經(jīng)濟效果。實際上淘寶網(wǎng)的規(guī)模已經(jīng)遠遠超過了交叉點。 自主研發(fā)的系統(tǒng)可在軟件和硬件多個層次不斷的優(yōu)化。
三、淘寶TFS的介紹
1、 TFS 1.0版本
從2006年開始,淘寶網(wǎng)決定自己開發(fā)一套針對海量小文件存儲難題的文件系統(tǒng),用于解決自身圖片存儲的難題。到2007年6月,TFS(淘寶文件系統(tǒng),Taobao File System)正式上線運營。在生產(chǎn)環(huán)境中應用的集群規(guī)模達到了200臺PC Server(146G*6 SAS 15K Raid5),文件數(shù)量達到上億級別;系統(tǒng)部署存儲容量: 140 TB;實際使用存儲容量: 50 TB;單臺支持隨機IOPS 200+,流量3MBps。
圖為淘寶集群文件系統(tǒng)TFS 1.0第一版的邏輯架構(gòu):集群由一對Name Server和多臺Data Server構(gòu)成,Name Server的兩臺服務器互為雙機,就是集群文件系統(tǒng)中管理節(jié)點的概念。
每個Data Server運行在一臺普通的Linux主機上 以block文件的形式存放數(shù)據(jù)文件(一般64M一個block) block存多份保證數(shù)據(jù)安全 利用ext3文件系統(tǒng)存放數(shù)據(jù)文件 磁盤raid5做數(shù)據(jù)冗余 文件名內(nèi)置元數(shù)據(jù)信息,用戶自己保存TFS文件名與實際文件的對照關(guān)系–使得元數(shù)據(jù)量特別小。
TFS最大的特點就是將一部分元數(shù)據(jù)隱藏到圖片的保存文件名上,大大簡化了元數(shù)據(jù),消除了管理節(jié)點對整體系統(tǒng)性能的制約,這一理念和目前業(yè)界流行的 “對象存儲”較為類似。傳統(tǒng)的集群系統(tǒng)里面元數(shù)據(jù)只有1份,通常由管理節(jié)點來管理,因而很容易成為瓶頸。而對于淘寶網(wǎng)的用戶來說,圖片文件究竟用什么名字來保存實際上用戶并不關(guān)心,因此TFS在設(shè)計規(guī)劃上考慮在圖片的保存文件名上暗藏了一些元數(shù)據(jù)信息,例如圖片的大小、時間、訪問頻次等等信息,包括所在的邏輯塊號。而在元數(shù)據(jù)上,實際上保存的信息很少,因此元數(shù)據(jù)結(jié)構(gòu)非常簡單。僅僅只需要一個fileID,能夠準確定位文件在什么地方。由于大量的文件信息都隱藏在文件名中,整個系統(tǒng)完全拋棄了傳統(tǒng)的目錄樹結(jié)構(gòu),因為目錄樹開銷最大。拿掉后,整個集群的高可擴展性極大提高。
2、 TFS 1.3版本
到2009年6月,TFS 1.3版本上線,集群規(guī)模大大擴展,部署到淘寶的圖片生產(chǎn)系統(tǒng)上,整個系統(tǒng)已經(jīng)從原有200臺PC服務器擴增至440臺PC Server(300G*12 SAS 15K RPM) + 30臺PC Server (600G*12 SAS 15K RPM)。支持文件數(shù)量也擴容至百億級別;系統(tǒng)部署存儲容量:1800TB(1.8PB);當前實際存儲容量:995TB;單臺Data Server支持隨機IOPS 900+,流量15MB+;目前Name Server運行的物理內(nèi)存是217MB(服務器使用千兆網(wǎng)卡)。