淘寶技術架構演化

2003年,花3000美金買來的淘寶網站是用PHP開發的,淘寶的工程師做了簡單的漢化處理並對數據庫做了讀寫分離,最早的淘寶網架構如圖1所示。

淘寶技術架構演化

圖1

像我們見過的絕大數中小網站一樣,當年的淘寶使用典型的Linux+Apache+MySQL+PHP(LAMP)架構。作為一個剛剛起步的小網站,使用開源、免費、簡單的技術產品搭建網站是明智之舉,可謂一舉多得:免費的技術降低網站的成本,成熟的開源技術可以從開源社區獲取文檔和技術支持;網站發展初期,業務不明確,需求變化多,簡單的技術方案可以快速響應需求變化;簡單的技術也可以讓工程師快速上手,縮短學習週期;退一步,如果業務發展不順利,及時關閉網站止損,亦可以減少沉沒成本,促使管理層和投資者快速決策。

幸而淘寶業務蒸蒸日上,逐步吞食eBay在中國的市場。隨著業務的快速發展,電子商務網站特有的業務複雜性和PHP易開發、難維護的特性產生了難以調和的衝突;不斷擴展的業務讓工程師承受著沉重的負擔;不斷增加的用戶和商品數又讓系統特別是存儲系統不堪重負。總之,架構重構勢在必行。2004年,淘寶在SUN技術顧問的協助下進行了一次重要的重構,放棄了原來的LAMP架構,轉而使用JAVA作為開發平臺,使用Oracle做後端數據庫,如圖2所示。

淘寶技術架構演化

圖2

系統架構使用了當時在企業應用領域嶄露頭角的MVC框架和ORM框架,分別解決視圖與業務邏輯分離的問題和對象與關係數據庫解耦的問題,淘寶沒有使用當時風頭正勁的Struts和Hibernate,而是選擇了自己開發MVC框架Webx,而ORM框架選擇了IBatis。

當時淘寶還開發了另一個重要產品Antx,這個針對Java平臺的、擴展了Ant的項目構建工具對於網站項目開發、測試、發佈至關重要,一個非常重要的功能就是管理配置項。對於一個Java開發的大型Web系統,內部通常會包含數百個jar文件,每個jar文件都是一個獨立的模塊,這些模塊由不同團隊開發,實現不同功能,最後組成一個完整的系統。這些模塊通常也都有自己的配置文件,比如數據庫連接模塊需要配置數據庫URL、連接池大小等,這些配置參數在開發環境、測試環境、生產環境各不相同。Antx提供了一個靈活管理這些分散配置項的解決方案。

應用服務器使用WebLogic,數據庫使用Oracle,這些產品都需要昂貴的授權使用費。而Oracle又需要部署在昂貴的IBM小型機和同樣昂貴的EMC存儲設備上。淘寶這時候棄免費而選擇付費產品,和建站初選擇免費一樣,同樣是明智之舉;業務快速發展,寶貴的開發資源應該投入到新業務開發上,而不是解決這些可以用付費產品搞定的基礎技術問題上;成熟的付費產品和售後支持令業務和市場沒有後顧之憂,可以全力以赴地拓展市場;對於一個快速發展的網站,特別是電子商務網站而言,嚴重宕機、重要用戶數據丟失可能會極大地打擊消費者信心,令網站發展平生波瀾,而這些業界領先的產品進過多年的洗練,有較強的可用性保證。

此後三四年間,淘寶在Oracle、EMC、IBM的護航下,高歌猛進,業務蒸蒸日上,技術也逐漸成長,基於自身需求,逐步摸索適合自己的技術發展之路,如圖3所示。

淘寶技術架構演化

圖3

放棄EJB,引入Spring,用免費的JBoss替代收費的WebLogic,因為WebLogic並非物有所值,EJB對於網站來說也太過於笨重。淘寶後來甚至用更輕量級的Jetty替代JBoss,對淘寶而言,應用服務器只需要一個Servlet容器,越簡單越快越好。在合適的場景下使用合適的產品,而不是最好的產品,所謂小腳穿大鞋,不但跑不快,還可能會摔跤。

直到這時,淘寶架構和技術依然是泯然於眾的中庸水平而已,沒有拖業務的後腿,使用業界成熟的方案和可靠的技術,沒有什麼可指責的也沒有什麼可炫耀的。但也就是在這個時候,淘寶技術開始發力,許多奠定淘寶堅實架構基礎的產品和技術從這個時候開始逐步醞釀,走向成熟。目前這些產品多數已經開源,如表所示:

項目名描述
Tair分佈式Key/Value存儲引擎,分為持久化和非持久化兩種使用方式
TFS一個分佈式文件系統,適用於海量小文件存儲
OceanBase分佈式數據庫系統,支持千億級別的讀寫事務
TDDL對應用透明的分庫分表層和具有眾多特性的動態數據源

隨著淘寶技術的不斷髮展壯大,淘寶對集群環境下分佈式高可用系統的架構設計技術越來越得心應手,Oracle、EMC、IBM也變得部署必須,於是淘寶開始逐步放棄使用這些昂貴的設備和軟件,迴歸到開源的MySQL及NoSQL系統,正如淘寶2003年建站之初的選擇。這也再一次驗證了辯證法關於事務發展的否定之否定及螺旋式上升的普遍規律,彷彿回到原點,但一切已經完全不同了。


分享到:


相關文章: