淘寶數據產品技術架構分析
淘寶網擁有國內最具商業價值的海量數據。截至當前,每天有超過30億的店鋪、商品瀏覽記錄,10億在線商品數,上千萬的成交、收藏和評價數據。如何從這些數據中挖掘出真正的商業價值,進而幫助淘寶、商家進行企業的數據化運營,幫助消費者進行理性的購物決策,是淘寶數據平臺與產品部的使命。
為此,我們進行了一系列數據產品的研發,比如為大家所熟知的量子統計、數據魔方和淘寶指數等。盡管從業務層面來講,數據產品的研發難度并不高;但在“海量”的限定下,數據產品的計算、存儲和檢索難度陡然上升。本文將以數據魔方為例,向大家介紹淘寶在海量數據產品技術架構方面的探索。
淘寶海量數據產品技術架構
數據產品的一個最大特點是數據的非實時寫入,正因為如此,我們可以認為,在一定的時間段內,整個系統的數據是只讀的。這為我們設計緩存奠定了非常重要的基礎。
圖1 淘寶海量數據產品技術架構
按照數據的流向來劃分,我們把淘寶數據產品的技術架構分為五層(如圖1所示),分別是數據源、計算層、存儲層、查詢層和產品層。位于架構頂端的是我們的數據來源層,這里有淘寶主站的用戶、店鋪、商品和交易等數據庫,還有用戶的瀏覽、搜索等行為日志等。這一系列的數據是數據產品最原始的生命力所在。
在數據源層實時產生的數據,通過淘寶自主研發的數據傳輸組件DataX、DbSync和Timetunnel準實時地傳輸到一個有1500個節點的Hadoop集群上,這個集群我們稱之為“云梯”,是計算層的主要組成部分。在“云梯”上,我們每天有大約40000個作業對1.5PB的原始數據按照產品需求進行不同的MapReduce計算。這一計算過程通常都能在凌晨兩點之前完成。相對于前端產品看到的數據,這里的計算結果很可能是一個處于中間狀態的結果,這往往是在數據冗余與前端計算之間做了適當平衡的結果。
不得不提的是,一些對實效性要求很高的數據,例如針對搜索詞的統計數據,我們希望能盡快推送到數據產品前端。這種需求再采用“云梯”來計算效率將是比較低的,為此我們做了流式數據的實時計算平臺,稱之為“銀河”。“銀河”也是一個分布式系統,它接收來自TimeTunnel的實時消息,在內存中做實時計算,并把計算結果在盡可能短的時間內刷新到NoSQL存儲設備中,供前端產品調用。
容易理解,“云梯”或者“銀河”并不適合直接向產品提供實時的數據查詢服務。這是因為,對于“云梯”來說,它的定位只是做離線計算的,無法支持較高的性能和并發需求;而對于“銀河”而言,盡管所有的代碼都掌握在我們手中,但要完整地將數據接收、實時計算、存儲和查詢等功能集成在一個分布式系統中,避免不了分層,最終仍然落到了目前的架構上。
為此,我們針對前端產品設計了專門的存儲層。在這一層,我們有基于MySQL的分布式關系型數據庫集群MyFOX和基于HBase的NoSQL存儲集群Prom,在后面的文字中,我將重點介紹這兩個集群的實現原理。除此之外,其他第三方的模塊也被我們納入存儲層的范疇。
存儲層異構模塊的增多,對前端產品的使用帶來了挑戰。為此,我們設計了通用的數據中間層——glider——來屏蔽這個影響。glider以HTTP協議對外提供restful方式的接口。數據產品可以通過一個唯一的URL獲取到它想要的數據。
以上是淘寶海量數據產品在技術架構方面的一個概括性的介紹,接下來我將重點從四個方面闡述數據魔方設計上的特點。
關系型數據庫仍然是王道
關系型數據庫(RDBMS)自20世紀70年代提出以來,在工業生產中得到了廣泛的使用。經過三十多年的長足發展,誕生了一批優秀的數據庫軟件,例如Oracle、MySQL、DB2、Sybase和SQL Server等。
圖2 MyFOX中的數據增長曲線
盡管相對于非關系型數據庫而言,關系型數據庫在分區容忍性(Tolerance to Network Partitions)方面存在劣勢,但由于它強大的語義表達能力以及數據之間的關系表達能力,在數據產品中仍然占據著不可替代的作用。
淘寶數據產品選擇MySQL的MyISAM引擎作為底層的數據存儲引擎。在此基礎上,為了應對海量數據,我們設計了分布式MySQL集群的查詢代理層——MyFOX,使得分區對前端應用透明。
圖3 MyFOX的數據查詢過程
目前,存儲在MyFOX中的統計結果數據已經達到10TB,占據著數據魔方總數據量的95%以上,并且正在以每天超過6億的增量增長著(如圖2所示)。這些數據被我們近似均勻地分布到20個MySQL節點上,在查詢時,經由MyFOX透明地對外服務(如圖3所示)。
圖4 MyFOX節點結構
值得一提的是,在MyFOX現有的20個節點中,并不是所有節點都是“平等”的。一般而言,數據產品的用戶更多地只關心“最近幾天”的數據,越早的數據,越容易被冷落。為此,出于硬件成本考慮,我們在這20個節點中分出了“熱節點”和“冷節點”(如圖4所示)。
顧名思義,“熱節點”存放最新的、被訪問頻率較高的數據。對于這部分數據,我們希望能給用戶提供盡可能快的查詢速度,所以在硬盤方面,我們選擇了每分鐘15000轉的SAS硬盤,按照一個節點兩臺機器來計算,單位數據的存儲成本約為4.5W/TB。相對應地,“冷數據”我們選擇了每分鐘7500轉的SATA硬盤,單碟上能夠存放更多的數據,存儲成本約為1.6W/TB。
來自: http://itindex.net/detail/54993-淘寶-數據-產品