成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淘寶應對"雙11"的技術架構分析

開發(fā) 架構
雙“11”最熱門的話題是TB ,最近正好和阿里的一個朋友聊淘寶的技術架構,發(fā)現(xiàn)很多有意思的地方,分享一下他們的解析資料:

 雙“11”最熱門的話題是TB ,最近正好和阿里的一個朋友聊淘寶的技術架構,發(fā)現(xiàn)很多有意思的地方,分享一下他們的解析資料:

淘寶海量數(shù)據(jù)產品技術架構

數(shù)據(jù)產品的一個***特點是數(shù)據(jù)的非實時寫入,正因為如此,我們可以認為,在一定的時間段內,整個系統(tǒng)的數(shù)據(jù)是只讀的。這為我們設計緩存奠定了非常重要的基礎。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖1 淘寶海量數(shù)據(jù)產品技術架構

按照數(shù)據(jù)的流向來劃分,我們把淘寶數(shù)據(jù)產品的技術架構分為五層(如圖1所示),分別是數(shù)據(jù)源、計算層、存儲層、查詢層和產品層。位于架構頂端的是我們的數(shù)據(jù)來源層,這里有淘寶主站的用戶、店鋪、商品和交易等數(shù)據(jù)庫,還有用戶的瀏覽、搜索等行為日志等。這一系列的數(shù)據(jù)是數(shù)據(jù)產品最原始的生命力所在。

在數(shù)據(jù)源層實時產生的數(shù)據(jù),通過淘寶自主研發(fā)的數(shù)據(jù)傳輸組件DataX、DbSync和Timetunnel準實時地傳輸?shù)揭粋€有1500個節(jié)點的Hadoop集群上,這個集群我們稱之為“云梯”,是計算層的主要組成部分。在“云梯”上,我們每天有大約40000個作業(yè)對1.5PB的原始數(shù)據(jù)按照產品需求進行不同的MapReduce計算。這一計算過程通常都能在凌晨兩點之前完成。相對于前端產品看到的數(shù)據(jù),這里的計算結果很可能是一個處于中間狀態(tài)的結果,這往往是在數(shù)據(jù)冗余與前端計算之間做了適當平衡的結果。

不得不提的是,一些對實效性要求很高的數(shù)據(jù),例如針對搜索詞的統(tǒng)計數(shù)據(jù),我們希望能盡快推送到數(shù)據(jù)產品前端。這種需求再采用“云梯”來計算效率將是比較低的,為此我們做了流式數(shù)據(jù)的實時計算平臺,稱之為“銀河”。“銀河”也是一個分布式系統(tǒng),它接收來自TimeTunnel的實時消息,在內存中做實時計算,并把計算結果在盡可能短的時間內刷新到NoSQL存儲設備中,供前端產品調用。

容易理解,“云梯”或者“銀河”并不適合直接向產品提供實時的數(shù)據(jù)查詢服務。這是因為,對于“云梯”來說,它的定位只是做離線計算的,無法支持較高的性能和并發(fā)需求;而對于“銀河”而言,盡管所有的代碼都掌握在我們手中,但要完整地將數(shù)據(jù)接收、實時計算、存儲和查詢等功能集成在一個分布式系統(tǒng)中,避免不了分層,最終仍然落到了目前的架構上。

為此,我們針對前端產品設計了專門的存儲層。在這一層,我們有基于MySQL的分布式關系型數(shù)據(jù)庫集群MyFOX和基于HBase的NoSQL存儲集群Prom,在后面的文字中,我將重點介紹這兩個集群的實現(xiàn)原理。除此之外,其他第三方的模塊也被我們納入存儲層的范疇。

存儲層異構模塊的增多,對前端產品的使用帶來了挑戰(zhàn)。為此,我們設計了通用的數(shù)據(jù)中間層——glider——來屏蔽這個影響。glider以HTTP協(xié)議對外提供restful方式的接口。數(shù)據(jù)產品可以通過一個唯一的URL獲取到它想要的數(shù)據(jù)。

以上是淘寶海量數(shù)據(jù)產品在技術架構方面的一個概括性的介紹,接下來我將重點從四個方面闡述數(shù)據(jù)魔方設計上的特點。

關系型數(shù)據(jù)庫仍然是王道

關系型數(shù)據(jù)庫(RDBMS)自20世紀70年代提出以來,在工業(yè)生產中得到了廣泛的使用。經(jīng)過三十多年的長足發(fā)展,誕生了一批優(yōu)秀的數(shù)據(jù)庫軟件,例如Oracle、MySQL、DB2、Sybase和SQL Server等。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖2 MyFOX中的數(shù)據(jù)增長曲線

盡管相對于非關系型數(shù)據(jù)庫而言,關系型數(shù)據(jù)庫在分區(qū)容忍性(Tolerance to Network Partitions)方面存在劣勢,但由于它強大的語義表達能力以及數(shù)據(jù)之間的關系表達能力,在數(shù)據(jù)產品中仍然占據(jù)著不可替代的作用。

淘寶數(shù)據(jù)產品選擇MySQL的MyISAM引擎作為底層的數(shù)據(jù)存儲引擎。在此基礎上,為了應對海量數(shù)據(jù),我們設計了分布式MySQL集群的查詢代理層——MyFOX,使得分區(qū)對前端應用透明。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖3 MyFOX的數(shù)據(jù)查詢過程

目前,存儲在MyFOX中的統(tǒng)計結果數(shù)據(jù)已經(jīng)達到10TB,占據(jù)著數(shù)據(jù)魔方總數(shù)據(jù)量的95%以上,并且正在以每天超過6億的增量增長著(如圖2所示)。這些數(shù)據(jù)被我們近似均勻地分布到20個MySQL節(jié)點上,在查詢時,經(jīng)由MyFOX透明地對外服務(如圖3所示)。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖4 MyFOX節(jié)點結構

值得一提的是,在MyFOX現(xiàn)有的20個節(jié)點中,并不是所有節(jié)點都是“平等”的。一般而言,數(shù)據(jù)產品的用戶更多地只關心“最近幾天”的數(shù)據(jù),越早的數(shù)據(jù),越容易被冷落。為此,出于硬件成本考慮,我們在這20個節(jié)點中分出了“熱節(jié)點”和“冷節(jié)點”(如圖4所示)。

顧名思義,“熱節(jié)點”存放***的、被訪問頻率較高的數(shù)據(jù)。對于這部分數(shù)據(jù),我們希望能給用戶提供盡可能快的查詢速度,所以在硬盤方面,我們選擇了每分鐘15000轉的SAS硬盤,按照一個節(jié)點兩臺機器來計算,單位數(shù)據(jù)的存儲成本約為4.5W/TB。相對應地,“冷數(shù)據(jù)”我們選擇了每分鐘7500轉的SATA硬盤,單碟上能夠存放更多的數(shù)據(jù),存儲成本約為1.6W/TB。

將冷熱數(shù)據(jù)進行分離的另外一個好處是可以有效提高內存磁盤比。從圖4可以看出,“熱節(jié)點”上單機只有24GB內存,而磁盤裝滿大約有1.8TB(300 * 12 * 0.5 / 1024),內存磁盤比約為4:300,遠遠低于MySQL服務器的一個合理值。內存磁盤比過低導致的后果是,總有一天,即使所有內存用完也存不下數(shù)據(jù)的索引了——這個時候,大量的查詢請求都需要從磁盤中讀取索引,效率大打折扣。

NoSQL是SQL的有益補充

在MyFOX出現(xiàn)之后,一切都看起來那么***,開發(fā)人員甚至不會意識到MyFOX的存在,一條不用任何特殊修飾的SQL語句就可以滿足需求。這個狀態(tài)持續(xù)了很長一段時間,直到有一天,我們碰到了傳統(tǒng)的關系型數(shù)據(jù)庫無法解決的問題——全屬性選擇器(如圖5所示)。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖5 全屬性選擇器

這是一個非常典型的例子。為了說明問題,我們仍然以關系型數(shù)據(jù)庫的思路來描述。對于筆記本電腦這個類目,用戶某一次查詢所選擇的過濾條件可能包括“筆記本尺寸”、“筆記本定位”、“硬盤容量”等一系列屬性(字段),并且在每個可能用在過濾條件的屬性上,屬性值的分布是極不均勻的。在圖5中我們可以看到,筆記本電腦的尺寸這一屬性有著10個枚舉值,而“藍牙功能”這個屬性值是個布爾值,數(shù)據(jù)的篩選性非常差。

在用戶所選擇的過濾條件不確定的情況下,解決全屬性問題的思路有兩個:一個是窮舉所有可能的過濾條件組合,在“云梯”上進行預先計算,存入數(shù)據(jù)庫供查詢;另一個是存儲原始數(shù)據(jù),在用戶查詢時根據(jù)過濾條件篩選出相應的記錄進行現(xiàn)場計算。很明顯,由于過濾條件的排列組合幾乎是無法窮舉的,***種方案在現(xiàn)實中是不可取的;而第二種方案中,原始數(shù)據(jù)存儲在什么地方?如果仍然用關系型數(shù)據(jù)庫,那么你打算怎樣為這個表建立索引?

這一系列問題把我們引到了“創(chuàng)建定制化的存儲、現(xiàn)場計算并提供查詢服務的引擎”的思路上來,這就是Prometheus(如圖6所示)。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖6 Prom的存儲結構

從圖6可以看出,我們選擇了HBase作為Prom的底層存儲引擎。之所以選擇HBase,主要是因為它是建立在HDFS之上的,并且對于MapReduce有良好的編程接口。盡管Prom是一個通用的、解決共性問題的服務框架,但在這里,我們仍然以全屬性選擇為例,來說明Prom的工作原理。這里的原始數(shù)據(jù)是前一天在淘寶上的交易明細,在HBase集群中,我們以屬性對(屬性與屬性值的組合)作為row-key進行存儲。而row-key對應的值,我們設計了兩個column-family,即存放交易ID列表的index字段和原始交易明細的data字段。在存儲的時候,我們有意識地讓每個字段中的每一個元素都是定長的,這是為了支持通過偏移量快速地找到相應記錄,避免復雜的查找算法和磁盤的大量隨機讀取請求。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖7 Prom查詢過程

圖7用一個典型的例子描述的Prom在提供查詢服務時的工作原理,限于篇幅,這里不做詳細描述。值得一提的是,Prom支持的計算并不僅限于求和SUM運算,統(tǒng)計意義上的常用計算都是支持的。在現(xiàn)場計算方面,我們對HBase進行了擴展,Prom要求每個節(jié)點返回的數(shù)據(jù)是已經(jīng)經(jīng)過“本地計算”的局部***解,最終的全局***解只是各個節(jié)點返回的局部***解的一個簡單匯總。很顯然,這樣的設計思路是要充分利用各個節(jié)點的并行計算能力,并且避免大量明細數(shù)據(jù)的網(wǎng)絡傳輸開銷。

用中間層隔離前后端

上文提到過,MyFOX和Prom為數(shù)據(jù)產品的不同需求提供了數(shù)據(jù)存儲和底層查詢的解決方案,但隨之而來的問題是,各種異構的存儲模塊給前端產品的使用帶來了很大的挑戰(zhàn)。并且,前端產品的一個請求所需要的數(shù)據(jù)往往不可能只從一個模塊獲取。

舉個例子,我們要在數(shù)據(jù)魔方中看昨天做熱銷的商品,首先從MyFOX中拿到一個熱銷排行榜的數(shù)據(jù),但這里的“商品”只是一個ID,并沒有ID所對應的商品描述、圖片等數(shù)據(jù)。這個時候我們要從淘寶主站提供的接口中去獲取這些數(shù)據(jù),然后一一對應到熱銷排行榜中,最終呈現(xiàn)給用戶。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖8 glider的技術架構

有經(jīng)驗的讀者一定可以想到,從本質上來講,這就是廣義上的異構“表”之間的JOIN操作。那么,誰來負責這個事情呢?很容易想到,在存儲層與前端產品之間增加一個中間層,它負責各個異構“表”之間的數(shù)據(jù)JOIN和UNION等計算,并且隔離前端產品和后端存儲,提供統(tǒng)一的數(shù)據(jù)查詢服務。這個中間層就是glider(如圖8所示)。

緩存是系統(tǒng)化的工程

除了起到隔離前后端以及異構“表”之間的數(shù)據(jù)整合的作用之外,glider的另外一個不容忽視的作用便是緩存管理。上文提到過,在特定的時間段內,我們認為數(shù)據(jù)產品中的數(shù)據(jù)是只讀的,這是利用緩存來提高性能的理論基礎。

在圖8中我們看到,glider中存在兩層緩存,分別是基于各個異構“表”(datasource)的二級緩存和整合之后基于獨立請求的一級緩存。除此之外,各個異構“表”內部可能還存在自己的緩存機制。細心的讀者一定注意到了圖3中MyFOX的緩存設計,我們沒有選擇對匯總計算后的最終結果進行緩存,而是針對每個分片進行緩存,其目的在于提高緩存的***率,并且降低數(shù)據(jù)的冗余度。

大量使用緩存的***問題就是數(shù)據(jù)一致性問題。如何保證底層數(shù)據(jù)的變化在盡可能短的時間內體現(xiàn)給最終用戶呢?這一定是一個系統(tǒng)化的工程,尤其對于分層較多的系統(tǒng)來說。

 

淘寶數(shù)據(jù)魔方技術架構解析【轉】

 

圖9 緩存控制體系

圖9向我們展示了數(shù)據(jù)魔方在緩存控制方面的設計思路。用戶的請求中一定是帶了緩存控制的“命令”的,這包括URL中的query string,和HTTP頭中的“If-None-Match”信息。并且,這個緩存控制“命令”一定會經(jīng)過層層傳遞,最終傳遞到底層存儲的異構“表”模塊。各異構“表”除了返回各自的數(shù)據(jù)之外,還會返回各自的數(shù)據(jù)緩存過期時間(ttl),而glider最終輸出的過期時間是各個異構“表”過期時間的最小值。這一過期時間也一定是從底層存儲層層傳遞,最終通過HTTP頭返回給用戶瀏覽器的。

