淘寶十年技術路


  最近有幸,在學校的圖書館借到了子柳先生的《淘寶技術這十年》,拜讀一番,感慨萬分。將書中內容加上自己的想法與諸君分享,畢竟未經人事看法粗淺,希望能得到園子里前輩們的指點~

 

一、淘寶的核心技術(國內乃至國際的Top,這還是2011年的數據)

  • 擁有全國最大的分布式Hadoop集群(雲梯,2000左右節點,24000CPU48000GB內存,40PB存儲容量)
  • 全國分布80+CDN節點,能夠自動找尋最近的節點提供服務,支持流量超過800Gbps,足以拖垮一個城市的流量
  • 不遜於百度的搜索引擎,對數十億商品進行搜索,全球最大的電商平台
  • 頂尖的負載均衡系統,頂尖的分布式系統,頂尖的互聯網思想,功能多樣運行極其穩定
  • 豐富的生態產業以及先進的數據挖掘技術
  • ......很多很多

 

二、淘寶網的誕生

  馬總在200347日秘密叫來阿里巴巴的十位員工,來到杭州一個隱秘的毛坯房,要求他們在一個月左右的時間內做出一個C2C網站。

  結果當然還是直接買的快,一個基於LAMP架構的網站,原名是PHPAuction,老美開發的一個拍賣網站。當然必須要做修改才能用。(作為一個曾經用老美開發的前端頁面開發自己博客的同學,確實感覺用別人寫的比較方便偷懶-_-,不過我確信虛竹、三豐、多隆等前輩是有足夠實力開發自己網站的——還是馬總催的緊)

  當時財大氣粗的eBay正在中國耀武揚威,加上SARS肆虐,可能大家對網購產生了新的認識。而淘寶刻意保持低調,甚至連阿里的員工都不知道這是他們自己公司的產品。

  淘寶的員工積極回答着用戶的問題,早起貪黑,鍛煉身體的方法就是倒立。

  淘寶的功能也在不斷的完善着,發布、管理、搜索、詳情、購買等等,服務器也變成了三台。因為數據量大了,淘寶的搜索很慢(使用LIKE匹配...),多隆前輩把阿里巴巴的搜索引擎iSearch搬了過來。

  當時MySQL的默認存儲引擎MyISAM會導致讀寫鎖等待時間過長等等大量問題,所以意外還是很多的。

  2003年底,淘寶注冊用戶23萬,PV 31/day,半年成交額3371萬。

 

三、淘寶的更新

  很顯然MySQL無法撐得起如此大的訪問量,數據庫瓶頸出現了。幸好阿里的DBA隊伍足夠強大,他們使用Oracle替代了MySQL

  Oracle那時就已經有了強大的並發性訪問設計——連接池,從連接池取連接的耗費比單獨建立連接少很多。但是PHP當時並沒有官方提供支持語言連接池特性,於是多隆前輩用Google(不會是Baidu)搜到了一個開源的SQL Relay,於是數據庫軟件方面的瓶頸暫時解決了。

  但是硬件容量不夠了,阿里買了NAS(后來因為延遲嚴重原因買了EMCSAN低端存儲),加上Oracle高性能RAC,硬件容量也暫時沒問題了。

  開源的東西固然好,但是大膽使用也是一次嘗試的過程,SQL Relay會頻繁的導致死鎖問題,導致工程師不得不定期進行重啟服務,從書中的描述可以看出,淘寶的工程師們真的非常辛苦。

  淘寶網不會止步於僅僅為賣家和買家提供一個交易的網站而已,還需要建立一個完善的第三方體系,來保證賣家和買家之間的交易是安全的,於是支付寶誕生了。比較麻煩的是,當時雖有很多銀行開放了網銀接口,但是甚至不能保證付錢后就會扣款成功,還是需要工程師們辛苦的一板一眼去對賬......

  淘寶為了便於用戶的交流,開發了一個IM軟件——旺旺,不僅給買賣雙方使用,阿里內部也使用旺旺交流。

 

