案例2淘寶技術(shù)發(fā)展史_第1頁
案例2淘寶技術(shù)發(fā)展史_第2頁
案例2淘寶技術(shù)發(fā)展史_第3頁
案例2淘寶技術(shù)發(fā)展史_第4頁
案例2淘寶技術(shù)發(fā)展史_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

淘寶技術(shù)開展

目錄

一、引言

二、個人網(wǎng)站

三、Oracle/支付寶/旺旺

四、淘寶技術(shù)開展(Java時代:脫胎換骨)

五、淘寶技術(shù)開展(Java時代:堅若磐石)

六、淘寶技術(shù)開展(Java時代:創(chuàng)造技術(shù)-TFS)

七、淘寶技術(shù)開展(分布式時代:效勞化)

作者:趙超

一、引言

光棍節(jié)的狂歡

“時間到,開搶!〃坐在電腦前早已等待多時的小美一看時間已到

2011年11月11日零時,便迫不及待地投身于淘寶商城一年一度的大

型網(wǎng)購促銷活動一一“淘寶雙11購物狂歡節(jié)〃。小美翻開早己收藏好

的寶貝一一某品牌的雪地靴,飛快的點擊購置,付款,一回頭發(fā)現(xiàn)3000

雙靴子已被搶購一空。

小美跳起來,大叫一聲“歐耶!〃

小美不知道,就在11日零點過后的這一分鐘內(nèi),全國有342萬人

和她一起涌入淘寶商城。當(dāng)然,她更不知道,此時此刻,在淘寶杭州的一

間辦公室里,燈火通明,這里是“戰(zhàn)時指揮部〃,淘寶技術(shù)部的一群工程

師,正在緊盯著網(wǎng)站的流量和交易數(shù)據(jù)。白板上是他們剛剛下的注,賭誰

能最準確地猜中流量峰值和全天的交易總額。他們的手邊放著充足的食物

和各類提神的飲料。

一陣急促的電話聲響起來,是前線部門詢問數(shù)據(jù)的,工程師大聲報著:

“第1分鐘,進入淘寶商城的會員有342萬〃。過一會工程師主動拿起

電話:“交易額超過1億了,現(xiàn)在是第8分鐘。〃接下來,“第21分

鐘,剛突破2億〃?!暗?2分鐘,3億了〃。“第1個小時,4.39億〃。

這些數(shù)據(jù)隨后出現(xiàn)在微博上,引起一片驚呼。

“完蛋了!〃突然有人大喝一聲,所有的眼睛都緊張的盯著他,只見

他撓撓頭,嘿嘿的笑道“我賭的少了,20億輕松就能過了,我再加5

億〃,他跑去白板邊上把自己的賭注擦去,寫上25,接下來有人寫上28,

有人寫上30,有人跑到微博上開下盤口,同事們紛紛轉(zhuǎn)載下注。接下來

的這24個小時,戰(zhàn)時指揮部的工程師們都不能休息,他們盯著網(wǎng)站的各

種監(jiān)控指標,適時的調(diào)整機器和增減功能。頂住第一波頂峰之后,這些人

開始忙里偷閑的給自己買東西,大家互相交流著哪家買的移動硬盤靠譜,

哪家衣服適合自己的女朋友,不時的有人哀嚎寶貝被人搶了、信用卡額度

不夠了。同時,旁邊白板上的賭注越下越大。

11月11日,這個棍子最多的日子被網(wǎng)民自我調(diào)侃的變成了一個節(jié)

日一一“光棍節(jié)〃。而淘寶網(wǎng)又用瘋狂的折扣促銷給它賦予了另外一個

意義一一“購物狂歡節(jié)〃。2011年11月11日這一天,淘寶商城與

淘寶網(wǎng)交易額之和突破52億,這個數(shù)字是“購物天堂〃香港一天零售總

額8.5億的6倍。

網(wǎng)民感受到的是瘋搶的喜悅,而網(wǎng)站的技術(shù)人員感受到的卻是“壓力

山大〃。就如同你家辦酒席,宴請左鄰右舍,這個辦起來容易。倘若宴請

十里八鄉(xiāng)所有的人,吃飯的人自然開心,但卻不是一般人家能夠辦得起來

的。能辦得起來如此盛宴者,需要強大的財力物力、組織能力、技術(shù)實力

(例如做這么多菜,你的炒鍋一定要是“分布式的〃、“可復(fù)制的〃、“可

擴展的〃,洗菜切菜要有“工作流引擎〃,上菜的路徑要用圖論來計算出

來,甚至連廚房的下水道都要重新設(shè)計)。

淘寶能夠舉辦如此盛宴,網(wǎng)站的技術(shù)實力可見一斑。淘寶網(wǎng)擁有全國

最大的Hadoop分布式計算集群之一,日新增數(shù)據(jù)50TB,有40PB海量

數(shù)據(jù)存儲。分布在全國各地80多個節(jié)點的CDN網(wǎng)絡(luò),支持的流量超過

800Gbpso淘寶的搜索引擎能夠?qū)?shù)十億的商品數(shù)據(jù)進行實時搜索,另外

還擁有自主研發(fā)的文件存儲系統(tǒng)和緩存系統(tǒng),以及Java中間件和消息中

間件系統(tǒng),這一切組成了一個龐大的電子商務(wù)操作系統(tǒng)。另外從商業(yè)數(shù)據(jù)

上來看,Amazon的財報顯示2011年完成了大約480億美金的交易額,

eBay2011年財報全年完成了大約600億美金的交易額(不包括其獨立

的汽車交易平臺)。不管從交易額、商品數(shù)量、同比增速等指標上看,淘

寶網(wǎng)均遠超于此,是目前全球最大的電子商務(wù)平臺。(由于淘寶非上市公

司,未公布2011年業(yè)績,以上內(nèi)容來自淘寶網(wǎng)技術(shù)副總裁耍行癲的微

博)

以上這些技術(shù)數(shù)據(jù)可能已經(jīng)讓一些同學(xué)產(chǎn)生不適的感覺,為了讓更多

的人讀懂這本書,我們從技術(shù)的角度來看,小美訪問淘寶網(wǎng)的時候,網(wǎng)站

上發(fā)生了什么事情。參考資料:《技術(shù)普及帖:你剛剛在淘寶上買了一件

東西》,來自南京郵電大學(xué)孫放同學(xué)。

為了有個更直觀的比照,我們說一個同行,他在2011年光棍節(jié)之前

做促銷,流量上去之后,到這12Gbps(他們有這么大的流量,老板很快

樂,在微博上面說了這個數(shù)據(jù)),這時候流量到達了極限,網(wǎng)站幾乎掛掉,

用戶無法下訂單。而淘寶網(wǎng)光棍節(jié)當(dāng)天網(wǎng)絡(luò)的流量最高到達800多Gbps,

帶給各家銀行和快遞公司的流量也讓他們壓力山大,如臨大敵(后來,他

們以能夠撐住淘寶帶來的流量為榮而到處宣傳)。另外如果你在網(wǎng)上購置

過火車票的話,更能體會到網(wǎng)站能支持多大的流量有多重要。但這不是一

朝一夕做出來的,也不是有錢就能辦到的。

以上比照的這些網(wǎng)站,也許讀者很容易就猜到是哪一家,這里拿出來

作比照,絕對沒有嘲笑人家的意思,采用通常的網(wǎng)站技術(shù)方案,能做到這

種程度已經(jīng)不錯了。任何網(wǎng)站的開展都不是一蹴而就的,在什么樣的階段

采用什么樣的技術(shù)。在開展的過程中網(wǎng)站會遇到各種各樣的問題和業(yè)務(wù)帶

來的壓力,正是這些原因才推動著技術(shù)的進步和開展,而技術(shù)的開展又會

反過來促進業(yè)務(wù)的更大提升。二者互為因果,相互促進。如今淘寶網(wǎng)的流

量已經(jīng)是全球排名第12、國內(nèi)排名第3(美國的eBay全球排名23,國內(nèi)

前兩名是百度和騰訊)。淘寶網(wǎng)的系統(tǒng)也從使用一臺效勞器,到采用萬臺

以上的效勞器。本書就為大家描述淘寶網(wǎng)在整個開展過程中,所有的主動

