中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

淘寶技術(shù)發(fā)展(Java時(shí)代:創(chuàng)造技術(shù)-Tair)

2019-04-03    來源:趙超的博客

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

Tair (編輯注:Tair是由淘寶網(wǎng)自主開發(fā)的Key/Value結(jié)構(gòu)數(shù)據(jù)存儲系統(tǒng)。)

TFS的開發(fā),讓淘寶的圖片功能得到了充分的發(fā)揮。同TFS一樣,很多技術(shù)都是在產(chǎn)品的推動下得到發(fā)展的。在講下面的技術(shù)之前,有必要說說那些年,我們一起做過的幾個(gè)產(chǎn)品。

先說個(gè)比較悲劇的——“團(tuán)購”,這個(gè)團(tuán)購可不是現(xiàn)在滿大街掛的那種groupon類型的模式,在groupon出生之前,在2006年,淘寶的產(chǎn)品經(jīng)理一燈就提出了“團(tuán)購”這種產(chǎn)品。一燈最初的設(shè)想是讓買家在社區(qū)發(fā)起團(tuán)購,“團(tuán)長”找到足夠的人之后,去跟賣家砍價(jià),這類似于現(xiàn)在蘑菇街的“自由團(tuán)”。但由于種種原因,在開發(fā)的時(shí)候產(chǎn)品的功能做了裁剪,跟最初的設(shè)想比起來偏離了一點(diǎn),變成了讓賣家設(shè)置團(tuán)購價(jià),在買家達(dá)到指定的數(shù)量之后,以團(tuán)購價(jià)成交。這個(gè)功能看起來是結(jié)合了淘寶一口價(jià)和荷蘭拍的另一種交易模式,但不幸沒有支撐下去,這種交易方式最大的弱點(diǎn)就是讓買家看到了賣家的底牌,即便達(dá)不到團(tuán)購的數(shù)量,他們也往團(tuán)購的價(jià)格上砍。當(dāng)時(shí)為了引流量,淘寶網(wǎng)開辟了團(tuán)購專區(qū),實(shí)誠的賣家在達(dá)不到團(tuán)購數(shù)量的時(shí)候,被砍價(jià)砍虧了,狡猾的賣家干脆提高原價(jià),利用這個(gè)專區(qū)做促銷。在接下來的兩年里這個(gè)產(chǎn)品淪落成了促銷工具(話說現(xiàn)在滿大街的團(tuán)購,其實(shí)也就是促銷)。這個(gè)產(chǎn)品,讓研發(fā)人員對“產(chǎn)品”這個(gè)概念有了深刻的認(rèn)識。

再說一個(gè)更加悲劇的——“我的淘寶”,我的淘寶是給會員管理自己的商品、交易、收貨地址、評價(jià)、投訴的地方,這個(gè)地方由于登錄之后才能看到,所以風(fēng)格跟外面完全不一樣,很長時(shí)間都沒有優(yōu)化過,樣子丑,用戶操作也不方便,如果一個(gè)人有很多商品,上下架需要一個(gè)一個(gè)的操作,非常麻煩(想想那些賣書的)。這時(shí)候一個(gè)重要人物登場了,承志(現(xiàn)在的蘑菇街CEO,他讓我把他描寫的帥一點(diǎn)),他給我們演示了最牛叉的前端交互技術(shù),就是Gmail上那種Ajax的交互方式,可以拖動、可以用右鍵、可以組合鍵選擇、操作完畢還不刷新頁面,管理商品如有神助,帥呆了。我是這個(gè)項(xiàng)目的項(xiàng)目經(jīng)理,一燈是產(chǎn)品經(jīng)理,我們再拉上萬劍和一伙工程師就開搞了。熱火朝天的干了三個(gè)月,快要完成的時(shí)候,老馬不知道怎么回事突然出現(xiàn)在我身后,看我操作了一遍新版我的淘寶之后,問我這是不是客戶端軟件,我說是網(wǎng)頁,他抓狂了,說這跟客戶端軟件一樣,鏈接底下連線都木有,上下架用文件夾表示,我都不知道怎么操作了,賣家肯定也不會玩。