緩存系統(tǒng)不得不考慮的另一個問題是緩存穿透與失效時的雪崩效應。緩存穿透是指查詢一個一定不存在的數(shù)據(jù),由于緩存是不***時被動寫的,并且出于容錯考慮,如果從存儲層查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要到存儲層去查詢,失去了緩存的意義。

有很多種方法可以有效地解決緩存穿透問題,最常見的則是采用布隆過濾器,將所有可能存在的數(shù)據(jù)哈希到一個足夠大的bitmap中,一個一定不存在的數(shù)據(jù)會被這個bitmap攔截掉,從而避免了對底層存儲系統(tǒng)的查詢壓力。在數(shù)據(jù)魔方里,我們采用了一個更為簡單粗暴的方法,如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

緩存失效時的雪崩效應對底層系統(tǒng)的沖擊非??膳隆_z憾的是,這個問題目前并沒有很***的解決方案。大多數(shù)系統(tǒng)設計者考慮用加鎖或者隊列的方式保證緩存的單線程(進程)寫,從而避免失效時大量的并發(fā)請求落到底層存儲系統(tǒng)上。在數(shù)據(jù)魔方中,我們設計的緩存過期機制理論上能夠將各個客戶端的數(shù)據(jù)失效時間均勻地分布在時間軸上,一定程度上能夠避免緩存同時失效帶來的雪崩效應。

結束語

正是基于本文所描述的架構特點,數(shù)據(jù)魔方目前已經(jīng)能夠提供壓縮前80TB的數(shù)據(jù)存儲空間,數(shù)據(jù)中間層glider支持每天4000萬的查詢請求,平均響應時間在28毫秒(6月1日數(shù)據(jù)),足以滿足未來一段時間內的業(yè)務增長需求。

盡管如此,整個系統(tǒng)中仍然存在很多不完善的地方。一個典型的例子莫過于各個分層之間使用短連接模式的HTTP協(xié)議進行通信。這樣的策略直接導致在流量高峰期單機的TCP連接數(shù)非常高。所以說,一個良好的架構固然能夠在很大程度上降低開發(fā)和維護的成本,但它自身一定是隨著數(shù)據(jù)量和流量的變化而不斷變化的。我相信,過不了幾年,淘寶數(shù)據(jù)產品的技術架構一定會是另外的樣子。

責任編輯:趙立京 來源: 51CTO
相關推薦

2015-11-14 17:16:17

淘寶雙11

2012-02-20 10:53:34

淘寶低功耗服務器定制服務器

2020-10-26 09:19:41

大數(shù)據(jù)雙11淘寶

2016-01-04 15:16:01

京東詳情頁實踐

2016-11-03 20:59:19

企業(yè)云云計算云應用

2013-11-07 10:44:33

阿里云天弘基金

2012-11-10 21:21:59

淘寶大數(shù)據(jù)雙十一

2012-11-15 09:40:18

2022-09-02 19:10:46

高并發(fā)架構系統(tǒng)

2021-08-10 18:22:49

架構支付寶底層

2011-08-04 08:52:08

架構

2017-11-16 13:31:41

大數(shù)據(jù)淘寶雙11

2017-12-07 15:07:28

阿里巴巴數(shù)據(jù)庫技術架構演進

2016-11-11 10:25:04

天貓數(shù)據(jù)庫癱瘓

2021-09-08 10:01:14

架構運維技術

2018-11-12 11:47:49

2021-10-12 10:10:33

淘寶長輩模式移動應用

2014-10-15 10:25:06

淘寶淘寶技術

2015-11-10 23:47:33

阿里云雙11

2015-10-13 10:06:41

數(shù)據(jù)遷移技術選型架構設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久久 | 欧美一级网站 | 国产一区二区三区不卡av | 在线免费中文字幕 | 国产农村妇女毛片精品久久麻豆 | 久久久夜 | 成人网视频 | 免费一区 | 美女视频一区 | 国内自拍视频在线观看 | 亚洲一区二区三区观看 | 91精品国产一二三 | 久久久久久国产 | 水蜜桃亚洲一二三四在线 | a黄视频| 日本三级网址 | 日韩免费| 国产精品免费小视频 | 免费在线a视频 | www.久久久久久久久久久 | 亚洲午夜av久久乱码 | 日本不卡一区 | 欧美精品一区二区免费 | 久久99精品视频 | 草草草久久久 | aaa国产大片 | 亚洲国产中文字幕 | 2020天天操 | 日本三级日产三级国产三级 | 中文字幕亚洲一区二区三区 | 欧美9999 | 天天操天天操 | 玖玖综合网 | 久久久99国产精品免费 | 久久久久无码国产精品一区 | 欧美一级做性受免费大片免费 | 欧洲性生活视频 | 一级黄色绿像片 | 人人做人人澡人人爽欧美 | 91人人在线 | 青青草一区 |