和被動的技術(shù)變革的前因后果,這由很多有趣的故事組成。

正如同很多人或組織成功了以后,就會為自己的出身編造一個美麗的

傳說。淘寶網(wǎng)的出身,網(wǎng)上也有非常多的傳說,下面我們就從它的出生開

始講起。

二、個人網(wǎng)站

2003年4月7日,馬云,在杭州,成立了一個神秘的組織。他叫

來十位員工,要他們簽了一份協(xié)議,這份協(xié)議要求他們立刻離開阿里巴巴,

去做一個神秘的工程。這個工程要求絕對保密,老馬戲稱“連說夢話被老

婆聽到都不行,誰要是透漏出去,我將追殺到天涯海角〃。這份協(xié)議是英

文版的,匆忙之間,大多數(shù)人根本來不及看懂,但出于對老馬的信任,都

卷起鋪蓋離開了阿里巴巴。

他們?nèi)チ艘粋€神秘的據(jù)點一一湖畔花園小區(qū)的一套未裝修的房子

里,房子的主人是馬云。這伙人剛進去的時候,馬云給他們布置了一個任

務(wù),就是在最短的時間內(nèi)做出一個個人對個人(C2C)的商品交易的四站。

現(xiàn)在出一個問題考考讀者,看你適不適合做淘寶的創(chuàng)業(yè)團隊。親,要是讓

你來做,你怎么做?

在說出這個答案之前,容我先賣個關(guān)子,介紹一下這個創(chuàng)業(yè)團隊的成

員:三個開發(fā)工程師(虛竹、三豐、多?。?、一個UED(二當(dāng)家)、三個

運營(小寶、阿珂、破天)、一個經(jīng)理(財神)、還有就是馬云和他的秘

書。當(dāng)時對整個工程組來說壓力最大的就是時間,怎么在最短的時間內(nèi)把

一個從來就沒有的網(wǎng)站從零開始建立起來?了解淘寶歷史的人知道淘寶

是在2003年5月10日上線的,這之間只有一個月。要是你在這個團

隊里,你怎么做?我們的答案就是:買一個來。

買一個網(wǎng)站顯然比做一個網(wǎng)站要省事一些,但是他們的夢想可不是做

一個小網(wǎng)站而己,要做大,就不是隨便買個就行的,要有比較低的維護本

錢,要能夠方便的擴展和二次開發(fā)。那接下來就是第二個問題:買一個什

么樣的網(wǎng)站?答案是:輕量一點的,簡單一點的,于是買了這樣一個架構(gòu)

的網(wǎng)站:LAMP(Linux+Apache+MySQL+PHP)。這個直到現(xiàn)在還是一個很常用

的網(wǎng)站架構(gòu)模型。這種架構(gòu)的優(yōu)點是:無需編譯,發(fā)布快速,PHP功能強

大,能做從頁面渲染到數(shù)據(jù)訪問所有的事情,而且用到的技術(shù)都是開源的,

免費。

當(dāng)時我們是從一個美國人那里買來的一個網(wǎng)站系統(tǒng),這個系統(tǒng)的名字

叫做PHPAuction(他們的官方網(wǎng)站,這個名字很直白,一眼就看出來

這個系統(tǒng)是用什么語言做的、是干什么用的),PHPAuction有好幾個版本,

我們買的是最高版的,功能比較多,而且最重要的是對方提供了源代碼°

最高版比較貴,花了我們2000美金(貌似現(xiàn)在降價了,只要946美元)。

買來之后不是直接就能用的,需要很多本地化的修改,例如頁面模板改的

漂亮一點,頁頭頁腳加上自己的站點簡介等,其中最有技術(shù)含量的是對數(shù)

據(jù)庫進行了一個修改。原來是從一個數(shù)據(jù)庫進行所有的讀寫操作,拿過來

之后多隆把它給拆分成一個主庫、兩個從庫,讀寫別離Q這么做的好處有

幾點:存儲容量增加了,有了備份,使得平安性增加了,讀寫別離使得讀

寫效率提升了。這樣整個系統(tǒng)的架構(gòu)就如下列屋所示:

Read

Read/Write

復(fù)制

MySQLSlave2

Master

其中PearDB是一個PHP模塊,負責(zé)數(shù)據(jù)訪問層。另外也用開源的

論壇系統(tǒng)PHPBB()搭建了一個小的論壇社區(qū),虛竹負責(zé)機器采購、配

置、架設(shè)等,三豐和多隆負責(zé)編碼,他們把交易系統(tǒng)和論壇系統(tǒng)的用戶信

息打通,給運營人員開發(fā)出后臺管理(admin系統(tǒng))的功能,把交易類型

從只有拍賣這一種增加為拍賣、一口價、求購商品、海報商品(意思是還

沒推出的商品,先掛個海報出來)這四種。(PHPAuction只有拍賣的交

易,Auction即拍賣的意思。@_行癲在微博中提到:今天eBay所有交易

中拍賣交易仍然占了40%,而在中國,此種模式在淘寶幾乎從一開始就未

能占據(jù)優(yōu)勢,如今在主流的交易中幾乎可以忽略不計。背后的原因一直令

人費解。我大致可以給出其中一種解釋,eBay根本在興旺國家展開業(yè)務(wù),

制造業(yè)外包后,電子商務(wù)的根本群體大多只能表現(xiàn)為零散的個體間交易。)

在經(jīng)歷了另外一些有趣的事情之后(這些有趣的事情包括“淘寶〃這

個名字的由來,員工花名的由來等等,由于本書主要描述技術(shù)方面的故事,

對這些有興趣的可以去網(wǎng)上找),網(wǎng)站開始上線運行了。

在接下來的大半年時間里,這個網(wǎng)站迅速顯示出了它的生機。這里有

必要提一下當(dāng)時的市場環(huán)境,非典(SARS)的肆虐使得大家都不敢出門,

尤其是去商場之類人多的地方。另外在神州大地上最早出現(xiàn)的C2C網(wǎng)站

易趣也正忙的不亦樂乎,2002年3月,eBay以3000萬美元收購了易

趣公司33%的股份,2003年6月以L5億美元收購了易趣公司剩余

67%的股份。當(dāng)時淘寶網(wǎng)允許買賣雙方留下聯(lián)系方式,允許同城交易,整

個操作過程簡單輕松。而eBay為了收取交易傭金,是禁止這么做的,這

必然增加了交易過程的難度。而且eBay為了全球統(tǒng)一,把易趣原來的系

統(tǒng)替換成了美國eBay的系統(tǒng),用戶體驗一下子全變了,操作起來非常麻

煩,這等于是把積累的用戶拱手送給了淘寶。為了不引起eBay的注意,

淘寶網(wǎng)在2003年里一直聲稱自己是一個“個人網(wǎng)站〃。由于這個創(chuàng)業(yè)團

隊強大的市場開拓和運營能力,淘寶網(wǎng)開展的非常迅猛,2003年底就吸

引了注冊用戶XXX,最高每日31萬PV,從5月到年底成交額4000萬。

這沒有引起eBay的注意,卻引起了阿里巴巴內(nèi)部很多員工的注意,他們

覺得這個網(wǎng)站以后會成為阿里巴巴強勁的對手。甚至有人在內(nèi)網(wǎng)發(fā)帖,忠

告管理層要警惕這個剛剛起步的網(wǎng)站,但管理層似乎無動于衷。(這個團

隊的保密工作做的真好)

在市場和運營的前方,淘寶網(wǎng)的技術(shù)團隊也在快速的做著系統(tǒng)的改良

和創(chuàng)新。這里還有個有趣的故事,eBay和易趣早期都有員工在論壇上響

應(yīng)用戶的需求,eBay的論壇用粉紅色背景來區(qū)分員工的發(fā)言,易趣的員

工在論壇上呢稱都選各種豆豆,例如黃豆豆、蠶豆豆等。淘寶在討論運營

策略的時候提到這個問題,要求所有的員工都去論壇上答復(fù)用戶的問題。

最早答復(fù)下列問題的任務(wù)落在小寶頭上,那我僅用什么名字好呢?“淘

淘〃?“寶寶〃?小寶都不滿意,太女性化了。討論了很久之后,小寶靈

光乍現(xiàn),干脆取個名字叫"小寶〃吧,小寶帶七個老婆來開店,迎接各位

客官,很有故事性。于是徨多武俠小說中的人物開始在論壇中行俠仗義,

這些昵稱下面標志著“淘寶店小二〃,他們答復(fù)著各種各樣的問題,快速

響應(yīng)著用戶的各種需求。如果是技術(shù)上能解決的,幾個人商量一下,馬上

就開發(fā)、測試、發(fā)布上線。反過來比照一下,易趣被eBay收購之后,系

統(tǒng)更換成了全球通用的版本,響應(yīng)用戶的一個需求需要層層審批,反應(yīng)速

度自然慢了下來。

當(dāng)時淘寶第一個版本的系統(tǒng)里面已經(jīng)包含了商品發(fā)布、管理、搜索、

商品詳情、出價購置、評價投訴、我的淘寶這些功能(現(xiàn)在主流程中也是

這些模塊。在2003年10月增加了一個功能節(jié)點:“平安交易〃,這個

是支付寶的雛形)。隨著用戶需求和流量的不斷增長,系統(tǒng)上面做了很多

的日常改良,效勞器由最初的一臺變成了三臺,一臺負責(zé)發(fā)送email、一

臺負責(zé)運行數(shù)據(jù)庫、一臺負責(zé)運行WebAppo過一段時間之后,商品搜索

的功能占用數(shù)據(jù)庫資源太大了(用like搜索的,很慢),又從阿里巴巴

中文站搬過來他們的搜索引擎iSearch,起初iSearch索引的文件放在

硬盤上,隨著數(shù)據(jù)量的增長,又采購了NetApp效勞器放置iSearcho

如此快節(jié)奏的工作,其實大家都累得不行,有人就提議大家隨時隨地

的鍛煉身體,可是外面SARS橫行,在一個一百多方的房子里,怎么鍛煉

呢?高挑美女阿珂提議大家練習(xí)提臀操,這個建議遭到男士的一致反對,

后來虛竹就教大家練習(xí)倒立,這個大家都能接受。于是這個倒立的傳統(tǒng)一

直延續(xù)至今,和花名文化、武俠文化一并傳承了下來。

隨著訪問量和數(shù)據(jù)量的飛速上漲,問題很快就出來了,第一個問題出

現(xiàn)在數(shù)據(jù)庫上。MySQL當(dāng)時是第4版的,我們用的是默認的存儲引擎

MylSAM,這種類型讀數(shù)據(jù)的時候會把表鎖?。ㄎ覀冎繭racle在寫數(shù)據(jù)

的時候會有行鎖,讀數(shù)據(jù)的時候是沒有的),尤其是主庫往從庫上面寫數(shù)