老馬果然是神一樣的人物,他說的應(yīng)驗(yàn)了,淘寶歷史上第一個(gè)群體性事件爆發(fā)了,試用完新版本的我的淘寶之后,很多賣家憤怒了,說不會玩。一燈就和承志一起商量怎么把頁面改得像個(gè)網(wǎng)頁一點(diǎn),改了半個(gè)月,憤怒依然沒有平息。我很無奈地看著這兩個(gè)人在那里堅(jiān)持,然后跟老板們商量怎么辦。后來我們用了一個(gè)很挫的方法給自己一個(gè)臺階,到論壇上讓大家投票要不要使用新版我的淘寶,投票結(jié)果是一半以上的反對。于是這么十來個(gè)人做了3個(gè)月的系統(tǒng)被殺掉了。這讓我非常沮喪,但最痛苦的還不是這個(gè),我們下線之后,另外一撥賣家不滿了,說這么好的功能怎么沒有了?啊~~~你們怎么不早點(diǎn)站出來,親?這個(gè)產(chǎn)品帶給我們的是新技術(shù)(Ajax、YUI前端框架)的嘗試,還有就是新技術(shù)對用戶操作習(xí)慣的改變,一定要慎之又慎。另外還有一點(diǎn)沒有總結(jié)好的教訓(xùn),就是應(yīng)對群體事件的時(shí)候,我們手足無措,在后來“招財(cái)進(jìn)寶”和淘寶商城出現(xiàn)群體性事件的時(shí)候,我發(fā)現(xiàn)悲劇在重演。

說到“招財(cái)進(jìn)寶”,這個(gè)是最悲劇的產(chǎn)品。到2006年五一的時(shí)候,一個(gè)劃時(shí)代的項(xiàng)目啟動了(我苦逼的連續(xù)失去了兩個(gè)五一節(jié),前面一個(gè)是2005年做支付寶系統(tǒng))。財(cái)神說要用最好的項(xiàng)目陣容,我被選中了,這一下子讓我覺得我能劃分到最好的員工之類,在“我的淘寶”這個(gè)產(chǎn)品中嚴(yán)重受傷的心又痊愈了。這是一個(gè)商品P4P的系統(tǒng),就是按成交付費(fèi)。我們認(rèn)為已經(jīng)有很多賣家有錢了,但淘寶上這么多的商品,他們很難被找到,賣家愿意花錢讓商品排在前面。我們允許賣家購買廣告位,把他的商品按一定算法給個(gè)排名(類似于百度的競價(jià)排名,但不僅僅看他出了多少錢,還有信用、成交量、被收藏?cái)?shù)量等等,這個(gè)算法搞的巨復(fù)雜)。這是一個(gè)多么牛叉的盈利模式啊!

這個(gè)系統(tǒng)進(jìn)行的很順利,但發(fā)布的時(shí)候,更大的群體性事件出來了,買家們質(zhì)疑:你們不是承諾3年不收費(fèi)么?收廣告費(fèi)不是收費(fèi)么?后來我們的競爭對手又推波助瀾,公關(guān)公司和圈子里各路大俠上躥下跳,甚至同行搞了個(gè)“一鍵搬家”的功能來收納我們的會員。一時(shí)之間,輿論嘩然,各種矛頭都指了過來。為了收場,我們又一次在論壇里面讓用戶投票決定產(chǎn)品是否下線,同“我的淘寶”一樣,以悲劇收場。也如同“我的淘寶”一樣,下線后,一撥嘗到甜頭的賣家說,這么好的功能怎么沒有了?(直到后來yahoo中國合并過來之后,開發(fā)了淘寶直通車,才以類似的產(chǎn)品形態(tài)滿足了這部分需求)

