楚材結(jié)合架構(gòu)圖做了進(jìn)一步說(shuō)明:
1、TFS尚未對(duì)最終用戶提供傳統(tǒng)文件系統(tǒng)API,需要通過(guò)TFSClient進(jìn)行接口訪問(wèn),現(xiàn)有JAVA、JNI、C、PHP的客戶端
2、TFS的NameServer作為中心控制節(jié)點(diǎn),監(jiān)控所有數(shù)據(jù)節(jié)點(diǎn)的運(yùn)行狀況,負(fù)責(zé)讀寫(xiě)調(diào)度的負(fù)載均衡,同時(shí)管理一級(jí)元數(shù)據(jù)用來(lái)幫助客戶 端定位需要訪問(wèn)的數(shù)據(jù)節(jié)點(diǎn)
3、TFS的DataServer作為數(shù)據(jù)節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)實(shí)際發(fā)生的負(fù)載均衡和數(shù)據(jù)冗余,同時(shí)管理二級(jí)元數(shù)據(jù)幫助客戶端獲取真實(shí)的業(yè)務(wù)數(shù)據(jù)。
文章發(fā)表以后,讀者反響熱烈,在評(píng)論中提出了各種問(wèn)題與作者楚材進(jìn)行技術(shù)交流,由此可見(jiàn)國(guó)內(nèi)社區(qū)對(duì)自主研發(fā)文件系統(tǒng)的關(guān)注程度。
為了讓讀者更深入地了解TFS的奧秘,InfoQ中文站針對(duì)TFS的來(lái)由、運(yùn)行環(huán)境、擴(kuò)展性、架構(gòu)、發(fā)展規(guī)劃及開(kāi)源事 宜等問(wèn)題對(duì)楚材(李震)進(jìn)行了專(zhuān)訪。
InfoQ:淘寶為何會(huì)選擇自主研發(fā)文件系統(tǒng)?
TFS(Taobao File System),是淘寶自主研發(fā)的一套分布式文件系統(tǒng),用于存儲(chǔ)淘寶網(wǎng)主站的數(shù)據(jù),例如商品圖片、商品描述、交易快照、社區(qū)圖片等等等等。
這些數(shù)據(jù)的一個(gè)突出特點(diǎn)是單個(gè)文件尺寸較小,通常不大于1MB,但是數(shù)量巨大,傳統(tǒng)的文件系統(tǒng)或者網(wǎng)絡(luò)存儲(chǔ)設(shè)備很難解決類(lèi)似的問(wèn)題。
淘寶網(wǎng)最早采用NetApp提供的網(wǎng)絡(luò)存儲(chǔ)設(shè)備,但是在2006~2007年期間,由于數(shù)據(jù)量的急劇膨脹,我們面臨著系統(tǒng)更新?lián)Q代的壓力,而由于應(yīng) 用連接數(shù)量和文件數(shù)量的限制,實(shí)際上簡(jiǎn)單的升級(jí)已經(jīng)變得非常昂貴且得不償失了。
數(shù)據(jù)是淘寶應(yīng)用的核心,在這方面我們需要提供更加安全、高效、廉價(jià)的解決方案,需要發(fā)展自己的技術(shù),更加適應(yīng)淘寶網(wǎng)自身的應(yīng)用特性。經(jīng)過(guò)評(píng)估,已有的一些 開(kāi)源分布式文件系統(tǒng)都無(wú)法完全滿足我們需求。淘寶網(wǎng)也許是當(dāng)時(shí)國(guó)內(nèi)互聯(lián)網(wǎng)最先遇到類(lèi)似問(wèn)題的公司,當(dāng)然也可能是其他公司遇到但未進(jìn)行相關(guān)的宣傳,總之,當(dāng) 時(shí)并不像現(xiàn)在一樣有一些相對(duì)可靠的開(kāi)源系統(tǒng)可以選擇。
InfoQ:TFS系統(tǒng)的運(yùn)行環(huán)境如何?
在做TFS選型的時(shí)候,我們依照當(dāng)時(shí)淘寶網(wǎng)使用的主流操作系統(tǒng)使用了REHL,并構(gòu)建在LINUX的EXT3文件系統(tǒng)上。選擇REHL的理由是開(kāi)源操作系 統(tǒng),我們有更多的自由度,同時(shí)成本也更加節(jié)省。
關(guān)于硬件平臺(tái),隨著硬件的發(fā)展和我們認(rèn)識(shí)的變化,經(jīng)過(guò)了一個(gè)相對(duì)比較長(zhǎng)的變遷。分布式文件系統(tǒng)對(duì)CPU的要求并不高,同時(shí)由于我們采用了一些特殊的 手段,也使得系統(tǒng)元數(shù)據(jù)減少,那么對(duì)內(nèi)存大小的要求也并不高了,所有的性能和成本瓶頸都集中在了磁盤(pán)IO上。我們所有硬件架構(gòu)的演變也都體現(xiàn)在磁盤(pán)的使用 方式上。
最早我們使用SAS146G×6的磁盤(pán)進(jìn)行存儲(chǔ),后來(lái)?yè)Q成了SAS300G×6的磁盤(pán),使用了RAID5機(jī)制,這也是當(dāng)時(shí)硬件平臺(tái)的主流。當(dāng)我們積 累了一定的經(jīng)驗(yàn)并逐步對(duì)系統(tǒng)穩(wěn)定性有了信心之后,這種方式就逐步落后了。RAID5機(jī)制的備份和我們已經(jīng)在應(yīng)用層實(shí)現(xiàn)的數(shù)據(jù)冗余功能重復(fù),磁盤(pán)空間被大量 浪費(fèi),RAID卡的工作原理也無(wú)法優(yōu)化TFS更加注重隨機(jī)IO的特性,最終我們?nèi)コ薘AID卡,并使用多進(jìn)程,每個(gè)進(jìn)程管理一塊磁盤(pán)的方式,充分發(fā)揮磁 盤(pán)的隨機(jī)讀寫(xiě)性能。
SAS300G×6的磁盤(pán)我們使用了一段時(shí)間,相對(duì)比較穩(wěn)定,這讓我們有信心使用更大容量的節(jié)點(diǎn)而不會(huì)過(guò)于擔(dān)心服務(wù)器失效帶來(lái)的數(shù)據(jù)遷移對(duì)系統(tǒng)性能 的影響,當(dāng)前TFS主要的機(jī)型使用SAS300G×12的磁盤(pán)配置。
隨著淘寶網(wǎng)前端的CDN越來(lái)越高效、穩(wěn)定,到達(dá)TFS的請(qǐng)求流量也更加平緩,這讓我們有可能對(duì)單個(gè)節(jié)點(diǎn)的服務(wù)能力做出更加可靠的規(guī)劃,也可以使用更加廉價(jià) 的存儲(chǔ)設(shè)備,未來(lái)我們的主要存儲(chǔ)節(jié)點(diǎn)將使用1TSATA×12甚至更大的磁盤(pán)設(shè)備,進(jìn)一步降低成本。
InfoQ:TFS的應(yīng)用規(guī)模達(dá)到數(shù)百臺(tái)PC server和PB級(jí)數(shù)據(jù)量,其擴(kuò)展性如何?架構(gòu)上是如何保證的?
在TFS中我們將大量的小文件合并成為一個(gè)大文件,類(lèi)似GFS中Chunk的概念,而Chunk的定位信息我們稱(chēng)之為一級(jí)索引,而chunk內(nèi)部具體的文 件定位信息我們稱(chēng)之為二級(jí)索引,同時(shí)在TFS文件名稱(chēng)中包含這些索引信息,在用戶寫(xiě)入一個(gè)文件之前,他必須向TFS系統(tǒng)申請(qǐng)一個(gè)文件名稱(chēng)。這種方式雖然在 某些情況下顯得不像傳統(tǒng)文件系統(tǒng)那樣靈活,但也給了我們系統(tǒng)更大的可擴(kuò)展性。我們保證可以中心控制節(jié)點(diǎn)的內(nèi)存可以支撐PB級(jí)別的一級(jí)索引,而二級(jí)索引僅需 要針對(duì)單臺(tái)數(shù)據(jù)量。這樣,我們就避免了數(shù)據(jù)量膨脹帶來(lái)的擴(kuò)容難度。
當(dāng)存儲(chǔ)容量出現(xiàn)不足,我們需要進(jìn)行系統(tǒng)擴(kuò)容的時(shí)候,可以根據(jù)數(shù)據(jù)增長(zhǎng)情況進(jìn)行規(guī)劃,任意數(shù)量的加入提供相應(yīng)存儲(chǔ)的服務(wù)器。而這些新的存儲(chǔ)服務(wù)器會(huì)向 中心控制節(jié)點(diǎn)進(jìn)行報(bào)告。而中心控制節(jié)點(diǎn)在有數(shù)據(jù)寫(xiě)入時(shí),將根據(jù)已存儲(chǔ)容量的百分比、系統(tǒng)當(dāng)前負(fù)載等參數(shù)動(dòng)態(tài)地分配寫(xiě)入的服務(wù)器。同時(shí),在系統(tǒng)空閑時(shí)間段, 中心控制節(jié)點(diǎn)也會(huì)根據(jù)當(dāng)前的數(shù)據(jù)分布情況制定數(shù)據(jù)遷移計(jì)劃,并逐步完成數(shù)據(jù)平衡。與此類(lèi)似,當(dāng)發(fā)生服務(wù)器崩潰時(shí),中心控制節(jié)點(diǎn)也會(huì)進(jìn)行數(shù)據(jù)遷移以保證足夠 的備份,同時(shí)也會(huì)進(jìn)行數(shù)據(jù)均衡操作。這些操作都是自動(dòng)進(jìn)行的,不需要人工干預(yù)。
這種方式在1000臺(tái)以?xún)?nèi)的集群基本上能夠工作良好,如果集群規(guī)模更大,中心控制節(jié)點(diǎn)可能會(huì)出現(xiàn)一些性能瓶頸,屆時(shí)我們可以使用一個(gè)分布式集群來(lái)解決,相 應(yīng)已經(jīng)比較成熟的技術(shù)方案現(xiàn)在已經(jīng)比較多了。
InfoQ:您在介紹TFS的特點(diǎn)時(shí),多次提到”性能”這個(gè)關(guān)鍵詞,請(qǐng)問(wèn)對(duì)于一個(gè)文件系統(tǒng)來(lái)說(shuō),性能一般應(yīng)該考慮哪些因素?目前,提高文件系 統(tǒng)性能的通用方法有哪些?
現(xiàn)在我們可以討論一下TFS的性能考量的維度了。其實(shí)當(dāng)前每個(gè)流行的分布式文件系統(tǒng)都有自己的側(cè)重點(diǎn),分別針對(duì)自己不同的應(yīng)用場(chǎng)景。
對(duì)于離線型的數(shù)據(jù)分析需求,由于數(shù)據(jù)總量巨大,底層分布式文件系統(tǒng)更加注重系統(tǒng)的整體吞吐率,為了適應(yīng)當(dāng)前流行的map_reduce模型,這一類(lèi) 的文件系統(tǒng)會(huì)將文件切成多份,分而治之。同時(shí)和上層的邏輯配合,采用大塊順序?qū)懭?、讀出的方式來(lái)提升性能,典型的代表就是Hadoop使用的HDFS。
實(shí)際提供線上服務(wù)的分布式文件系統(tǒng)中,也根據(jù)服務(wù)類(lèi)型的不同而采用差異化的存儲(chǔ)方式,例如針對(duì)音、視頻等相對(duì)比較大的文件,可能采用和離線應(yīng)用相同 的方式將文件切片并發(fā)讀寫(xiě)訪問(wèn),從而達(dá)到更高的傳輸速度。由于相同容量下文件數(shù)量比較少,甚至有可能完全實(shí)現(xiàn)類(lèi)似傳統(tǒng)文件系統(tǒng)的目錄、權(quán)限等功能,而不會(huì) 受到inode的限制。如果面臨淘寶相同的海量小文件存儲(chǔ),這種方式就完全無(wú)法提供性能的支持了,inode數(shù)量的膨脹會(huì)很快吃掉大量的昂貴內(nèi)存,如果要 平衡成本將部分inode放入磁盤(pán),面對(duì)基本上完全隨機(jī)、沒(méi)有熱點(diǎn)的訪問(wèn)又無(wú)法保證尋址的效率,我們只能通過(guò)減少元數(shù)據(jù)的方式來(lái)解決這個(gè)問(wèn)題。
為什么說(shuō)我們的TFS面臨著完全隨機(jī)、基本上沒(méi)有熱點(diǎn)的數(shù)據(jù)訪問(wèn)?在淘寶的數(shù)據(jù)部署中,TFS前端有兩層更加靠近用戶的緩存系統(tǒng)來(lái)保證用戶展示頁(yè)面 的速度,最終到達(dá)TFS的請(qǐng)求大概只有總請(qǐng)求數(shù)量的2%左右,隨著前端緩沖的效率不斷提升,這個(gè)比例還會(huì)繼續(xù)下降,我們可以想象一下是否仍然有熱點(diǎn)數(shù)據(jù)存 在。與此同時(shí),淘寶網(wǎng)的業(yè)務(wù)特點(diǎn)決定了相對(duì)于讀取請(qǐng)求,寫(xiě)入請(qǐng)求量不在一個(gè)數(shù)量級(jí)上,而修改操作量就更少,這就決定了我們使用進(jìn)行隨機(jī)修改、隨機(jī)寫(xiě)入的方 式來(lái)避免順序?qū)懭氩贿M(jìn)行修改給隨機(jī)讀取帶來(lái)的成本。
不同的應(yīng)用場(chǎng)景,不同的存儲(chǔ)架構(gòu),不同的性能考量,有什么通用的性能優(yōu)化手段嗎?從我們的實(shí)踐經(jīng)驗(yàn)來(lái)看,似乎沒(méi)有,很難有一種方法解決所有的問(wèn)題, 或者說(shuō)解決了這些問(wèn)題之后,大家會(huì)發(fā)現(xiàn)相對(duì)專(zhuān)用的文件系統(tǒng),通用系統(tǒng)總是不能達(dá)到你預(yù)期的性能,同時(shí)也帶來(lái)了大量開(kāi)發(fā)和調(diào)優(yōu)方面的復(fù)雜性。這種情況下,也 許我們建立不同的集群解決不同的問(wèn)題更加高效,這一切都取決于你支撐的業(yè)務(wù)需求是怎么樣的,Google級(jí)別集群規(guī)模的架構(gòu)和簡(jiǎn)單搭建起來(lái)的NFS都有其 存在的價(jià)值。
當(dāng)然,還是有一些通用的規(guī)則的。如果你需要支持的是一個(gè)線上服務(wù),那你就要盡量減少一次請(qǐng)求引發(fā)的IO數(shù)量,IO包括網(wǎng)絡(luò)及物理磁盤(pán),這些操作引發(fā) 的性能開(kāi)銷(xiāo)是由物理結(jié)構(gòu)決定,無(wú)法用技術(shù)手段去優(yōu)化的。也就是說(shuō),這些操作的數(shù)量實(shí)質(zhì)上形成了你這個(gè)系統(tǒng)的性能天花板,當(dāng)你設(shè)計(jì)一個(gè)文件系統(tǒng)的架構(gòu)時(shí),你 可以根據(jù)這個(gè)天花板預(yù)估到在不同情況下這套系統(tǒng)的性能表現(xiàn)是怎么樣的。
其次,你需要在并發(fā)和同步開(kāi)銷(xiāo)之間做出平衡,根據(jù)業(yè)務(wù)的特點(diǎn)選擇更適合于你自己的方案,例如從一塊磁盤(pán)上連續(xù)讀1MB數(shù)據(jù)和通過(guò)網(wǎng)絡(luò)并發(fā)從10塊磁 盤(pán)上分別讀取100KB數(shù)據(jù)返回給用戶,你會(huì)選擇哪種?那么從一塊磁盤(pán)上連續(xù)讀取100MB數(shù)據(jù)和100并發(fā)分別讀取讀取1MB呢,系統(tǒng)是否有能力支撐這 樣的并發(fā)?絕大部分時(shí)候,我們是在做類(lèi)似的選擇。
第三,你需要在成本和性能之間做出平衡,我們可以很方便的使用內(nèi)存型緩沖來(lái)極大地提升系統(tǒng)性能,如果你的系統(tǒng)熱點(diǎn)數(shù)據(jù)集中的話。隨著SSD技術(shù)的成熟,它 可以提供的隨機(jī)讀性能相對(duì)傳統(tǒng)機(jī)械磁盤(pán)讓人興奮,隨機(jī)寫(xiě)性能也有了極大的改善,雖然不像讀取提升的那樣夸張。如果你的應(yīng)用讀寫(xiě)比例比較高,又可以承受成 本,盡量使用SSD吧,雖然當(dāng)前的成本還是相對(duì)昂貴的。
InfoQ:從TFS的邏輯架構(gòu)圖來(lái)看,NameServer作為中心控制節(jié)點(diǎn),DataServer作為數(shù)據(jù)節(jié)點(diǎn),這樣的架構(gòu)基于哪些因素 或者需求的考慮?
TFS有中心控制節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的區(qū)分,分別管理兩級(jí)索引解決數(shù)據(jù)訪問(wèn)的尋址和傳輸。相對(duì)當(dāng)前一些開(kāi)源分布式系統(tǒng)的去中心化趨 勢(shì),似乎不是非常優(yōu)秀。但如同對(duì)性能的論述一樣,每種系統(tǒng)架構(gòu)都有其存在的價(jià)值,中心節(jié)點(diǎn)的存在可以保證事務(wù)性,我們?cè)谀承┣闆r下必須保證寫(xiě)入數(shù)據(jù)的強(qiáng)一 致性,同時(shí)在當(dāng)前的應(yīng)用規(guī)模中也可以非常安全、高效的解決問(wèn)題。如果有更高的可用性、擴(kuò)展性需求,我們會(huì)在TFS部分中部分體現(xiàn)去中心化的思想。
InfoQ:未來(lái)TFS的發(fā)展計(jì)劃如何?
TFS未來(lái)的開(kāi)發(fā)首先仍然會(huì)立足于淘寶網(wǎng)自身的業(yè)務(wù)需求,同時(shí)會(huì)照顧開(kāi)發(fā)社區(qū)中的需求。我們會(huì)逐步支持大文件的存儲(chǔ),也會(huì)支持目 錄和用戶權(quán)限,同時(shí)計(jì)劃實(shí)現(xiàn)按照訪問(wèn)特性分布的分級(jí)存儲(chǔ),盡量在性能和成本之間達(dá)到一個(gè)平衡,還有一些更加精細(xì)化的管理功能,例如數(shù)據(jù)量配額的管理等等。 從上面的一些討論來(lái)看,我們不大會(huì)做一個(gè)通用的分布式文件系統(tǒng),始終會(huì)專(zhuān)注解決當(dāng)前尚無(wú)很好解決方案的問(wèn)題。
InfoQ:您在博客中提到9月份建立TFS開(kāi)源社區(qū),這對(duì)國(guó)內(nèi)社區(qū)是個(gè)絕佳的學(xué)習(xí)機(jī)會(huì),請(qǐng)問(wèn)目能否再描述一點(diǎn)開(kāi)源的細(xì)節(jié)?
TFS計(jì)劃在9月底開(kāi)源,而今年6月底,淘寶網(wǎng)將推出自己的開(kāi)源社區(qū)–code.taobao.org,TFS 將完全基于這個(gè)開(kāi)源社區(qū)進(jìn)行開(kāi)源,大家馬上就可以看到。同時(shí)已經(jīng)基本確定使用GPL V2開(kāi)源版權(quán)協(xié)議。
InfoQ:對(duì)于有志于參與到TFS或者目前從事其他類(lèi)似系統(tǒng)級(jí)核心應(yīng)用的開(kāi)發(fā)人員來(lái)說(shuō),請(qǐng)問(wèn)有什么好的建議?
對(duì)于有志于參加TFS開(kāi)發(fā),或者自身已經(jīng)在從事基礎(chǔ)平臺(tái)、核心系統(tǒng)研發(fā)的同行,我相信大家都有相同的感受,在當(dāng)今計(jì)算機(jī)體系結(jié)構(gòu) 內(nèi),我們很難有革命性的技術(shù)進(jìn)展。當(dāng)前已知的大規(guī)模的分布式文件系統(tǒng)都構(gòu)建在Unix類(lèi)操作系統(tǒng)之上,或者說(shuō)絕大部分都構(gòu)建在Linux之上,這也是從成 本方面進(jìn)行的考量。而各種分布式文件系統(tǒng)架構(gòu)也大同小異,決定是否成功的關(guān)鍵在于細(xì)節(jié),這些細(xì)節(jié)包括操作系統(tǒng)級(jí)別的特化、文件系統(tǒng)級(jí)別的特化、實(shí)現(xiàn)方面是 否足夠優(yōu)秀、足夠穩(wěn)定等等。因此你需要對(duì)系統(tǒng)內(nèi)核有所了解,對(duì)文件系統(tǒng)有所了解,比如你知道EXT3的組織方式才可能盡量避免讀取一段數(shù)據(jù)卻引發(fā)多次磁盤(pán) 磁頭移動(dòng)的情況,這樣你才能最大化的利用好系統(tǒng)資源。而實(shí)現(xiàn)的特化可能體現(xiàn)在一個(gè)優(yōu)秀算法的編寫(xiě)、一個(gè)高效的通信機(jī)制等等,這就要求你有扎實(shí)的代碼編寫(xiě)能 力,對(duì)算法和數(shù)據(jù)結(jié)構(gòu)有頗深的造詣。大家都知道,細(xì)節(jié)決定成敗!
InfoQ中文站將繼續(xù)關(guān)注TFS等國(guó)內(nèi)自主研發(fā)文件系統(tǒng)的發(fā)展,也歡迎大家發(fā)表自己的看法。
專(zhuān)家介紹
李震,花名楚材,工作于淘寶技術(shù)研發(fā)部核心系統(tǒng)研發(fā),負(fù)責(zé)存儲(chǔ)組的開(kāi)發(fā),關(guān)注領(lǐng)域主要包括大集群分布式系統(tǒng)的研發(fā)、海量數(shù)據(jù)處理、海量數(shù)據(jù)檢索等 等。