據(jù)的時候,會對主庫產(chǎn)生大量的讀操作,使得主庫性能急劇下降。這樣在

高訪問量的時候,數(shù)據(jù)庫撐不住了。另外,當(dāng)年的MySQL不比方今的

MySQL,在數(shù)據(jù)的容量和平安性方面也有很多先天的缺乏(和Oracle相

比)。

三、Oracle/支付寶/旺旺

淘寶網(wǎng)作為個人網(wǎng)站開展的時間其實并不長,由于它太引人注目了,

馬云在2003年7月就宣布了這個是阿里巴巴旗下的網(wǎng)站,隨后在市場

上展開了很成功的運作。最著名的就是利用中小網(wǎng)站來做廣告,突圍eBay

在門戶網(wǎng)站上對淘寶的廣告封鎖。上網(wǎng)比較早的人應(yīng)該還記得那些在右下

角的彈窗和網(wǎng)站腰封上一閃一閃的廣告。市場部那位到處花錢買廣告的家

伙,太能花錢了,一出手就是兒百萬,他被我便稱為“大少爺〃。

“大少爺〃們做的廣告,帶來的就是迅速上漲的流量和交易量。在

2003年底,MySQL已經(jīng)撐不住了,技術(shù)的替代方案非常簡單,就是換成

Oracleo換Oracle的原因除了它容量大、穩(wěn)定、平安、性能高之外,還

有人才方面的原因。在2003年的時候,阿里巴巴已經(jīng)有一支很強大的

DBA團隊了,有馮春培、汪海(七公)這樣的人物,后來還有馮大輝

(@fenng)、陳吉平(拖雷)。這樣的人物牛到什么程度呢?Oracle給

全球的技術(shù)專家頒發(fā)一些頭銜,其中最高級別的叫ACE(就是撲克牌的

“尖兒〃,夠大的吧),被授予這個頭銜的人目前全球也只有300多名

(名單在這里:),當(dāng)年全球只有十幾名。有如此強大的技術(shù)后盾,

把MySQL換成Oracle是順理成章的事情。

但更換數(shù)據(jù)庫不是只換個庫就可以的,訪問方式,SQL語法都要跟著

變,最重要的一點是,Oracle并發(fā)訪問能力之所以如此強大,有一個關(guān)

鍵性的設(shè)計一一連接池。但對于PHP語言來說它是放在Apache上的,

每一個請求都會對數(shù)據(jù)庫產(chǎn)生一個連接,它沒有連接池這種功能(Java語

言有Servlet容器,可以存放連接池)。那如何是好呢?這幫人打探到

eBay在PHP下面用了一個連接池的工具,是BEA賣給他們的。我們知

道BEA的東西都很貴,我們買不起,于是多隆在網(wǎng)上尋尋覓覓,找到一

個開源的連接池代理效勞SQLRelay(ay),這個東西能夠提供連接

池的功能,多隆對它進行了一些功能改良之后就拿來用了。這樣系統(tǒng)的架

構(gòu)就變成了如下的樣子:

Functic

Functic

ApeFunction

ApaFunction1

modApac!

modApache

peamod_p

peatmod_php4

SQLpearI

SQLFpearDB

SQLR(

SQLRelay

Oracle

數(shù)據(jù)一開始是放在本地的,DBA們對Oracle做調(diào)優(yōu)的工作,也對

SQL進行調(diào)優(yōu)。后來數(shù)據(jù)量變大了,本地存儲不行了。買了NAS(Network

AttachedStorage:網(wǎng)絡(luò)附屬存儲),NetApp的NAS存儲作為了數(shù)據(jù)庫

的存儲設(shè)備,加上OracleRAC(RealApplicationClusters,實時應(yīng)用

集群)來實現(xiàn)負載均衡。七公說這實際上是走了一段彎路,NAS的NFS

(Network)協(xié)議傳輸?shù)难舆t很嚴重,但那時侯不懂。后來采購了Dell和

EMC合作的SAN低端存儲,性能一下子提升了10幾倍,這才比較穩(wěn)定

了。再往后來數(shù)據(jù)量更大了,存儲的節(jié)點一拆二、二拆四,RAC又出問題

了。這才踏上了購置小型機的道路。在那段不穩(wěn)定的時間里,七公曾經(jīng)在

機房住了5天5夜。

替換完數(shù)據(jù)庫,時間到了2004年春天,俗話說“春宵一刻值千金〃,

但這些人的春宵卻不太好過了。他們在把數(shù)據(jù)的連接放在SQLRelay之后

就噩夢不斷,這個代理效勞經(jīng)常會死鎖,如同之前的MySQL死鎖一樣。

雖然多隆做了很多修改,但當(dāng)時那個版本內(nèi)部處理的邏輯不對,問題很多,

唯一解決的方法就是“重啟〃它的效勞。這在白天還好、連接上機房的效

勞器,把進程殺掉,然后開啟就可以了,但是最痛苦的是它在晚上也要死

掉,于是工程師們不得不24小時開著手機,一旦收到“SQLRelay進程

掛起〃的短信,就從春夢中醒來,翻開電腦,連上機房,重啟效勞。后來

干脆每天睡覺之前先重啟一下。做這事最多的據(jù)說是三豐,他現(xiàn)在是淘寶

網(wǎng)的總裁?,F(xiàn)在我們知道,任何牛B的人物,都有一段苦B的經(jīng)歷。

微博上有人說“好的架構(gòu)是進化來的,不是設(shè)計來的〃。確實如此,

其實還可以再加上一句“好的功能也是進化來的,不是設(shè)計來的〃。在架

構(gòu)的進化過程中,業(yè)務(wù)的進化也非常迅猛。最早的時候,買家打錢給賣家

都是通過銀行轉(zhuǎn)賬匯款,有些騙子收了錢卻不發(fā)貨,這是一個很嚴重的問

題。然后這伙人研究了PayPal的支付方式,發(fā)現(xiàn)也不能解決問題。后來

這幾個聰明的腦袋又想到了“擔(dān)保交易〃這種第三方托管資金的方法。于

是在2003年10月,淘寶網(wǎng)上而上線了一個功能,叫做“平安交易〃,

賣家選擇支持這種功能的話,買家會把錢交給海寶網(wǎng),等他收到貨之后,

淘寶網(wǎng)再把錢給賣家。這就是現(xiàn)在的支付寶,在前兩天(2012.2.21)年

會上,支付寶公布2011年的交易筆數(shù)已經(jīng)是PayPal的兩倍。這個劃時

代的創(chuàng)新,其實就是在不斷的思索過程中的一個靈光乍現(xiàn)。

當(dāng)時開發(fā)“平安交易〃功能的是茅十八和他的徒弟苗人鳳(茅十八開

發(fā)到一半去上海讀MBA去了,苗人鳳現(xiàn)在是支付寶的首席業(yè)務(wù)架構(gòu)師),

開發(fā)跟銀行網(wǎng)關(guān)對接的功能的是多隆。當(dāng)時多數(shù)銀行的網(wǎng)站已經(jīng)支持在線

支付了,但多隆告訴我,他們的網(wǎng)關(guān)五花八門,用什么技術(shù)的都有,必須

一家一家去接。而且他們不保證用戶付錢了就一定扣款成功、不保證扣款

成功了就一定通知淘寶、不保證通知淘寶了就一定能通知到、不保證通知

到了就不重復(fù)通知。這害苦了苗人鳳,他必須每天手工核對賬單,對不齊

的話就一定是有人的錢找不到地方了,少一分錢都睡不著覺。另外他為了

測試這些功能,去杭州所有的銀行都辦理了一張銀行卡。一堆銀行卡擺在

桌子上,不知道的人還以為這個家伙一定很有錢,其實里面都只是十塊八

塊的?,F(xiàn)在我們再一次知道,任何牛B的人物,都必須有一段苦B的經(jīng)歷。

有人說淘寶打敗易趣(eBay中國)是靠免費,其實這只是原因之一。

如果說和易趣過招第一招是免費的話,這讓用戶沒有門檻就愿意來,那第

二招就是“平安支付〃,這讓用戶放心付款,不必擔(dān)憂被騙。在武俠小說

中真正的高手飛花摘葉即可傷人,他們不會局限于一招兩招,一旦出手,

連綿不絕。而淘寶的第三招就是“旺旺〃,讓用戶在線溝通。其實淘寶旺

旺也不是自己生出來的,是從阿里巴巴的“貿(mào)易通〃復(fù)制過來的。從2004

年3月開始,“叮咚、叮咚〃這個經(jīng)典的聲音就回蕩在所有淘寶買家和

賣家的耳邊,“親,包郵天?〃,“親,把零頭去掉行不?〃,這親切的

砍價聲造就了后來的“淘寶體〃。有人說中國人就是愛砍價,雖然筆者體

會不到砍價成功后有多少成就感,但每次我去菜市場,看到大媽們砍價砍

得天昏地暗,那滿足的勁頭堪比撿到了錢,我就深刻的理解了淘寶旺旺在

交易過程中的價值。我猜eBay也體會不到砍價的樂趣,他們一直不允許

買賣雙方在線聊天,收購了skype之后也沒有用到電子商務(wù)中去。

旺旺在推出來沒多久,就惹了一個法律方面的麻煩。有個做雪餅的廠

家找上門來,說我們侵權(quán)了,他們家的雪餅很好吃,牛奶也做得不錯,我

們都很喜歡。然后我們就在旺旺的前面加了兩個字,叫做“淘寶旺旺”。

在那個野蠻生長的階段,其實很多產(chǎn)品都是想到什么就做什么,例如我們

還搭建過一個聊天室,但似乎淘寶網(wǎng)不是一個閑聊的地方,這個聊天室門

可羅雀,一段時間后就關(guān)閉掉了。

SQLRelay的問題搞得三豐他們很難睡個例囹覺,那一年開半年會的

時候,公司特地給三豐頒了一個獎項,對他表示深切的撫慰。但不能總這

樣啊,于是,2004年的上半年開始,整個網(wǎng)站就開始了一個脫胎換骨的

手術(shù)。

四、淘寶技術(shù)開展(Java時代:脫胎換骨)

我的師父黃裳@岳旭強曾經(jīng)說過,“好的架構(gòu)圖充滿美感〃,一個架

構(gòu)好不好,從審美的角度就能看得出來。后來我看了很多系統(tǒng)的架構(gòu),發(fā)

現(xiàn)這個言論根本成立。那么反觀淘寶前面的兩個版本的架構(gòu),你看哪個比

較美?

顯然第一個比較好看,后面那個顯得頭重腳輕,這也注定了它不是一

個穩(wěn)定的版本,只存活了不到半年的時間。2004年初,SQLRelay的問

題解決不了,數(shù)據(jù)庫必須要用Oracle,那從哪里動刀?只有換開發(fā)語言

了。換什么語言好呢?Java。Java是當(dāng)時最成熟的網(wǎng)站開發(fā)語言,它有

比較良好的企業(yè)開發(fā)框架,被世界上主流的大規(guī)模網(wǎng)站普遍采用,另外有

Java開發(fā)經(jīng)驗的人才也比較多,后續(xù)維護本錢會比較低。

到2004年上半年,淘寶網(wǎng)已經(jīng)運行了一年的時間,這一年積累了大

量的用戶,也快速的開發(fā)了很多功能,當(dāng)時這個網(wǎng)站已經(jīng)很龐大了,而且

新的需求還在源源不斷的過來。把一個龐大的網(wǎng)站的開發(fā)語言換掉,無異

于脫胎換骨,在換的過程中還不能拖慢業(yè)務(wù)的開展,這無異于邊換邊跑,

對時間和技術(shù)能力的要求都非常高。做這樣的手術(shù),需要請第一流的專家

來主刀。現(xiàn)在再考一下讀者,如果你在這個創(chuàng)業(yè)團隊里面,請什么樣的人

來做這事?我們的答案是請Sun的人。沒錯,就是創(chuàng)造Java語言的那

家公司,世界上沒有比他們更懂Java的了。除此之外,還有一個不為人

知的原因,……(此處和諧掉200字,完整版見aliway)

這幫Sun的工程師確實很強大,在筆者2004年底來淘寶的時候,

他們還在,有幸跟他們共事了幾個月?,F(xiàn)在擺在他們面前的問題是用什么

方法把一個龐大的網(wǎng)站從PHP語言遷移到Java?而且要求在遷移的過

程中,不停止效勞,原來系統(tǒng)的bugfix和功能改良不受影響。親,你要

是架構(gòu)師,你怎么做?有人的答案是寫一個翻譯器,如同把中文翻譯成英

文一樣,自動翻譯。我只能說你這個想法太超前了,換個說法就是“too

simple,sometimesnaive"。當(dāng)時沒有,現(xiàn)在也沒有人能做到。他們的

大致方案是給業(yè)務(wù)分模塊,一個模塊一個模塊的替換。如用戶模塊,老的

member,taobao.com繼續(xù)維護,不添加新功能,新的功能先在新的模塊上

開發(fā),跟老的共用一個數(shù)據(jù)庫,開發(fā)完畢之后放到不同的應(yīng)用集群上,另

開個域名mcmberl.taobao.com,同時替換老的功能,替換一個,把老的

模塊上的功能關(guān)閉一個,逐漸的把用戶引導(dǎo)到memberl.taobao.com,等

所有功能都替換完畢之后,關(guān)閉member,taobac.coiiio后來很長時間里面

都是在用mcmberl這樣奇怪的域名,兩年后有另外一家互聯(lián)網(wǎng)公司開始