四、第一個里程碑

  因為SQL Relay的問題實在過於嚴重,2004年於是淘寶終於做出了跨時代的決策——使用Java重寫網站(鼓掌~~~)。

  沒錯,淘寶請了Sun的高級工程師來幫忙做Java架構。那么他們是如何做到修改編程語言而不改變網站使用呢——模塊化替換,今天寫好了A模塊,另開一個新域名,將連接指向該模塊,同時別的模塊不變,等到全部模塊完成的時候,原域名放棄。

  使用的框架:淘寶的架構師在Jakarta Turbine的基礎上開發了自己的MVC框架——WebX。而Sun公司堅持使用EJB作為控制層(估計當時只有他們才能玩貫EJB),加上使用iBatis作為持久層,一個可擴展且高效的Java EE應用誕生了。BYW,支付寶也是Sun的工程師用同樣的架構設計的。

  送走Sun的大牛們之后,阿里的數據存儲又遇到了瓶頸,於是忍痛買了一台IBM小型機(我猜至少是百萬級別的.......),也就有了IOEIBM + Oracle + EMC)這樣的傳說。

  2004年底,淘寶注冊用戶400萬,PV 4000/day,全網成交額10個億。

 

五、再接再厲

  Oracle也有處理上限,當數量的級別是的時候,就不是一個Oracle服務器支撐的起的了。DBA們把數據分到了兩個數據庫中,通過ID的第一位決定查詢哪一個數據。比如,‘0’‘7’放在A數據庫,‘8’‘f’放在B數據庫,通用信息放在C數據庫。但是如何既查詢'3'開頭又查詢'e'開頭的數據呢?一個數據庫路由框架DBRoute由架構師行癲編寫,統一處理合並問題而對上層透明。

  Spring誕生了,早聞Spring框架在Web應用不可或缺,而在淘寶網,Spring也達到了Rod Johnson設計它的目的——替代EJB

  2005年底,淘寶注冊用戶1390萬,PV 8931/day,商品數目1663萬個。

  說實話我真的好佩服,這么大的訪問量都能如此堅挺,但是,考慮到未來的發展,這樣的設施架構只是勉強可以應付現在的要求。於是,CDN技術派上用場了,一開始使用商用的ChinaCache,后來使用章文嵩博士搭建低耗能CDN網絡,淘寶網的性能越來越好了。

  2006年底,淘寶注冊用戶3000萬,PV 15000/day,商品數目5000萬,全網成交額169億元。

 

六、創造技術

  為了考慮交易的公平性,淘寶增加了交易快照功能,將當前交易網頁以圖片的形式保存下來,淘寶的交易量如此之大,帶來了一個問題——碎片圖片過多,2010年,淘寶網的后端上保存着286億張圖片。

  淘寶在2007年之前,使用NetApp的商用存儲系統,但是仍然不夠應付迅速增長的趨勢。同年Google公布了GFS的設計思想,參照它的思想,淘寶也開發了自己的文件系統——TFS。至於這個文件系統的具體原理書上給的並不詳細(應該是我看不懂-_-),不過可以大概可以了解是專門為大量的圖片設計的,從每個用戶1張圖片到TFS上線后5張再到1GB的圖片空間,這些都得益於TFS集群的文件存儲系統以及大量的圖片服務器。淘寶使用實時生成縮率圖,全局負載均衡以及一級和二級緩存來保證圖片的訪問優化與高效訪問。

  淘寶的服務器軟件使用Tengine,一個被優化過的nginx模塊。

  淘寶也做過失敗的產品,不是因為技術原因而是市場原因。首先是“團購”,失敗在於人心叵測。再次是“我的淘寶”,使用了風靡全球的AJAX的技術,但是做的過於AJAX了,可能是太不容易上手了(馬總親口說的),還有“招財進寶”(被競爭對手認為是破壞了“免費”的承諾而大肆宣揚)。

  記錄商品的訪問量,使用傳統的數據庫I/O實在過於影響效率,所以淘寶使用了緩沖的技術,先是使用ESIEdge Side Includes,解決了片段緩沖問題。因為有些大店鋪訪問量過大,頻繁的I/O實在得不償失,於是多隆前輩寫出了TBstore,可以緩存大量的數據,核心思想是使用Hash算法快速尋找。其核心是基於Berkeley DB,一種類內存數據庫,導致的問題是內存數據量大了還是會刷到磁盤中,因此性能並不是那么的好。

  后來,淘寶分離出了UICUser Information Center),供所有模塊調用。多隆前輩再次為其編寫出了TDBM,完全是基於內存的數據緩存(參考了memcached)。再然后,淘寶將TBstoreTDBM合並,寫出了Tair,一個基於Key-Value的分布式緩存數據系統。然后升級了自己的iSearch系統。

  2007年底,淘寶注冊用戶5000萬,PV 25000/day,商品數目1個億,全網成交額433億元。

 

