自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揭秘淘寶自主研發(fā)的文件系統(tǒng):TFS

系統(tǒng)
目前,國內自主研發(fā)的文件系統(tǒng)可謂鳳毛麟角。淘寶在這一領域做了有效的探索和實踐,Taobao File System(TFS)作為淘寶內部使用的分布式文件系統(tǒng),針對海量小文件的隨機讀寫訪問性能做了特殊優(yōu)化,承載著淘寶主站所有圖片、商品描述等數(shù)據(jù)存儲。本文揭秘了淘寶自主研發(fā)的文件系統(tǒng)TFS那些事兒。

TFS(Taobao FileSystem)是一個高可擴展、高可用、高性能、面向互聯(lián)網(wǎng)服務的分布式文件系統(tǒng),其設計目標是支持海量的非結構化數(shù)據(jù)。

目前,國內自主研發(fā)的文件系統(tǒng)可謂鳳毛麟角。淘寶在這一領域做了有效的探索和實踐,Taobao File System(TFS)作為淘寶內部使用的分布式文件系統(tǒng),針對海量小文件的隨機讀寫訪問性能做了特殊優(yōu)化,承載著淘寶主站所有圖片、商品描述等數(shù)據(jù)存儲。

最近,淘寶核心系統(tǒng)團隊工程師楚材(李震)在其官方博客上撰文(《TFS簡介》,以下簡稱文章)簡要介紹了TFS系統(tǒng)的基本情況,引起了社區(qū)的關注。

文章首先概括了TFS的特點:

  • 完全扁平化的數(shù)據(jù)組織結構,拋棄了傳統(tǒng)文件系統(tǒng)的目錄結構。
  • 在塊設備基礎上建立自有的文件系統(tǒng),減少EXT3等文件系統(tǒng)數(shù)據(jù)碎片帶來的性能損耗。
  • 單進程管理單塊磁盤的方式,摒除RAID5機制。
  • 帶有HA機制的中央控制節(jié)點,在安全穩(wěn)定和性能復雜度之間取得平衡。
  • 盡量縮減元數(shù)據(jù)大小,將元數(shù)據(jù)全部加載入內存,提升訪問速度。
  • 跨機架和IDC的負載均衡和冗余安全策略。
  • 完全平滑擴容。

當前,TFS在淘寶的應用規(guī)模達到“數(shù)百臺PCServer,PB級數(shù)據(jù)量,百億數(shù)據(jù)級別”,對于其性能參數(shù),楚材透漏:

TFS在淘寶的部署環(huán)境中前端有兩層緩沖,到達TFS系統(tǒng)的請求非常離散,所以TFS內部是沒有任何數(shù)據(jù)的內存緩沖的,包括傳統(tǒng)文件系統(tǒng)的內存緩沖也不存 在......基本上我們可以達到單塊磁盤隨機IOPS(即I/O per second)理論最大值的60%左右,整機的輸出隨盤數(shù)增加而線性增加。

TFS的邏輯架構圖1如下所示:

圖1. TFS邏輯架構圖(來源:淘寶核心系統(tǒng)團隊博客)

楚材結合架構圖做了進一步說明:

  1. TFS尚未對最終用戶提供傳統(tǒng)文件系統(tǒng)API,需要通過TFSClient進行接口訪問,現(xiàn)有JAVA、JNI、C、PHP的客戶端
  2. TFS的NameServer作為中心控制節(jié)點,監(jiān)控所有數(shù)據(jù)節(jié)點的運行狀況,負責讀寫調度的負載均衡,同時管理一級元數(shù)據(jù)用來幫助客戶端定位需要訪問的數(shù)據(jù)節(jié)點
  3. TFS的DataServer作為數(shù)據(jù)節(jié)點,負責數(shù)據(jù)實際發(fā)生的負載均衡和數(shù)據(jù)冗余,同時管理二級元數(shù)據(jù)幫助客戶端獲取真實的業(yè)務數(shù)據(jù)。

文章發(fā)表以后,讀者反響熱烈,在評論中提出了各種問題與作者楚材進行技術交流,由此可見國內社區(qū)對自主研發(fā)文件系統(tǒng)的關注程度。