做電子商務(wù)了,我們發(fā)現(xiàn)他們的域名也叫memberl.xx.com、

auctionl.xx.com...

說了開發(fā)模式,再說說用到的JavaMVC框架,當(dāng)時的Struts1.x是

用的比較多的框架,但是用過WebWork和Struts2的同學(xué)可能知道,

Struts1.x在多人協(xié)作方面有很多致命的弱點,由于沒有一個輕量框架

作為基礎(chǔ),因此很難擴展,這樣架構(gòu)師對于基礎(chǔ)功能和全局功能的控制就

很難做到。而阿里巴巴的18個創(chuàng)始人之中,有個架構(gòu)師,在Jakarta

Turbine的基礎(chǔ)上,做了很多擴展,打造了一個阿里巴巴自己用的MVC框

架WebX(),這個框架易于擴展,方便組件化開發(fā),它的頁面模板支持

JSP和Velocity等、持久層支持iBATIS和Hibernate等、控制層可

以用EJB和Spring(Spring是后來才有的)。工程組選擇了這個強大

的框架,這個框架如果當(dāng)時開源了,也許就沒有WebWork和Struts2什

么事了。另外,當(dāng)時Sun在全世界大力推廣他們的EJB,雖然淘寶的架

構(gòu)師認為這個東東用不到,但他們還是竭力堅持。在經(jīng)歷了很屢次的技術(shù)

討論、爭論和爭吵之后,這個系統(tǒng)的架構(gòu)就變成了下列圖的樣子:

Java應(yīng)用效勞器是Weblogic,MVC框架是WebX、控制層用了EJB、

持久層是iBATIS,另外為了緩解數(shù)據(jù)庫的壓力,商品查詢和店鋪查詢放

在搜索引擎上面。這個架構(gòu)圖是不是好看了一點了,親?

這幫Sun的工程師開發(fā)完淘寶的網(wǎng)站之后,又做了一個很牛的網(wǎng)站,

叫“支付寶〃。

其實在任何時候,開發(fā)語言本身都不是系統(tǒng)的瓶頸,業(yè)務(wù)帶來的壓力

更多的是壓到了數(shù)據(jù)和存儲上。上面一篇也說到,MySQL撐不住了之后換

Oracle,Oracle的存儲一開始在本機上,后來在NAS上,NAS撐不住了

用EMC的SAN存儲,再然后Oracle的RAC撐不住了,數(shù)據(jù)的存儲方

面就不得不考慮使用小型機了。在2004年的夏天,DBA七公、測試工程

師郭芙和架構(gòu)師行癲,踏上了去北京測試小型機的道路。他們帶著小型機

回來的時候,我們像歡送領(lǐng)袖一樣的歡送他們,因為那個是我們最值錢的

設(shè)備了,價格表上的數(shù)字嚇死人。小型機買回來之后我們爭相合影,然后

Oracle就跑在了小型機上,存儲方面從EMC低端ex存儲到Sunoem

hds高端存儲,再到EMCdmx高端存儲,一級一級的往上跳。

到現(xiàn)在為止,我們已經(jīng)用上了IBM的小型機、Oracle的數(shù)據(jù)庫、EMC

的存儲,這些東西都是很貴的,那些年可以說是花錢如流水啊。有人說過

“錢能解決的問題,就不是問題〃,但隨著淘寶網(wǎng)的開展,在不久以后,

錢已經(jīng)解決不了我們的問題了。花錢買豪華的配置,也許能支持1億PV

的網(wǎng)站,但淘寶網(wǎng)的開展實在是太快了,到了10億怎么辦?到了百億怎

么辦?在N年以后,我們不得不創(chuàng)造技術(shù),解決這些只有世界頂尖的網(wǎng)

站才會遇到的問題。后來我們在開源軟件的基礎(chǔ)上進行自主研發(fā),一步一

步的把I0E(IBM小型機、Oracle、EMC存儲)這幾個“神器〃都去掉了。

這就如同在《西游記》里面,妖怪們拿到神仙的兵器會非常厲害,連猴子

都能夠打敗,但最牛的神仙是不用這些神器的,他們揮一揮衣袖、翻一下

手掌就威力無比。去IOE這一局部會在最后一個章節(jié)里面講,這里先埋

個千里伏筆。

欲知后事如何,且聽下回分解。

五、淘寶技術(shù)開展(Java時代:堅若磐石)

已經(jīng)有讀者在迫不及待的問怎么去掉了IQE,別急,在去掉IOE之

前還有很長的路要走。行癲他們買回來小型機之后,我們用上了Oracle,

七公帶著一幫DBA在優(yōu)化SQL和存儲,行癲帶著幾個架構(gòu)師在研究數(shù)據(jù)

庫的擴展性。Oracle本身是一個封閉的系統(tǒng),用Oracle怎么做擴展?

用現(xiàn)在一個時髦的說法就是做“分庫分表〃。

我們知道一臺Oracle的處理能力是有上限的,它的連接池有數(shù)量限

制,查詢速度跟容量成反比。簡單的說,在數(shù)據(jù)量上億、查詢量上億的時

候,就到它的極限了。要突破這種極限,最簡單的方式就是多用幾個

Oracle數(shù)據(jù)庫。但一個封閉的系統(tǒng)做擴展,不像分布式系統(tǒng)那樣輕松。

我們把用戶的信息按照1D來放到兩個數(shù)據(jù)庫里面(DB1/DB2),把商品

的信息跟著賣家放在兩個對應(yīng)的數(shù)據(jù)庫里面,把商品類目等通用信息放在

第三個庫里面(DBcommon)。這么做的目的除了增加了數(shù)據(jù)庫的容量之外,

還有一個就是做容災(zāi),萬一一個數(shù)據(jù)庫掛了,整個網(wǎng)站上還有一半的數(shù)據(jù)

能操作。

數(shù)據(jù)庫這么分了之后,應(yīng)用程序有麻煩了,如果我是一個買家,買的

商品有DB1的也有DB2的,要查看“我已買到的寶貝〃的時候,應(yīng)用程

序怎么辦?必須到兩個數(shù)據(jù)庫里面分別查詢出來對應(yīng)的商品。要按時間排

序怎么辦?兩個庫里面“我已買到的寶貝〃全部查出來在應(yīng)用程序里面

做合并。還有分頁怎么處理?關(guān)鍵字查詢怎么處理?這些東西交給程序員

來做的話會很悲催,于是行癲在淘寶的第一個架構(gòu)上的作品就來解決了這

個問題,他寫了一個數(shù)據(jù)庫路由的框架DBRoute,這個框架在淘寶的

Oracle時代一直在使用。后來隨著業(yè)務(wù)的開展,這種分庫的第二個目的

一一容災(zāi)的效果就沒有到達。像評價、投訴、舉報、收藏、我的淘寶等

很多地方,都必須同時連接DB1和DB2,哪個庫掛了都會導(dǎo)致整個網(wǎng)站

掛掉。

上一篇說過,采用EJB其實是和Sun的工程師妥協(xié)的結(jié)果,在他們

走了之后,EJB也逐漸被冷落了下來。在2005、2006年的時候,Spring大

放異彩,正好利用Spring的反射(ToC)模式替代了EJB的工廠模式,

給整個系統(tǒng)精簡了很多代碼。

上一篇還說過,為了減少數(shù)據(jù)庫的壓力,提高搜索的效率,我們引入

了搜索引擎。隨著數(shù)據(jù)量的繼續(xù)增長,到了2005年,商品數(shù)有1663萬,

PV有8931萬,注冊會員有1390萬,這給數(shù)據(jù)和存儲帶來的壓力依然

山大,數(shù)據(jù)量大,性能就慢。親,還有什么方法能提升系統(tǒng)的性能?一定

還有招數(shù)可以用,這就是緩存和CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))。

你可以想象,九千萬的訪問量,有多少是在商品詳情頁面?訪問這個

頁面的時候,數(shù)據(jù)全都是只讀的(全部從數(shù)據(jù)庫里面讀出來,不寫入數(shù)據(jù)

庫),如果把這些讀操作從數(shù)據(jù)庫里面移到內(nèi)存里,數(shù)據(jù)庫將會多么的感

謝涕零。在那個時候我們的架構(gòu)師多隆大神,找到了一個基于BerkeleyDB

的開源的緩存系統(tǒng),把很多不太變動的只讀信息放了進去。其實最初這個

緩存系統(tǒng)還比較弱,我們并沒有把整個商品詳情都放在里面,一開始把賣

家的信息放里面,然后把商品屬性放里面,商品詳情這個字段太大,放進

去受不了。說到商品詳情,這個字段比較恐怖,有人統(tǒng)計過,淘寶商品詳

情打印出來平均有5米長,在系統(tǒng)里面其實放在哪里都不招人待見。筆

者清楚的記得,我來淘寶之后擔(dān)任工程經(jīng)理做的第一個工程就是把商品詳

情從商品表里面給移出來。這個字段太大了,查詢商品信息的時候很多都

不需要查看詳情,它跟商品的價格、運費這些放在一個表里面,拖慢了整

個表的查詢速度。在2005年的時候,我把商品詳情放在數(shù)據(jù)庫的另外一

張表里面,再往后這個大字段被從數(shù)據(jù)庫里面請了出來,這也讓數(shù)據(jù)庫再

一次感謝涕零。

到現(xiàn)在為止,整個商品詳情的頁面都在緩存里面了,眼尖的讀者可能

會發(fā)現(xiàn)現(xiàn)在的商品詳情不全是“只讀〃的信息了,這個頁面上有個信息叫

“瀏覽量〃,這個數(shù)字每刷新一次頁面就要“寫入〃數(shù)據(jù)庫一次,這種高

頻度實時更新的數(shù)據(jù)能用緩存嗎?如果不用緩存,一天幾十億的寫入,數(shù)

據(jù)庫會怎么樣?一定會掛掉。那怎么辦?親……先不答復(fù)你(下列圖不是

廣告,讓你看看瀏覽量這個數(shù)據(jù)在哪里)

價格:5.80元

物東運莠:廣東廣州I至淅江杭州?快遞:8.00元

30天售出:156件

評價:★★★★★4.8分|118條評價

寶貝類型:全新I3582欠瀏覽

CDN這個工作相比照較獨立,跟別的系統(tǒng)一樣,一開始我們也是采用

的商用系統(tǒng)。后來隨著流量的增加,商用的系統(tǒng)已經(jīng)撐不住了,LVS的創(chuàng)

始人章文嵩博士帶人搭建了淘寶自己的CDN網(wǎng)絡(luò)。在本文的引言中我說

過淘寶的CDN系統(tǒng)支撐了800Gbps以上的流量,作為比照我們可以看一

下國內(nèi)專業(yè)做CDN的上市公司ChinaCache的介紹----

"ChinaCache……是中國第一的專業(yè)CDN效勞提供商,向客戶提供全方

位網(wǎng)絡(luò)內(nèi)容快速分布解決方案。作為首家獲信產(chǎn)部許可的CDN效勞提供

商,目前ChinaCache在全國50多個大中城市擁有近300個節(jié)點,全

網(wǎng)處理能力超過500Gbps,其CDN網(wǎng)絡(luò)覆蓋中國電信、中國網(wǎng)通、中國

移動、中國聯(lián)通、中國鐵通和中國教育科研網(wǎng)等各大運營商?!ㄒ灰贿@

樣你可以看得出淘寶在CDN上面的實力,這在全世界都是數(shù)一數(shù)二的。

另外因為CDN需要大量的效勞器,要消耗很多能源(消耗多少?在前兩

年我們算過一筆帳,淘寶上產(chǎn)生一個交易,消耗的電足以煮熟4個雞蛋)。

這兩年章文嵩的團隊又在研究低功耗的效勞器,在綠色計算領(lǐng)域也做了很

多開創(chuàng)性的工作。淘寶CDN的開展需要專門一個章節(jié)來講,想先睹為快

的可以看一下筆者對章文嵩的專訪。

回想起剛用緩存那段時間,筆者還是個小菜鳥,有一個經(jīng)典的錯誤常

常犯,就是數(shù)據(jù)庫的內(nèi)容更新的時候,忘記通知緩存系統(tǒng),結(jié)果在測試的

時候就發(fā)現(xiàn)我改正的數(shù)據(jù)怎么在頁面上沒變化呢。后來做了一些頁面上的

代碼,修改CSS和JS的時候,用戶本地緩存的信息沒有更新,頁面上

也會亂掉,在論壇上被人說的時候,我告訴他用CtrRF5刷新頁面,然

后趕緊修改腳本文件的名稱,重新發(fā)布頁面。學(xué)會用Ctrl+F5的會員對

我佩服的五體投地,我卻慚愧的無地自容。

有些技術(shù)的開展是順其自然的,有些卻是突如其來的。到2007年的

時候,我們已經(jīng)有幾百臺應(yīng)用效勞器了,這上面的Java應(yīng)用效勞器是

WebLogic,而WebLogic是非常貴的,比這些效勞器本身都貴。有一段時

間多隆研究了一下JBoss,說我們換掉WebLogic吧,于是又省下了不少

銀兩。那一年,老馬舉辦了第一屆的“網(wǎng)俠大會〃,會上來的大俠中有一

位是上文提到的章文嵩,還有一位曾經(jīng)在JBoss團隊工作,我們也把這

位大俠留下了,這樣我們用起JBoss更加有底氣了。

這些雜七雜八的修改,我們對數(shù)據(jù)分庫、放棄EJB、引入Spring、

參加緩存、參加CDN、采用開源的JBoss,看起來沒有章法可循,其實都

是圍繞著提高容量、提高性能、節(jié)約本錢來做的,由于這些不算大的版本

變遷,我們姑且叫它2.1版吧,這個版本從構(gòu)圖上來看有3只腳,是不

是穩(wěn)定了很多?

架構(gòu)圖如下:

Functio

Functior

Function1

JE

JBoss

海寶

淘寶MVC

Spj

Spring

OR-L

OR-M.

OR-Mapping

