淘宝网的架构演化分析
2012年11月30日,淘寶(包括天貓)的當年交易額突破1萬億,這是一個可以鄙睨亞馬遜和eBay的數字。而就在此前不久的2012年11月11日,淘寶更是創造了全球電子商務的奇跡,當天
- 總交易額:191億人民幣
- 零點的第一分鐘,1000萬獨立用戶涌入www.tmall.con
- 全天訪問用戶總數達2億1千3百萬,占中國網民總數的40%
- 總成交訂單數:1億零5百萬
- 高峰期,每分鐘成交訂單89678筆
所有這些絢麗的業務數字背后是淘寶多年積淀的電子商務網站架構技術。
淘寶網的業務發展歷程
淘寶的技術是和淘寶的業務一起發展起來的,沒有飛速發展的淘寶業務,就不會有今天讓技術界艷羨的淘寶技術,可以說,是業務驅動著技術不得不往前走。而淘寶的業務也經歷了由簡單到復雜,由初級到高級的發展歷程,通過淘寶首頁的變遷,我們可以看出淘寶業務逐步發展的脈絡。
2003年,在馬云家里,用一個買來的C2C交易軟件稍作修改就成了最初的淘寶網,簡約也簡單,如圖所示。
2004年,淘寶業務由模仿eBay的拍賣交易,開始向一口價交易轉型,也就是現在淘寶購物的主要交易模式,這一年,淘寶的架構也經歷了一次重大重構,PHP換成了Java,MySQL換成了 Oracle。那時,淘寶網首頁雖然依舊簡單,但是對于電子商務網站最重要的部分——商品類目開始建立并成為重要的商品導航方式,如圖所示。
此后數年間,淘寶逐步成為網購的代名詞,引領中國電子商務的步伐,每年一度的“雙十一”促銷成為有中國特色的購物狂歡節。
淘寶網技術架構演化
2003年,花3000美金買來的淘寶網站是用PHP開發的,淘寶的工程師做了簡單的漢化處理,并對數據庫做了讀寫分離,最早的淘寶網架構如圖所示。
像我們見過的絕大多數中小網站一樣,當年的淘寶網使用典型的 Linux+Apache+MySQL+PHP(LAMP)架構。作為一個剛剛起步的小網站,使用開源、免費、簡單的技術產品搭建網站是明智之舉,可謂一舉多得:免費的技術降低網站的成本,成熟的開源技術可以從開源社區獲取文檔和技術支持;網站發展初期,業務不明確,需求變化多,簡單的技術方案可以快速響應需求變化;簡單的技術也可以讓工程師快速上手,縮短學習周期;退一步,如果業務發展不順利,及時關閉網站止損,亦可減少沉沒成本促使管理層和投資者快速決策。
2003年淘寶網架構(圖)
幸而淘寶業務蒸蒸日上,逐步蠶食eBay在中國的市場。隨著業務的快速發展,電子商務網站特有的業務復雜性和PHP易開發、難維護的特性產生了難以調和的沖突;不斷擴展的業務讓工程師承受著沉重的負擔;不斷增加的用戶和商品數又讓系統特別是存儲系統不堪重負。總之,架構重構勢在必行。2004年,淘寶在SUN技術顧問的協助下進行了一次重要的重構,放棄了原來的LAMP架構,轉而使用Java作為開發平臺,使用 Oracle做后端數據庫,如圖所示。
系統架構使用了當時在企業應用領域嶄露頭角的MVC框架和ORM框架,分別解決視圖與業務邏輯分離的問題和對象與關系數據庫解耦的問題,淘寶沒有使用當時風頭正勁的 Struts和 Hibernate,而是選擇了自己開發MVC框架Webx,而ORM框架則選擇了IBatis。
2004年淘寶網架構(圖)
當時淘寶還開發了另一個重要產品Anx,這個針對Java平臺的、擴展自Ant的項目構建工具對于網站項目開發、測試、發布至關重要,一個非常重要的功能就是管理配置項。對于一個Java開發的大型Web系統,內部通常會包含數百個jar文件,每個jar文件都是一個獨立的模塊,這些模塊由不同團隊開發,實現不同功能,最后組成一個完整的系統。這些模塊通常也都有自己的配置文件,比如數據庫連接模塊需要配置數據庫URL連接池大小等,這些配置參數在開發環境、測試環境、生產環境各不相同。Antκ提供了一個靈活管理這些分散配置項的解決方案。
應用服務器使用 Weblogic,數據庫使用 Oracle,這些產品都需要昂貴的授權使用費。而 Oracle又需要部署在昂貴的IBM小型機和同樣昂貴的EMC存儲設備上。淘寶這時候棄免費而選擇付費產品,和建站初選擇免費一樣,同樣是明智之舉:業務快速發展,寶貴的開發資源應該投入到新業務開發上,而不是解決這些可以用付費產品搞定的基礎技術問題上;成熟的付費產品和售后支持令業務和市場沒有后顧之憂,可以全力以赴地拓展市場;對于一個快速發展的網站,特別是電子商務網站而言,嚴重宕機、重要用戶數據丟失可能會極大地打擊消費者信心,令網站發展平生波瀾,而這些業界領先的產品經過多年的洗練,有較強的可用性保證。
此后三四年間,淘寶在 Oracle、EMC、IBM的護航下,高歌猛進,業務蒸蒸日上,技術也逐漸成長,基于自身需求,逐步摸索適合自己的技術發展之路,如圖所示。
2006年淘寶網架構(圖)
放棄EJB,引入 Spring,用免費的 JBoss替代收費的 Weblogic,因為 Weblogic并非物有所值,EJB對于網站來說也太過笨重。淘寶后來甚至用更輕量級的Jey替代了 JBoss,對淘寶而言,應用服務器只需要一個 Servlet容器,越簡單越快越好。在合適的場景下使用合適的產品,而不是最好的產品,所謂小腳穿大鞋,不但跑不快,還可能會摔跤。
直到這時,淘寶架構和技術依然是泯然于眾的中庸水平而已,沒有拖業務的后腿,使用業界成熟的方案和可靠的技術,沒有什么可指責的也沒有什么可炫耀的。但也就是在這個時候,淘寶技術開始發力,許多奠定淘寶堅實架構基礎的產品和技術從這個時候開始逐步醞釀,走向成熟。目前這些產品多數都已開源,如表所示。
| Tair | 分布式 Key/value存儲引擎,分為持久化和非持久化兩種使用方式 |
| TFS | 分布式文件系統,適用于海量小文件存儲 |
| Ocean Base | 分布式數據庫系統,支持千億級別的讀寫事務 |
| TDDL | 對應用透明的分庫分表層和具有眾多特性的動態數據源 |
隨著淘寶技術的不斷發展壯大,淘寶對集群環境下分布式高可用系統的架構設計技術越來越得心應手, Oracle、IBM、EMC也變得不是必須,于是淘寶開始逐步放棄使用這些昂貴的設備和軟件,回歸到開源的 MySQL及 NOSQL系統,正如淘寶2003年建站之初的選擇。這也再一次驗證了辯證法關于事物發展的否定之否定及螺旋式上升的普遍規律,仿佛回到原點,但一切已經完全不同了。
感觸
如果說有什么神奇的力量促使淘寶技術脫胎換骨,化蛹成蝶,站在中國互聯網軟件開發技術之巔華山論劍的話,筆者認為最重要甚至唯一的驅動力就是:不得已。隨著業務的飛速發展,用戶、數據、流量、業務復雜度都呈指數級增長,飛速接近甚至突破 Oracle、IBM這些企業提供的解決方案的有效范圍,在開源領域雖有 Google、 Yahoo等先驅在探索道路,并有一些開源產品,但是在大規模集群實踐上,大家都在摸索,淘寶必須走自己的路,路上也許有燭光照明,但是沒有人指路。而有些路,走過以后,再回頭,一覽眾山小!
總結
以上是生活随笔為你收集整理的淘宝网的架构演化分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript --- 跨浏览器
- 下一篇: IDEA若依框架新建模块