雖然招財(cái)進(jìn)寶失敗了,但這個(gè)項(xiàng)目中對技術(shù)的探索更加深入,這里面用到了用戶行為追蹤、Ajax等。其中有一個(gè)技術(shù)的細(xì)節(jié)非常經(jīng)典,淘寶商品詳情頁面每天的流量在10億以上,里面的內(nèi)容都是放在緩存里的,做招財(cái)進(jìn)寶的時(shí)候,我們要給賣家顯示他的商品被瀏覽的次數(shù)(見下圖),這個(gè)數(shù)字必須實(shí)時(shí)更新,而用緩存的話一般都是異步更新的。于是商品表里面增加了這樣一個(gè)字段,每增加一個(gè)PV這個(gè)字段就要更新一次。發(fā)布上去一個(gè)小時(shí)數(shù)據(jù)庫就掛掉了,撐不住這么高的update。數(shù)據(jù)庫撐不住怎么辦?一般的緩存策略是不支持實(shí)時(shí)更新的,這時(shí)候多隆大神想了個(gè)辦法,在apache上面寫了一個(gè)模塊,這個(gè)數(shù)字根本不經(jīng)過下層的web容器(只經(jīng)過apache)就寫入一個(gè)集中式的緩存區(qū)了,這個(gè)緩存區(qū)的數(shù)據(jù)再異步更新到數(shù)據(jù)庫。這就是我前面提到的,我們整個(gè)商品詳情的頁面都在緩存中了,把緩存用到了極致。

(這個(gè)圖真不是廣告,親)

那么接下來,我們就說說緩存的技術(shù)吧。

淘寶在很早就開始使用緩存的技術(shù)了,在2004年的時(shí)候,我們使用一個(gè)叫做ESI(Edge Side Includes)的緩存。在決定采用ESI之前,多隆試用了很多java的cache,但都比較重,后來用了oracle web cache,也經(jīng)常掛掉,oracle web cache也支持ESI,多隆由此發(fā)現(xiàn)了ESI這個(gè)好東東。ESI是一種數(shù)據(jù)緩沖/緩存服務(wù)器,它提供將Web網(wǎng)頁的部分(這里指頁面的片段)進(jìn)行緩沖/緩存的技術(shù)及服務(wù)。由Oracle公司和Akamai Technologies公司制定規(guī)格,Akamai公司提供對應(yīng)的信息傳送的服務(wù)。以往的數(shù)據(jù)緩沖服務(wù)器和信息傳送服務(wù)以“頁”為單位制作,復(fù)制到數(shù)據(jù)緩沖服務(wù)器中,處理靜態(tài)頁面很有效。但在面對動態(tài)內(nèi)容的時(shí)候,就很難得到高效率。在ESI中是部分的緩沖網(wǎng)頁,使用基于XML的標(biāo)記語言,指定想要緩沖的頁面部分。由此,頁面內(nèi)分為動態(tài)地變更的部分和靜態(tài)的不變更的部分,只將靜態(tài)的部分有效地發(fā)送到服務(wù)器中。淘寶網(wǎng)的數(shù)據(jù)雖然大部分都是動態(tài)產(chǎn)生的,但頁面中的靜態(tài)片段也有很多,例如頁面的頭、尾,商品詳情頁面的賣家信息等(如下圖右側(cè)),這些最早都是從ESI緩存中讀取的。

ESI解決了頁面端靜態(tài)片段的緩存,聰明的讀者可能馬上就想到了,在后端的那些數(shù)據(jù)能不能使用緩存?顯然也是可以的,而且是必須的。例如一個(gè)大賣家的商品和店鋪,一天的瀏覽量可能是幾百萬,一個(gè)小賣家的可能只有幾個(gè),那這個(gè)大賣家的用戶信息要是每次都去數(shù)據(jù)庫里面取,顯然不劃算,要是把這個(gè)信息放在內(nèi)存里面,每次都從內(nèi)存里取,性能要好很多。這種應(yīng)用場景,就是memcached這種Key-Velue緩存的用武之地。只可惜在淘寶急需要memcached的時(shí)候,它還沒有嶄露頭角(它2003.6出現(xiàn)的,但近幾年才火爆起來,當(dāng)時(shí)沒發(fā)現(xiàn)它)。我們的架構(gòu)師多隆大神再一次出手了,他寫了一個(gè)緩存系統(tǒng),叫TBstore,這是一個(gè)分布式的基于Berkeley DB的cache系統(tǒng),推出之后在Alibaba集團(tuán)內(nèi)部使用非常廣泛,特別是對于淘寶,tbstore上應(yīng)用了ESI(就是上面說過的那個(gè)ESI)、checkcode(驗(yàn)證碼)、description(前文說過的商品詳情)、story(心情故事,商品信息里面的一個(gè)大字段,長度僅次于商品詳情)、用戶信息等等內(nèi)容。

TBstore的分布式算法實(shí)現(xiàn):根據(jù)保存的key,對key進(jìn)行hash算法,取得hash值,再對hash值與總Cache服務(wù)器數(shù)據(jù)取模。然后根據(jù)取模后的值,找到服務(wù)器列表中下標(biāo)為此值Cache服務(wù)器。由java client api封裝實(shí)現(xiàn),應(yīng)用無需關(guān)心;這點(diǎn)和memecached的實(shí)現(xiàn)方案完全一致。

TBstore有一個(gè)優(yōu)點(diǎn),這也是它的弱點(diǎn),它的存儲是基于Berkeley DB的,而Berkeley DB在數(shù)據(jù)量超過內(nèi)存的時(shí)候,就要往磁盤上寫數(shù)據(jù)了,所以說它是可以做持久化存儲的。但是一旦往磁盤寫數(shù)據(jù),作為緩存的性能就大幅度下降。

這時(shí)又有一個(gè)項(xiàng)目,推動了淘寶在緩存方面的技術(shù)提升。在2007年,我們把淘寶的用戶信息獨(dú)立出來,形成一個(gè)中心系統(tǒng)UIC(user information center),因?yàn)樘詫毸械墓δ芏家蕾囉谟脩粜畔,所以這個(gè)模塊必須單獨(dú)拿出來,不然以后系統(tǒng)無法擴(kuò)展了。把UIC拿出來以后,應(yīng)用系統(tǒng)訪問UIC,UIC訪問數(shù)據(jù)庫取得用戶信息,粗粗算一下,每天要取幾十億的用戶信息,直接查詢數(shù)據(jù)庫的話,顯然數(shù)據(jù)庫要崩潰的,這里必須要用緩存。于是多隆為UIC專門寫了一個(gè)緩存系統(tǒng),取名叫做tdbm。tdbm拋棄了Berkeley DB的持久功能,數(shù)據(jù)全部存放在內(nèi)存中。到2009年,多隆又參考了memcached的內(nèi)存結(jié)構(gòu),改進(jìn)了tdbm的集群分布方式,在內(nèi)存利用率和吞吐量方面又做了大幅提升,推出了tdbm2.0系統(tǒng)。

由于tdbm和TBstore的數(shù)據(jù)接口和用途都很相似,開發(fā)團(tuán)隊(duì)把二者合并,推出了淘寶自創(chuàng)的KV緩存系統(tǒng)——tair。tair包括緩存和持久化兩種存儲功能。tair 作為一個(gè)分布式系統(tǒng),是由一個(gè)中心控制節(jié)點(diǎn)和一系列的服務(wù)節(jié)點(diǎn)組成。我們稱中心控制節(jié)點(diǎn)為config server,服務(wù)節(jié)點(diǎn)是data server。config server 負(fù)責(zé)管理所有的data server,維護(hù)data server的狀態(tài)信息。data server 對外提供各種數(shù)據(jù)服務(wù),并以心跳的形式將自身狀況匯報(bào)給config server。 config server是控制點(diǎn),而且是單點(diǎn),目前采用一主一備的形式來保證其可靠性。所有的 data server 地位都是等價(jià)的。tair的架構(gòu)圖如下所示:

目前,tair支撐了淘寶幾乎所有系統(tǒng)的緩存信息。Tair已開源,地址code.taobao.org。

在創(chuàng)造了TFS和tair之后,整個(gè)系統(tǒng)的架構(gòu)可以如下所示:

在這個(gè)時(shí)候搜索引擎iSearch也進(jìn)行了一次升級,之前的搜索引擎是把數(shù)據(jù)分到多臺機(jī)器上,但是每份數(shù)據(jù)只有一份,現(xiàn)在是每份數(shù)據(jù)變成多份,整個(gè)系統(tǒng)從一個(gè)單行的部署變成了矩陣。能夠支撐更大的訪問量,并且做到很高的可用性。

作者:趙超

文章來源:趙超的博客

編輯注:本文為連載文章,文章目錄請?jiān)L問這里。

標(biāo)簽: Java Tair 分布式存儲 

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:從用戶體驗(yàn)角度看 智能電視遙控器并不友好

下一篇:決戰(zhàn)互聯(lián)網(wǎng):從零開始說互聯(lián)網(wǎng)運(yùn)營