[OracieJ[orddeJSearch

NodeNodeNode

12n

六、淘寶技術(shù)開展(Java時代:創(chuàng)造技術(shù)-TFS)

在講淘寶文件系統(tǒng)TFS之前,先回憶一下上面幾個版本。1.0版的

PHP系統(tǒng)運行了將近一年的時間(2003.05^2004.01);后來數(shù)據(jù)庫變成

Oracle之后(2004.0P2004.05,叫1.1版本吧),不到半年就把開發(fā)

語言轉(zhuǎn)換為Java系統(tǒng)了(2004.02~2005.03,叫2.0版本);進行分庫、

參加緩存、CDN之后我們叫它2.1版本(2004.存~2007.01)。這中間有

些時間的重合,因為很多架構(gòu)的演化并沒有明顯的時間點,它是逐步進化

而來的。

在描述2.1版本的時候我寫的副標題是“堅若磐石〃,這個“堅若

磐石〃是因為這個版本終于穩(wěn)定下來了,在這個版本的系統(tǒng)上,淘寶網(wǎng)運

行了兩年多的時間。這期間有很多優(yōu)秀的人才參加,也開發(fā)了很多優(yōu)秀的

產(chǎn)品,例如支付寶認證系統(tǒng)、招財進寶工程、淘寶旅行、淘寶彩票、淘寶

論壇等等。甚至在團購網(wǎng)站風(fēng)起云涌之前,淘寶網(wǎng)在2006年就推出了團

購的功能,只是淘寶網(wǎng)最初的團購功能是買家發(fā)起的,到達賣家指定的數(shù)

量之后,享受比一口價更低的價格,這個功能看起來是結(jié)合了淘寶一口價

和荷蘭拍的另一種交易模式,但不幸沒有支撐下去。

在這些產(chǎn)品和功能的最底層,其實還是商品的管理和交易的管理這兩

大功能。這兩大功能在2.1版本里面都有很大的變化。商品的管理起初

是要求賣家選擇7天到期還是14天到期,到期之后就要下架,必須重

新發(fā)布才能上架,上架之后就變成了新的商品信息(ID變過了)。另外如

果這個期間內(nèi)成交了,之后再有新貨,必須發(fā)布一個新的商品信息。這么

做有幾個原因,一是參照拍賣商品的時間設(shè)置,要在某日期前結(jié)束掛牌;

二是搜索引擎不知道同樣的商品哪個排前面,那就把掛牌時間長的排前

面,這樣就必須在某個時間把老的商品下架掉,不然它老排在前面;第三

是成交信息和商品ID關(guān)聯(lián),這個商品如果屢次編輯還是同一個ID的

話,成交記錄里面的商品信息會變來變?nèi)?;還有一個不為人知的原因,我

們的存儲有限,不能讓所有的商品老存放在主庫里面。這種處理方式簡單

粗暴,但還算是公平。不過這樣很多需求都無法滿足,例如同樣的商品,

我上一次銷售的時候很多好評都沒法在下一個商品上表達出來;再例如我

買過的商品結(jié)束后只看到交易的信息,不知道賣家還有沒有再賣了。后來

基于這些需求,我們在2006年下半年把商品和交易拆開。一個商家的一

種商品有個唯一的ID,上下架都是同一個商品。那么如果賣家改價格、

庫存什么的話,已成交的信息怎么處理?那就在買家每交易一次的時候,

都記錄下商品的快照信息,有多少次交易就有多少個快照。這樣買賣雙方

比較爽了,給系統(tǒng)帶來了什么?存儲的本錢大幅度上升了!

存儲的本錢高到什么程度呢?數(shù)據(jù)庫方面提到過用了IOE,一套下來

就是千萬級別的,那幾套下來就是…o另外淘寶網(wǎng)還有很多文件需要存儲,

我們有哪些文件呢?最主要的就是圖片、商品描述、交易快照,一個商品

要包含幾張圖片和一長串的描述信息,而每一張圖片都要生成幾張規(guī)格不

同的縮略圖。在2010年,淘寶網(wǎng)的后端系統(tǒng)上保存著286億個圖片文

件。圖片在交易系統(tǒng)中非常重要,俗話說“一張好圖勝千言〃、“無圖無

真相〃,淘寶網(wǎng)的商品照片,尤其是熱門商品,圖片的訪問流量是非常大

的。淘寶網(wǎng)整體流量中,圖片的訪問流量要占到90%以上。且這些圖片

平均大小為17.45KB,小于8K的圖片占整體圖片數(shù)量61%,占整體系

統(tǒng)容量的ll%o這么多的圖片數(shù)據(jù)、這么大的訪問流量,給淘寶網(wǎng)的系統(tǒng)

帶來了巨大的挑戰(zhàn)。眾所周知,對于大多數(shù)系統(tǒng)來說,最頭疼的就是大規(guī)

模的小文件存儲與讀取,因為磁頭需要頻繁的尋道和換道,因此在讀取上

容易帶來較長的延時。在大量高并發(fā)訪問量的情況下,簡直就是系統(tǒng)的噩

夢。我們該怎么辦?

同樣的套路,在某個規(guī)模以下,采用現(xiàn)有的商業(yè)解決方案,到達某種

規(guī)模之后,商業(yè)的解決方案無法滿足,只有自己創(chuàng)造解決方案了。對于淘

寶的圖片存儲來說,轉(zhuǎn)折點在2007年。這之前,一直采用的商用存儲系

統(tǒng),應(yīng)用NetApp公司的文件存儲系統(tǒng)。隨著淘寶網(wǎng)的圖片文件數(shù)量以每

年2倍(即原來3倍)的速度增長,淘寶網(wǎng)后端NetApp公司的存儲系統(tǒng)

也從低端到高端不斷遷移,直至2006年,即使是NetApp公司最高端的

產(chǎn)品也不能滿足淘寶網(wǎng)存儲的要求。從2006年開始,淘寶網(wǎng)決定自己開

發(fā)一套針對海量小文件存儲的文件系統(tǒng),用于解決自身圖片存儲的難題。

這標志著淘寶網(wǎng)從使用技術(shù)到了創(chuàng)造技術(shù)的階段。

2007年之前的圖片存儲架構(gòu)如下列圖:

WlUKNt木人H

A:Onlinelm?QeC:Onlineimage

B.OnlineD:Onlin?image注1紅框中設(shè)備是2006年的新增設(shè)備,

杭州網(wǎng)通IDC明年還得在原有的NetApp980C/S200

存儲上增加20TB左右新的硬盤容量.

章文嵩博士總結(jié)了幾點商用存儲系統(tǒng)的局限和缺乏:

首先是商用的存儲系統(tǒng)沒有對小文件存儲和讀取的環(huán)境進行有針對

性的優(yōu)化;其次,文件數(shù)量大,網(wǎng)絡(luò)存儲設(shè)備無法支撐;另外,整個系統(tǒng)

所連接的效勞器也越來越多,網(wǎng)絡(luò)連接數(shù)已經(jīng)到達了網(wǎng)絡(luò)存儲設(shè)備的極

限。此外,商用存儲系統(tǒng)擴容本錢高,10T的存儲容量需要幾百萬,而且

存在單點故障,容災(zāi)和平安性無法得到很好的保證。

談到在商用系統(tǒng)和自主研發(fā)之間的經(jīng)濟效益比照,章文嵩博士列舉了

以下幾點經(jīng)驗:

1.商用軟件很難滿足大規(guī)模系統(tǒng)的應(yīng)用需求,無論存儲還是CDN還

是負載均衡,因為在廠商實驗室端,很難實現(xiàn)圻此大的數(shù)據(jù)規(guī)模測試。

2.研發(fā)過程中,將開源和自主開發(fā)相結(jié)合,會有更好的可控性,系

統(tǒng)出問題了,完全可以從底層解決問題,系統(tǒng)擴展性也更高。

3.在一定規(guī)模效應(yīng)基礎(chǔ)上,研發(fā)的投入都是值得的。上圖是一個自

主研發(fā)和購置商用系統(tǒng)的投入產(chǎn)出比比照,實際上,在上圖的交叉點左邊,

購置商用系統(tǒng)都是更加實際和經(jīng)濟性更好的選擇,只有在規(guī)模超過交叉點

的情況下,自主研發(fā)才能收到較好的經(jīng)濟效果。實際上,規(guī)?;竭_如此

程度的公司其實并不多,不過淘寶網(wǎng)已經(jīng)遠遠超過了交叉點。

4.自主研發(fā)的系統(tǒng)可在軟件和硬件多個層次不斷的優(yōu)化。

歷史總是驚人的巧合,在我們準備研發(fā)文件存儲系統(tǒng)的時候,Google

走在了前面,2007年他們公布了GFS(Google)的設(shè)計論文,這給我

們帶來了很多借鑒的思路。隨后我們開發(fā)出了適合淘寶使用的圖片存儲系

統(tǒng)TFS(Taobao)。3年之后,我們發(fā)現(xiàn)歷史的巧合比我們想象中還要神

奇,幾乎跟我們同時,中國的另外一家互聯(lián)網(wǎng)公司也開發(fā)了他們的文件存

儲系統(tǒng),甚至取的名字都一樣——TFS,太神奇了!(猜猜是哪家?)

2007年6月,TFS正式上線運營。在生產(chǎn)環(huán)境中應(yīng)用的集群規(guī)模到

達了200臺PCServer(146G*6SAS15KRaid5),文件數(shù)量到達上億級

別;系統(tǒng)部署存儲容量:140TB;實際使用存儲容量:50TB;單臺支持隨

機I0PS200+,流量3MBps0

要講TFS的系統(tǒng)架構(gòu),首先要描述清楚業(yè)務(wù)需求,淘寶對圖片存儲

的需求大概可以描述如下:

文件比較??;并發(fā)量高;讀操作遠大于寫操作;訪問隨機;沒有文件

修改的操作;要求存儲本錢低;能容災(zāi)能備份。應(yīng)對這種需求,顯然要用

分布式存儲系統(tǒng);由于文件大小比較統(tǒng)一,可以采用專有文件系統(tǒng);并發(fā)

量高,讀寫隨機性強,需要更少的10操作;考慮到本錢和備份,需要用

廉價的存儲設(shè)備;考慮到容災(zāi),需要能平滑擴容。

參照GFS并做了適度的優(yōu)化之后,TFS1.0版的架構(gòu)圖如下:

MySql

從上面架構(gòu)圖上看:集群由一對NameServer和多臺DataServer

構(gòu)成,NameServer的兩臺效勞器互為雙機,就是集群文件系統(tǒng)中管理節(jié)

點的概念。

在這個架構(gòu)中:

?每個DataServer運行在一臺普通的Linux主機上

?以block文件的形式存放數(shù)據(jù)文件(一般64M一個block)

?block存多份保證數(shù)據(jù)平安

?利用ext3文件系統(tǒng)存放數(shù)據(jù)文件

?磁盤raid5做數(shù)據(jù)冗余

?文件名內(nèi)置元數(shù)據(jù)信息,用戶自己保存TFS文件名與實際文件的

對照關(guān)系-使得元數(shù)據(jù)量特別小。

淘寶TFS文件系統(tǒng)在核心設(shè)計上最大的取巧的地方就在,傳統(tǒng)的集

群系統(tǒng)里面元數(shù)據(jù)只有1份,通常由管理節(jié)點來管理,因而很容易成為

瓶頸。而對于淘寶網(wǎng)的用戶來說,圖片文件究竟用什么名字來保存實際上

用戶并不關(guān)心,因此TFS在設(shè)計規(guī)劃上考慮在圖片的保存文件名上暗藏了

一些元數(shù)據(jù)信息,例如圖片的大小、時間、訪問頻次等等信息,包括所在

的邏輯塊號。而在元數(shù)據(jù)上,實際上保存的信息很少,因此元數(shù)據(jù)結(jié)構(gòu)非

常簡單。僅僅只需要一個filelD,能夠準確定位文件在什么地方。

由于大量的文件信息都隱藏在文件名中,整個系統(tǒng)完全拋棄了傳統(tǒng)的

目錄樹結(jié)構(gòu),因為目錄樹開銷最大。拿掉后,整個集群的高可擴展性極大

提高。實際上,這一設(shè)計理念和目前業(yè)界的“對象存儲〃較為類似,淘寶

網(wǎng)TFS文件系統(tǒng)已經(jīng)更新到1.3版本,在生產(chǎn)系統(tǒng)的性能已經(jīng)得到驗

證,且不斷得到了完善和優(yōu)化,淘寶網(wǎng)目前在對象存儲領(lǐng)域的研究已經(jīng)走

在前列。

在TFS上線之前,淘寶網(wǎng)每個商品只允許上傳一張圖片,大小限定

在120K之內(nèi),在商品詳情里面的圖片必須使用外站的效勞。那時侯發(fā)布

一件商品確實非常麻煩,筆者曾經(jīng)想賣一臺二手電腦,先把照片上傳到

Google相冊,在發(fā)布到淘寶網(wǎng)之后發(fā)現(xiàn)Google相冊被墻了,我的圖片

別人看不到,當(dāng)時郁悶的不行。TFS上線后,商品展示圖片開放到5張,

商品描述里面的圖片也可以使用淘寶的圖片效勞,到現(xiàn)在為止,淘寶網(wǎng)給

每個用戶提供了1G的圖片空間,這下大家都滿足了。技術(shù)和業(yè)務(wù)就是這

么互相用力的推動著,業(yè)務(wù)滿足不了的時候,技術(shù)必須創(chuàng)新,技術(shù)創(chuàng)新之

后,業(yè)務(wù)有了更大的開展空間。

1.3版本的架構(gòu)見阿里味(阿里巴巴內(nèi)網(wǎng))

七、淘寶技術(shù)開展(分布式時代:效勞化)

在系統(tǒng)開展的過程中,架構(gòu)師的眼光至關(guān)重要,作為程序員,把功能

實現(xiàn)即可,但作為架構(gòu)師,要考慮系統(tǒng)的擴展性、重用性,這種敏銳的感

覺,有人說是一種代碼潔癖。淘寶早期有幾個架構(gòu)師具備了這種感覺C一

指開發(fā)的Webx是一個擴展性很強的框架,行癲在這個框架上插入了數(shù)據(jù)

分庫路由的模塊、session框架等等。在做淘寶后臺系統(tǒng)的時候,同樣需

要這幾個模塊,行癲指導(dǎo)我把這些模塊單獨打成了jar包。另外在做淘

寶機票、彩票系統(tǒng)的時候,頁面端也有很多東西需要復(fù)用,最直觀的是頁

頭和頁腳,一開始我們每個系統(tǒng)里面復(fù)制了一份過去,但奇妙的是,那段

時間頁腳要經(jīng)常修改,例如把“雅虎中國〃改成“中國雅虎〃,過一段時

間又加了一個“口碑網(wǎng)〃,再過一段時間變成了“雅虎口碑〃,最后又變

成了“中國雅虎〃,每個系統(tǒng)都改一遍,折騰啊。后來我就把這局部

velocity模版單獨拿出來了,做成了公用的模塊。

上面這些都是比較小的復(fù)用模塊,到2006年我們做了一個商品類目

屬性的改造,在類目里面引入屬性的概念。工程的代號叫做“泰山〃,如

同它的名字,這是一個舉足輕重的工程,這個改變是一個劃時代的創(chuàng)新。

在這之前的三年時間內(nèi),商品的分類都是按照樹狀的一級一級的節(jié)點來分

的,隨著商品數(shù)量的增長,類目也變得越來越深,越來越復(fù)雜,這帶給買

家的就是查找一件商品要逐級類目點開,找商品之前要懂商品的分類。而

淘寶運營部門管理類目的小二也發(fā)現(xiàn)一個很嚴重的問題一一例如男裝

里面有T恤、T恤下面有耐克、耐克有純棉的,女裝里面也有T恤、T恤

下面還是有耐克、耐克下而依然有純棉的,那是先分男女裝再分款式再分

品牌再分材質(zhì)呢?還是先分品牌再分款式再分材質(zhì)再分男女呢?暈倒了。

這時候,一位大俠出來了------燈,他說品牌、款式、材質(zhì)這種東東可

以叫做“屬性〃,屬性是類似tag的一個概念,與類目相比更加離散,

更加靈活,這樣也縮減了類目的深度。這個思想的提出,一舉解決了分類

的難題!從系統(tǒng)的角度來看,我們建立了“屬性〃這樣一個數(shù)據(jù)結(jié)構(gòu),由

于除了類目的子節(jié)點有屬性,父節(jié)點也有可能有屬性,于是類目屬性合起

來也是一個結(jié)構(gòu)化的數(shù)據(jù)對象。這個做出來之后我們把它獨立出來作為一

個效勞,叫做catserver(categoryserver)0跟類目屬性密切關(guān)聯(lián)的

商品搜索功能,獨立出來,叫做hesper(金星),catserver和hesper

供淘寶的前后臺系統(tǒng)調(diào)用。

現(xiàn)在淘寶的商品類目屬性已經(jīng)是地球上最大的了,幾乎沒有什么類目

的商品在淘寶上找不到(除了違禁的),但最初類目屬性改造完之后,我

們很缺屬性數(shù)據(jù),尤其是數(shù)碼類的最缺。那從哪里弄這些數(shù)據(jù)呢親?我們

跟“中關(guān)村在線〃合作,拿到了很多數(shù)據(jù),那個時候,很多商品屬性信息

的后邊標注著:“來自中關(guān)村在線〃。有了類目屬性,給運營的工作帶來

很大的便利,我們知道淘寶的運營主要就是類目的運營,什么季節(jié)推什么

商品,都要在類目屬性上面做調(diào)整,讓買家更容易找到。例如夏天我要用

戶在女裝一級類目下就標出來材質(zhì)是不是蕾絲的、是不是純棉的,冬天卻

要把羽絨衣調(diào)到女裝一級類目下,流行什么就要把什么商品往更高級的類

目調(diào)整。這樣類目和屬性要經(jīng)常調(diào)整,隨之而來的問題就顯現(xiàn)了一一調(diào)

整到哪個類目,那類商品的賣家就要編輯一次自己的商品,隨著商品量的

增長,賣家的工作量越來越大,然后我們就發(fā)現(xiàn)賣家受不了啦。到了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論