七、更多的技術

  一個電子商務平台不可缺少的細節——商品類目的處理。因為商品的類目實在過於龐大,因此如何根據類目划分商品成為了難題。機智的一燈前輩說,這些屬性可以當做標簽,直接“貼”在商品上(應該是這樣的吧)。

  2008年,淘寶將支付寶單獨分離出來。其中交易的底層業務叫交易中心TCTrade Center),涉及訂單之類的原子操作。交易的上層業務叫做交易管理TMTrade Manager),不涉及對物流的操作。

  於是,應運而生的,第二個堪稱里程碑的項目——系統拆分 誕生了。這個正是我們在阿里圓桌會議上HR所說一位元老級員工做的——“給一架高速飛行的飛機換發動機”這么驚險的重構任務。這些組件分割難度非常之大,以至於那張復雜的邏輯圖我實在看不懂......總之,淘寶中間件誕生了。

  HSF(高性能服務框架):核心,外號好舒服。請參見作者的博文http://www.blogjava.net/BlueDavy/archive/2008/01/24/177533.html

  Notify(消息中間件):淘寶自主開發的消息隊列產品。支撐了10+的消息通知。

  TDDL(分布式數據訪問層):優化了DBRoute,在JDBCDB之間隔了一層,負責數據庫的優化工作。

  Tbsession:因為Session保存在服務器中,但是用戶可能會被動的頻繁的切換服務器,淘寶的設計思路是將Session信息保存在Cookie中,最后使用Tair來保存。

  阿里的開放平台也相當有歷史,有興趣的可以參觀參觀http://open.taobao.com/index.htm

 

八、總結

  當你處於業界中流時,你可以向老大學習,等當你成為業界老大之后,你就需要不斷超越自己,用自己的力量來改變整個行業,乃至整個世界。無論是華為,還是阿里,當成為業內的Top時,責任反而更加重大。

  一直覺得自己想着隨大流,但是卻又心有不甘。如今有機會能進入全中國最好的互聯網網站,一直為自己這些年的付出感到榮幸,同時不斷勉勵自己,你需要變得更強才能融入這個集體。

  任重而道遠,縱望阿里淘寶這些年的發展之路,那些默默無聞卻勇於探索鑽研的人是最可愛的,遇到問題永遠不服輸,總會有辦法去解決的。正如阿里圓桌會議HR所說的“在座的各位都是愛折騰的人”,我承認自己受之有愧,自己的身體一直不能保證毫無顧忌的拼斗,自己雖然每天堅持都去跑步,底子還是不行,想要成為一名武林中人,更漫長的路需要我堅持的走下去,意志力,我可以有。

  堅持學習,鑽研學習,實踐學習。希望自己能堅持這三點信條。

  相當佩服馬總的思想理念和為人處事,也相當佩服那么多實力不凡而又忠心耿耿的部下,他們對得起他們的身價。

  子柳兄的《淘寶技術這十年》到此總結完畢,我相信淘寶的光輝路程的還有很長,我的學問之路,也必將一直走下去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM