淘寶技術發展(Java時代:脫胎換骨)

fmms 12年前發布 | 33K 次閱讀 淘寶

        一、引言

        二、個人網站

        三、Oracle/支付寶/旺旺

        文/趙超

        我的師父黃裳@岳旭強曾經說過,“好的架構圖充滿美感”,一個架構好不好,從審美的角度就能看得出來。后來我看了很多系統的架構,發現這個言論基本成立。那么反觀淘寶前面的兩個版本的架構,你看哪個比較美?

淘寶技術發展(Java時代:脫胎換骨)

淘寶技術發展(Java時代:脫胎換骨)

        顯然第一個比較好看,后面那個顯得頭重腳輕,這也注定了它不是一個穩定的版本,只存活了不到半年的時間。2004年初,SQL Relay 的問題解決不了,數據庫必須要用 Oracle,那從哪里動刀?只有換開發語言了。換什么語言好呢?Java。Java 是當時最成熟的網站開發語言,它有比較良好的企業開發框架,被世界上主流的大規模網站普遍采用,另外有 Java 開發經驗的人才也比較多,后續維護成本會比較低。        

        到 2004 年上半年,淘寶網已經運行了一年的時間,這一年積累了大量的用戶,也快速的開發了很多功能,當時這個網站已經很龐大了,而且新的需求還在源源不斷的過來。 把一個龐大的網站的開發語言換掉,無異于脫胎換骨,在換的過程中還不能拖慢業務的發展,這無異于邊換邊跑,對時間和技術能力的要求都非常高。做這樣的手 術,需要請第一流的專家來主刀。現在再考一下讀者,如果你在這個創業團隊里面,請什么樣的人來做這事?我們的答案是請 Sun 的人。沒錯,就是創造 Java 語言的那家公司,世界上沒有比他們更懂 Java 的了。除此之外,還有一個不為人知的原因,……(此處和諧掉 200 字,完整版見 aliway)

        這幫 Sun 的工程師的確很強大,在筆者 2004 年底來淘寶的時候,他們還在,有幸跟他們共事了幾個月。現在擺在他們面前的問題是用什么辦法把一個龐大的網站從 PHP 語言遷移到 Java?而且要求在遷移的過程中,不停止服務,原來系統的 bugfix 和功能改進不受影響。親,你要是架構師,你怎么做?有人的答案是寫一個翻譯器,如同把中文翻譯成英文一樣,自動翻譯。我只能說你這個想法太超前了,換個說 法就是“too simple, sometimes naive”。當時沒有,現在也沒有人能做到。他們的大致方案是給業務分模塊,一個模塊一個模塊的替換。如用戶模塊,老的 member.taobao.com 繼續維護,不添加新功能,新的功能先在新的模塊上開發,跟老的共用一個數據庫,開發完畢之后放到不同的應用集群上,另開個域名 member1.taobao.com,同時替換老的功能,替換一個把老的模塊上的功能關閉一個,逐漸的把用戶引導到 member1.taobao.com,等所有功能都替換完畢之后,關閉 member.taobao.com。后來很長時間里面都是在用 member1 這樣奇怪的域名,兩年后有另外一家互聯網公司開始做電子商務了,我們發現他們的域名也叫 member1.xx.com、auction1.xx.com……        

        說了開發模式,再說說用到的 Java MVC 框架,當時的 struts1.x 是用的比較多的框架,但是用過 webwork 和 struts2 的同學可能知道,struts1.x 在多人協作方面有很多致命的弱點,由于沒有一個輕量框架作為基礎,因此很難擴展,這樣架構師對于基礎功能和全局功能的控制就很難做到。而阿里巴巴的 18 個創始人之中,有個架構師,在 Jakarta Turbine 的基礎上,做了很多擴展,打造了一個阿里巴巴自己用的 MVC 框架 WebX (http://www.openwebx.org/docs/Webx3_Guide_Book.html), 這個框架易于擴展,方便組件化開發,它的頁面模板支持 JSP 和 velocity 等、持久層支持 ibatis 和 hibernate 等、控制層可以用 EJB 和 Spring(Spring 是后來才有的)。項目組選擇了這個強大的框架,這個框架如果當時開源了,也許就沒有 webwork 和 struts2 什么事了。另外,當時 Sun 在全世界大力推廣他們的 EJB,雖然淘寶的架構師認為這個東東用不到,但他們還是極力堅持。在經歷了很多次的技術討論、爭論和爭吵之后,這個系統的架構就變成了下圖的樣子:

淘寶技術發展(Java時代:脫胎換骨) 

        Java 應用服務器是 Weblogic,MVC 框架是 WebX、控制層用了 EJB、持久層是 iBATIS,另外為了緩解數據庫的壓力,商品查詢和店鋪查詢放在搜索引擎上面。這個架構圖是不是好看了一點了,親?        

        這幫 Sun 的工程師開發完淘寶的網站之后,又做了一個很牛的網站,叫“支付寶”。        

        其實在任何時候,開發語言本身都不是系統的瓶頸,業務帶來的壓力更多的是壓到了數據和存儲上。上面一篇也說到,MySQL 撐不住了之后換 Oracle,Oracle 的存儲一開始在本機上,后來在 NAS 上,NAS 撐不住了用 EMC 的 SAN 存儲,再然后 Oracle 的 RAC 撐不住了,數據的存儲方面就不得不考慮使用小型機了。在 2004 年的夏天,DBA 七公、測試工程師郭芙和架構師行癲,踏上了去北京測試小型機的道路。他們帶著小型機回來的時候,我們像歡迎領袖一樣的歡迎他們,因為那個是我們最值錢的設 備了,價格表上的數字嚇死人。小型機買回來之后我們爭相合影,然后 Oracle 就跑在了小型機上,存儲方面從 EMC 低端 cx 存儲到 Sun oem hds 高端存儲,再到 EMC dmx 高端存儲,一級一級的往上跳。        

        到現在為止,我們已經用上了 IBM 的小型機、Oracle 的數據庫、EMC 的存儲,這些東西都是很貴的,那些年可以說是花錢如流水啊。有人說過“錢能解決的問題,就不是問題”,但隨著淘寶網的發展,在不久以后,錢已經解決不了我 們的問題了。花錢買豪華的配置,也許能支持 1 億 PV 的網站,但淘寶網的發展實在是太快了,到了 10 億怎么辦?到了百億怎么辦?在N年以后,我們不得不創造技術,解決這些只有世界頂尖的網站才會遇到的問題。后來我們在開源軟件的基礎上進行自主研發,一步 一步的把 IOE(IBM 小型機、Oracle、EMC 存儲)這幾個“神器”都去掉了。這就如同在《西游記》里面,妖怪們拿到神仙的兵器會非常厲害,連猴子都能夠打敗,但最牛的神仙是不用這些神器的,他們揮一 揮衣袖、翻一下手掌就威力無比。去 IOE 這一部分會在最后一個章節里面講,這里先埋個千里伏筆。        

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

來自: 趙超的Blog

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!