最近有幸,在學校的圖書館借到了子柳先生的《淘寶技術這十年》,拜讀一番,感慨萬分。將書中內容加上本身的想法與諸君分享,畢竟未經人事見解粗淺,但願能獲得園子裏前輩們的指點~html
1、淘寶的核心技術(國內乃至國際的Top,這仍是2011年的數據)前端
2、淘寶網的誕生java
馬總在2003年4月7日祕密叫來阿里巴巴的十位員工,來到杭州一個隱祕的毛坯房,要求他們在一個月左右的時間內作出一個C2C網站。nginx
結果固然仍是直接買的快,一個基於LAMP架構的網站,原名是PHPAuction,老美開發的一個拍賣網站。固然必需要作修改才能用。(做爲一個曾經用老美開發的前端頁面開發本身博客的同窗,確實感受用別人寫的比較方便偷懶-_-,不過我確信虛竹、三豐、多隆等前輩是有足夠實力開發本身網站的——仍是馬總催的緊)算法
當時財大氣粗的eBay正在中國耀武揚威,加上SARS肆虐,可能你們對網購產生了新的認識。而淘寶刻意保持低調,甚至連阿里的員工都不知道這是他們本身公司的產品。數據庫
淘寶的員工積極回答着用戶的問題,早起貪黑,鍛鍊身體的方法就是倒立。編程
淘寶的功能也在不斷的完善着,發佈、管理、搜索、詳情、購買等等,服務器也變成了三臺。由於數據量大了,淘寶的搜索很慢(使用LIKE匹配...),多隆前輩把阿里巴巴的搜索引擎iSearch搬了過來。後端
當時MySQL的默認存儲引擎MyISAM會致使讀寫鎖等待時間過長等等大量問題,因此意外仍是不少的。緩存
2003年末,淘寶註冊用戶23萬,PV 31萬/day,半年成交額3371萬。安全
3、淘寶的更新
很顯然MySQL沒法撐得起如此大的訪問量,數據庫瓶頸出現了。幸虧阿里的DBA隊伍足夠強大,他們使用Oracle替代了MySQL。
Oracle那時就已經有了強大的併發性訪問設計——鏈接池,從鏈接池取鏈接的耗費比單獨創建鏈接少不少。可是PHP當時並無官方提供支持語言鏈接池特性,因而多隆前輩用Google(不會是Baidu)搜到了一個開源的SQL Relay,因而數據庫軟件方面的瓶頸暫時解決了。
可是硬件容量不夠了,阿里買了NAS(後來由於延遲嚴重緣由買了EMC的SAN低端存儲),加上Oracle高性能RAC,硬件容量也暫時沒問題了。
開源的東西當然好,可是大膽使用也是一次嘗試的過程,SQL Relay會頻繁的致使死鎖問題,致使工程師不得不按期進行重啓服務,從書中的描述能夠看出,淘寶的工程師們真的很是辛苦。
淘寶網不會止步於僅僅爲賣家和買家提供一個交易的網站而已,還須要創建一個完善的第三方體系,來保證賣家和買家之間的交易是安全的,因而支付寶誕生了。比較麻煩的是,當時雖有不少銀行開放了網銀接口,可是甚至不能保證付錢後就會扣款成功,仍是須要工程師們辛苦的一板一眼去對帳......
淘寶爲了便於用戶的交流,開發了一個IM軟件——旺旺,不只給買賣雙方使用,阿里內部也使用旺旺交流。
4、第一個里程碑
由於SQL Relay的問題實在過於嚴重,2004年因而淘寶終於作出了跨時代的決策——使用Java重寫網站(鼓掌~~~)。
沒錯,淘寶請了Sun的高級工程師來幫忙作Java架構。那麼他們是如何作到修改編程語言而不改變網站使用呢——模塊化替換,今天寫好了A模塊,另開一個新域名,將鏈接指向該模塊,同時別的模塊不變,等到所有模塊完成的時候,原域名放棄。
使用的框架:淘寶的架構師在Jakarta Turbine的基礎上開發了本身的MVC框架——WebX。而Sun公司堅持使用EJB做爲控制層(估計當時只有他們才能玩貫EJB),加上使用iBatis做爲持久層,一個可擴展且高效的Java EE應用誕生了。BYW,支付寶也是Sun的工程師用一樣的架構設計的。
送走Sun的大牛們以後,阿里的數據存儲又遇到了瓶頸,因而忍痛買了一臺IBM小型機(我猜至少是百萬級別的.......),也就有了IOE(IBM + Oracle + EMC)這樣的傳說。
2004年末,淘寶註冊用戶400萬,PV 4000萬/day,全網成交額10個億。
5、再接再礪
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億元。
6、創造技術
爲了考慮交易的公平性,淘寶增長了交易快照功能,將當前交易網頁以圖片的形式保存下來,淘寶的交易量如此之大,帶來了一個問題——碎片圖片過多,2010年,淘寶網的後端上保存着286億張圖片。
淘寶在2007年以前,使用NetApp的商用存儲系統,可是仍然不夠應付迅速增加的趨勢。同年Google公佈了GFS的設計思想,參照它的思想,淘寶也開發了本身的文件系統——TFS。至於這個文件系統的具體原理書上給的並不詳細(應該是我看不懂-_-),不過能夠大概能夠了解是專門爲大量的圖片設計的,從每一個用戶1張圖片到TFS上線後5張再到1GB的圖片空間,這些都得益於TFS集羣的文件存儲系統以及大量的圖片服務器。淘寶使用實時生成縮率圖,全局負載均衡以及一級和二級緩存來保證圖片的訪問優化與高效訪問。
淘寶的服務器軟件使用Tengine,一個被優化過的nginx模塊。
淘寶也作過失敗的產品,不是由於技術緣由而是市場緣由。首先是「團購」,失敗在於人心叵測。再次是「個人淘寶」,使用了風靡全球的AJAX的技術,可是作的過於AJAX了,多是太不容易上手了(馬總親口說的),還有「招財進寶」(被競爭對手認爲是破壞了「免費」的承諾而大肆宣揚)。
記錄商品的訪問量,使用傳統的數據庫I/O實在過於影響效率,因此淘寶使用了緩衝的技術,先是使用ESI(Edge Side Includes),解決了片斷緩衝問題。由於有些大店鋪訪問量過大,頻繁的I/O實在得不償失,因而多隆前輩寫出了TBstore,能夠緩存大量的數據,核心思想是使用Hash算法快速尋找。其核心是基於Berkeley DB,一種類內存數據庫,致使的問題是內存數據量大了仍是會刷到磁盤中,所以性能並非那麼的好。
後來,淘寶分離出了UIC(User Information Center),供全部模塊調用。多隆前輩再次爲其編寫出了TDBM,徹底是基於內存的數據緩存(參考了memcached)。再而後,淘寶將TBstore和TDBM合併,寫出了Tair,一個基於Key-Value的分佈式緩存數據系統。而後升級了本身的iSearch系統。
2007年末,淘寶註冊用戶5000萬,PV 25000萬/day,商品數目1個億,全網成交額433億元。
7、更多的技術
一個電子商務平臺不可缺乏的細節——商品類目的處理。由於商品的類目實在過於龐大,所以如何根據類目劃分商品成爲了難題。機智的一燈前輩說,這些屬性能夠當作標籤,直接「貼」在商品上(應該是這樣的吧)。
2008年,淘寶將支付寶單獨分離出來。其中交易的底層業務叫交易中心TC(Trade Center),涉及訂單之類的原子操做。交易的上層業務叫作交易管理TM(Trade Manager),不涉及對物流的操做。
因而,應運而生的,第二個堪稱里程碑的項目——系統拆分 誕生了。這個正是咱們在阿里圓桌會議上HR所說一位元老級員工作的——「給一架高速飛行的飛機換髮動機」這麼驚險的重構任務。這些組件分割難度很是之大,以致於那張複雜的邏輯圖我實在看不懂......總之,淘寶中間件誕生了。
HSF(高性能服務框架):核心,外號好舒服。請參見做者的博文http://www.blogjava.net/BlueDavy/archive/2008/01/24/177533.html
Notify(消息中間件):淘寶自主開發的消息隊列產品。支撐了10億+的消息通知。
TDDL(分佈式數據訪問層):優化了DBRoute,在JDBC和DB之間隔了一層,負責數據庫的優化工做。
Tbsession:由於Session保存在服務器中,可是用戶可能會被動的頻繁的切換服務器,淘寶的設計思路是將Session信息保存在Cookie中,最後使用Tair來保存。
阿里的開放平臺也至關有歷史,有興趣的能夠參觀參觀http://open.taobao.com/index.htm
8、總結
當你處於業界中流時,你能夠向老大學習,等當你成爲業界老大以後,你就須要不斷超越本身,用本身的力量來改變整個行業,乃至整個世界。不管是華爲,仍是阿里,當成爲業內的Top時,責任反而更加劇大。
一直以爲本身想着隨大流,可是卻又心有不甘。現在有機會能進入全中國最好的互聯網網站,一直爲本身這些年的付出感到榮幸,同時不斷勉勵本身,你須要變得更強才能融入這個集體。
任重而道遠,縱望阿里淘寶這些年的發展之路,那些默默無聞卻敢於探索鑽研的人是最可愛的,遇到問題永遠不服輸,總會有辦法去解決的。正如阿里圓桌會議HR所說的「在座的各位都是愛折騰的人」,我認可本身受之有愧,本身的身體一直不能保證毫無顧忌的拼鬥,本身雖然天天堅持都去跑步,底子仍是不行,想要成爲一名武林中人,更漫長的路須要我堅持的走下去,意志力,我能夠有。
堅持學習,鑽研學習,實踐學習。但願本身能堅持這三點信條。
至關佩服馬總的思想理念和爲人處事,也至關佩服那麼多實力不凡而又忠心耿耿的部下,他們對得起他們的身價。
子柳兄的《淘寶技術這十年》到此總結完畢,我相信淘寶的光輝路程的還有很長,個人學問之路,也必將一直走下去。