為了讓讀者更深入地了解TFS的奧秘,InfoQ中文站針對TFS的來由、運行環(huán)境、擴展性、架構、發(fā)展規(guī)劃及開源事宜等問題對楚材(李震)進行了專訪。

Q:淘寶為何會選擇自主研發(fā)文件系統(tǒng)?

楚材:TFS(Taobao File System),是淘寶自主研發(fā)的一套分布式文件系統(tǒng),用于存儲淘寶網(wǎng)主站的數(shù)據(jù),例如商品圖片、商品描述、交易快照、社區(qū)圖片等等等等。

這些數(shù)據(jù)的一個突出特點是單個文件尺寸較小,通常不大于1MB,但是數(shù)量巨大,傳統(tǒng)的文件系統(tǒng)或者網(wǎng)絡存儲設備很難解決類似的問題。

淘寶網(wǎng)最早采用NetApp提供的網(wǎng)絡存儲設備,但是在2006~2007年期間,由于數(shù)據(jù)量的急劇膨脹,我們面臨著系統(tǒng)更新?lián)Q代的壓力,而由于應用連接數(shù)量和文件數(shù)量的限制,實際上簡單的升級已經變得非常昂貴且得不償失了。

數(shù)據(jù)是淘寶應用的核心,在這方面我們需要提供更加安全、高效、廉價的解決方案,需要發(fā)展自己的技術,更加適應淘寶網(wǎng)自身的應用特性。經過評估,已有的一些開源分布式文件系統(tǒng)都無法完全滿足我們需求。淘寶網(wǎng)也許是當時國內互聯(lián)網(wǎng)最先遇到類似問題的公司,當然也可能是其他公司遇到但未進行相關的宣傳,總之,當時并不像現(xiàn)在一樣有一些相對可靠的開源系統(tǒng)可以選擇。

Q:TFS系統(tǒng)的運行環(huán)境如何?

楚材:在做TFS選型的時候,我們依照當時淘寶網(wǎng)使用的主流操作系統(tǒng)使用了REHL,并構建在LINUX的EXT3文件系統(tǒng)上。選擇REHL的理由是開源操作系統(tǒng),我們有更多的自由度,同時成本也更加節(jié)省。

關于硬件平臺,隨著硬件的發(fā)展和我們認識的變化,經過了一個相對比較長的變遷。分布式文件系統(tǒng)對CPU的要求并不高,同時由于我們采用了一些特殊的手段,也使得系統(tǒng)元數(shù)據(jù)減少,那么對內存大小的要求也并不高了,所有的性能和成本瓶頸都集中在了磁盤IO上。我們所有硬件架構的演變也都體現(xiàn)在磁盤的使用方式上。

最早我們使用SAS146G×6的磁盤進行存儲,后來換成了SAS300G×6的磁盤,使用了RAID5機制,這也是當時硬件平臺的主流。當我們積累了一定的經驗并逐步對系統(tǒng)穩(wěn)定性有了信心之后,這種方式就逐步落后了。RAID5機制的備份和我們已經在應用層實現(xiàn)的數(shù)據(jù)冗余功能重復,磁盤空間被大量浪費,RAID卡的工作原理也無法優(yōu)化TFS更加注重隨機IO的特性,最終我們去除了RAID卡,并使用多進程,每個進程管理一塊磁盤的方式,充分發(fā)揮磁盤的隨機讀寫性能。

SAS300G×6的磁盤我們使用了一段時間,相對比較穩(wěn)定,這讓我們有信心使用更大容量的節(jié)點而不會過于擔心服務器失效帶來的數(shù)據(jù)遷移對系統(tǒng)性能的影響,當前TFS主要的機型使用SAS300G×12的磁盤配置。

隨著淘寶網(wǎng)前端的CDN越來越高效、穩(wěn)定,到達TFS的請求流量也更加平緩,這讓我們有可能對單個節(jié)點的服務能力做出更加可靠的規(guī)劃,也可以使用更加廉價的存儲設備,未來我們的主要存儲節(jié)點將使用1TSATA×12甚至更大的磁盤設備,進一步降低成本。

Q:TFS的應用規(guī)模達到數(shù)百臺PC server和PB級數(shù)據(jù)量,其擴展性如何?架構上是如何保證的?

楚材:在TFS中我們將大量的小文件合并成為一個大文件,類似GFS中Chunk的概念,而Chunk的定位信息我們稱之為一級索引,而chunk內部具體的文件定位信息我們稱之為二級索引,同時在TFS文件名稱中包含這些索引信息,在用戶寫入一個文件之前,他必須向TFS系統(tǒng)申請一個文件名稱。這種方式雖然在某些情況下顯得不像傳統(tǒng)文件系統(tǒng)那樣靈活,但也給了我們系統(tǒng)更大的可擴展性。我們保證可以中心控制節(jié)點的內存可以支撐PB級別的一級索引,而二級索引僅需要針對單臺數(shù)據(jù)量。這樣,我們就避免了數(shù)據(jù)量膨脹帶來的擴容難度。

當存儲容量出現(xiàn)不足,我們需要進行系統(tǒng)擴容的時候,可以根據(jù)數(shù)據(jù)增長情況進行規(guī)劃,任意數(shù)量的加入提供相應存儲的服務器。而這些新的存儲服務器會向中心控制節(jié)點進行報告。而中心控制節(jié)點在有數(shù)據(jù)寫入時,將根據(jù)已存儲容量的百分比、系統(tǒng)當前負載等參數(shù)動態(tài)地分配寫入的服務器。同時,在系統(tǒng)空閑時間段,中心控制節(jié)點也會根據(jù)當前的數(shù)據(jù)分布情況制定數(shù)據(jù)遷移計劃,并逐步完成數(shù)據(jù)平衡。與此類似,當發(fā)生服務器崩潰時,中心控制節(jié)點也會進行數(shù)據(jù)遷移以保證足夠的備份,同時也會進行數(shù)據(jù)均衡操作。這些操作都是自動進行的,不需要人工干預。

這種方式在1000臺以內的集群基本上能夠工作良好,如果集群規(guī)模更大,中心控制節(jié)點可能會出現(xiàn)一些性能瓶頸,屆時我們可以使用一個分布式集群來解決,相應已經比較成熟的技術方案現(xiàn)在已經比較多了。

Q:您在介紹TFS的特點時,多次提到“性能”這個關鍵詞,請問對于一個文件系統(tǒng)來說,性能一般應該考慮哪些因素?目前,提高文件系統(tǒng)性能的通用方法有哪些?

楚材:現(xiàn)在我們可以討論一下TFS的性能考量的維度了。其實當前每個流行的分布式文件系統(tǒng)都有自己的側重點,分別針對自己不同的應用場景。

對于離線型的數(shù)據(jù)分析需求,由于數(shù)據(jù)總量巨大,底層分布式文件系統(tǒng)更加注重系統(tǒng)的整體吞吐率,為了適應當前流行的map_reduce模型,這一類的文件系統(tǒng)會將文件切成多份,分而治之。同時和上層的邏輯配合,采用大塊順序寫入、讀出的方式來提升性能,典型的代表就是Hadoop使用的HDFS。

實際提供線上服務的分布式文件系統(tǒng)中,也根據(jù)服務類型的不同而采用差異化的存儲方式,例如針對音、視頻等相對比較大的文件,可能采用和離線應用相同的方式將文件切片并發(fā)讀寫訪問,從而達到更高的傳輸速度。由于相同容量下文件數(shù)量比較少,甚至有可能完全實現(xiàn)類似傳統(tǒng)文件系統(tǒng)的目錄、權限等功能,而不會受到inode的限制。如果面臨淘寶相同的海量小文件存儲,這種方式就完全無法提供性能的支持了,inode數(shù)量的膨脹會很快吃掉大量的昂貴內存,如果要平衡成本將部分inode放入磁盤,面對基本上完全隨機、沒有熱點的訪問又無法保證尋址的效率,我們只能通過減少元數(shù)據(jù)的方式來解決這個問題。

為什么說我們的TFS面臨著完全隨機、基本上沒有熱點的數(shù)據(jù)訪問?在淘寶的數(shù)據(jù)部署中,TFS前端有兩層更加靠近用戶的緩存系統(tǒng)來保證用戶展示頁面的速度,最終到達TFS的請求大概只有總請求數(shù)量的2%左右,隨著前端緩沖的效率不斷提升,這個比例還會繼續(xù)下降,我們可以想象一下是否仍然有熱點數(shù)據(jù)存在。與此同時,淘寶網(wǎng)的業(yè)務特點決定了相對于讀取請求,寫入請求量不在一個數(shù)量級上,而修改操作量就更少,這就決定了我們使用進行隨機修改、隨機寫入的方式來避免順序寫入不進行修改給隨機讀取帶來的成本。

不同的應用場景,不同的存儲架構,不同的性能考量,有什么通用的性能優(yōu)化手段嗎?從我們的實踐經驗來看,似乎沒有,很難有一種方法解決所有的問題,或者說解決了這些問題之后,大家會發(fā)現(xiàn)相對專用的文件系統(tǒng),通用系統(tǒng)總是不能達到你預期的性能,同時也帶來了大量開發(fā)和調優(yōu)方面的復雜性。這種情況下,也許我們建立不同的集群解決不同的問題更加高效,這一切都取決于你支撐的業(yè)務需求是怎么樣的,Google級別集群規(guī)模的架構和簡單搭建起來的NFS都有其存在的價值。

當然,還是有一些通用的規(guī)則的。如果你需要支持的是一個線上服務,那你就要盡量減少一次請求引發(fā)的IO數(shù)量,IO包括網(wǎng)絡及物理磁盤,這些操作引發(fā)的性能開銷是由物理結構決定,無法用技術手段去優(yōu)化的。也就是說,這些操作的數(shù)量實質上形成了你這個系統(tǒng)的性能天花板,當你設計一個文件系統(tǒng)的架構時,你可以根據(jù)這個天花板預估到在不同情況下這套系統(tǒng)的性能表現(xiàn)是怎么樣的。

其次,你需要在并發(fā)和同步開銷之間做出平衡,根據(jù)業(yè)務的特點選擇更適合于你自己的方案,例如從一塊磁盤上連續(xù)讀1MB數(shù)據(jù)和通過網(wǎng)絡并發(fā)從10塊磁盤上分別讀取100KB數(shù)據(jù)返回給用戶,你會選擇哪種?那么從一塊磁盤上連續(xù)讀取100MB數(shù)據(jù)和100并發(fā)分別讀取讀取1MB呢,系統(tǒng)是否有能力支撐這樣的并發(fā)?絕大部分時候,我們是在做類似的選擇。

第三,你需要在成本和性能之間做出平衡,我們可以很方便的使用內存型緩沖來極大地提升系統(tǒng)性能,如果你的系統(tǒng)熱點數(shù)據(jù)集中的話。隨著SSD技術的成熟,它可以提供的隨機讀性能相對傳統(tǒng)機械磁盤讓人興奮,隨機寫性能也有了極大的改善,雖然不像讀取提升的那樣夸張。如果你的應用讀寫比例比較高,又可以承受成本,盡量使用SSD吧,雖然當前的成本還是相對昂貴的。

Q:從TFS的邏輯架構圖來看,NameServer作為中心控制節(jié)點,DataServer作為數(shù)據(jù)節(jié)點,這樣的架構基于哪些因素或者需求的考慮?

楚材:TFS有中心控制節(jié)點和數(shù)據(jù)節(jié)點的區(qū)分,分別管理兩級索引解決數(shù)據(jù)訪問的尋址和傳輸。相對當前一些開源分布式系統(tǒng)的去中心化趨勢,似乎不是非常優(yōu)秀。但如同對性能的論述一樣,每種系統(tǒng)架構都有其存在的價值,中心節(jié)點的存在可以保證事務性,我們在某些情況下必須保證寫入數(shù)據(jù)的強一致性,同時在當前的應用規(guī)模中也可以非常安全、高效的解決問題。如果有更高的可用性、擴展性需求,我們會在TFS部分中部分體現(xiàn)去中心化的思想。

Q:未來TFS的發(fā)展計劃如何?

楚材:TFS未來的開發(fā)首先仍然會立足于淘寶網(wǎng)自身的業(yè)務需求,同時會照顧開發(fā)社區(qū)中的需求。我們會逐步支持大文件的存儲,也會支持目錄和用戶權限,同時計劃實現(xiàn)按照訪問特性分布的分級存儲,盡量在性能和成本之間達到一個平衡,還有一些更加精細化的管理功能,例如數(shù)據(jù)量配額的管理等等。從上面的一些討論來看,我們不大會做一個通用的分布式文件系統(tǒng),始終會專注解決當前尚無很好解決方案的問題。

Q:您在博客中提到9月份建立TFS開源社區(qū),這對國內社區(qū)是個絕佳的學習機會,請問目能否再描述一點開源的細節(jié)?

楚材:TFS計劃在9月底開源,而今年6月底,淘寶網(wǎng)將推出自己的開源社區(qū)——code.taobao.org,TFS將完全基于這個開源社區(qū)進行開源,大家馬上就可以看到。同時已經基本確定使用GPL V2開源版權協(xié)議。

Q:對于有志于參與到TFS或者目前從事其他類似系統(tǒng)級核心應用的開發(fā)人員來說,請問有什么好的建議?

楚材:對于有志于參加TFS開發(fā),或者自身已經在從事基礎平臺、核心系統(tǒng)研發(fā)的同行,我相信大家都有相同的感受,在當今計算機體系結構內,我們很難有革命性的技術進展。當前已知的大規(guī)模的分布式文件系統(tǒng)都構建在Unix類操作系統(tǒng)之上,或者說絕大部分都構建在Linux之上,這也是從成本方面進行的考量。而各種分布式文件系統(tǒng)架構也大同小異,決定是否成功的關鍵在于細節(jié),這些細節(jié)包括操作系統(tǒng)級別的特化、文件系統(tǒng)級別的特化、實現(xiàn)方面是否足夠優(yōu)秀、足夠穩(wěn)定等等。因此你需要對系統(tǒng)內核有所了解,對文件系統(tǒng)有所了解,比如你知道EXT3的組織方式才可能盡量避免讀取一段數(shù)據(jù)卻引發(fā)多次磁盤磁頭移動的情況,這樣你才能最大化的利用好系統(tǒng)資源。而實現(xiàn)的特化可能體現(xiàn)在一個優(yōu)秀算法的編寫、一個高效的通信機制等等,這就要求你有扎實的代碼編寫能力,對算法和數(shù)據(jù)結構有頗深的造詣。大家都知道,細節(jié)決定成??!

【專家介紹】李震,花名楚材,工作于淘寶技術研發(fā)部核心系統(tǒng)研發(fā),負責存儲組的開發(fā),關注領域主要包括大集群分布式系統(tǒng)的研發(fā)、海量數(shù)據(jù)處理、海量數(shù)據(jù)檢索等等。

責任編輯:黃丹 來源: infoq
相關推薦

2014-01-10 10:39:35

分布式文件系統(tǒng)TFS

2014-01-14 15:56:54

分布式文件系統(tǒng)TFS淘寶

2014-01-15 13:56:28

分布式文件系統(tǒng)TFS淘寶

2014-01-15 16:49:48

分布式文件系統(tǒng)TFS淘寶

2014-01-15 14:00:33

分布式文件系統(tǒng)TFS淘寶

2011-09-01 10:10:56

OceanBase海量淘寶

2011-01-06 14:03:18

2010-03-03 08:47:23

朝鮮操作系統(tǒng)

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2013-05-27 14:46:06

文件系統(tǒng)分布式文件系統(tǒng)

2012-11-14 16:12:17

2010-04-30 15:51:48

Unix系統(tǒng)

2011-01-13 14:10:30

Linux文件系統(tǒng)

2012-09-19 13:48:33

pNFS文件系統(tǒng)

2022-05-25 10:47:01

淘寶開發(fā)模式

2009-04-08 15:36:46

LinuxLustre集群文件系統(tǒng)

2010-05-10 19:03:00

Unix文件

2020-01-15 09:10:13

LinuxWindowsmacOS
點贊
收藏

51CTO技術棧公眾號