淘寶技術發展(Oracle/支付寶/旺旺)
淘寶網作為個人網站發展的時間其實并不長,由于它太引人注目了,馬云在 2003 年 7 月就宣布了這個是阿里巴巴旗下的網站,隨后在市場上展開了很成功的運作。最著名的就是利用中小網站來做廣告,突圍 eBay 在門戶網站上對淘寶的廣告封鎖。上網比較早的人應該還記得那些在右下角的彈窗和網站腰封上一閃一閃的廣告。市場部那位到處花錢買廣告的家伙,太能花錢了, 一出手就是幾百萬,他被我們稱為“大少爺”。
“大少爺”們做的廣告,帶來的就是迅速上漲的流量和交易量。在 2003 年底,MySQL 已經撐不住了,技術的替代方案非常簡單,就是換成 Oracle。換 Oracle 的原因除了它容量大、穩定、安全、性能高之外,還有人才方面的原因。在 2003 年的時候,阿里巴巴已經有一支很強大的 DBA 團隊了,有馮春培、汪海(七公)這樣的人物,后來還有馮大輝(@fenng)、陳吉平(拖雷)。這樣的人物牛到什么程度呢?Oracle 給全球的技術專家頒發一些頭銜,其中最高級別的叫 ACE(就是撲克牌的“尖兒”,夠大的吧),被授予這個頭銜的人目前全球也只有 300 多名(名單在這里: http://apex.oracle.com/pls/otn/f?p=19297:3 ),當年全球只有十幾名。有如此強大的技術后盾,把 MySQL 換成 Oracle 是順理成章的事情。
但更換數據庫不是只換個庫就可以的,訪問方式,SQL 語法都要跟著變,最重要的一點是,Oracle 并發訪問能力之所以如此強大,有一個關鍵性的設計——連接池。但對于 PHP 語言來說它是放在 Apache 上的,每一個請求都會對數據庫產生一個連接,它沒有連接池這種功能(Java 語言有 Servlet 容器,可以存放連接池)。那如何是好呢?這幫人打探到 eBay 在 PHP 下面用了一個連接池的工具,是 BEA 賣給他們的。我們知道 BEA 的東西都很貴,我們買不起,于是多隆在網上尋尋覓覓,找到一個開源的連接池代理服務 SQLRelay( http://sourceforge.jp/projects/freshmeat_sqlrelay ),這個東西能夠提供連接池的功能,多隆對它進行了一些功能改進之后就拿來用了。這樣系統的架構就變成了如下的樣子:
數據一開始是放在本地的,DBA 們對 Oracle 做調優的工作,也對 SQL 進行調優。后來數據量變大了,本地存儲不行了。買了 NAS(NetworkAttached Storage:網絡附屬存儲),NetApp 的 NAS 存儲作為了數據庫的存儲設備,加上 Oracle RAC(Real Application Clusters,實時應用集群)來實現負載均衡。七公說這實際上是走了一段彎路,NAS 的 NFS(Network File System)協議傳輸的延遲很嚴重,但那時侯不懂。后來采購了 Dell 和 EMC 合作的 SAN 低端存儲,性能一下子提升了 10 幾倍,這才比較穩定了。再往后來數據量更大了,存儲的節點一拆二、二拆四,RAC 又出問題了。這才踏上了購買小型機的道路。在那段不穩定的時間里,七公曾經在機房住了 5 天 5 夜。
替換完數據庫,時間到了 2004 年春天,俗話說“春宵一刻值千金”,但這些人的春宵卻不太好過了。他們在把數據的連接放在 SQLRelay 之后就噩夢不斷,這個代理服務經常會死鎖,如同之前的 MySQL 死鎖一樣。雖然多隆做了很多修改,但當時那個版本內部處理的邏輯不對,問題很多,唯一解決的辦法就是“重啟”它的服務。這在白天還好,連接上機房的服務 器,把進程殺掉,然后開啟就可以了,但是最痛苦的是它在晚上也要死掉,于是工程師們不得不 24 小時開著手機,一旦收到“SQLRelay 進程掛起”的短信,就從春夢中醒來,打開電腦,連上機房,重啟服務。后來干脆每天睡覺之前先重啟一下。做這事最多的據說是三豐,他現在是淘寶網的總裁。現 在我們知道,任何牛B的人物,都有一段苦B的經歷。
微博上有人說“好的架構是進化來的,不是設計來的”。的確如此,其實還可以再加上一句“好的功能也是進化來的,不是設計來的”。在架構的進化過 程中,業務的進化也非常迅猛。最早的時候,買家打錢給賣家都是通過銀行轉賬匯款,有些騙子收了錢卻不發貨,這是一個很嚴重的問題。然后這伙人研究了 PayPal 的支付方式,發現也不能解決問題。后來這幾個聰明的腦袋又想到了“擔保交易”這種第三方托管資金的辦法。于是在 2003 年 10 月,淘寶網上面上線了一個功能,叫做“安全交易”,賣家選擇支持這種功能的話,買家會把錢交給淘寶網,等他收到貨之后,淘寶網再把錢給賣家。這就是現在的 支付寶,在前兩天(2012.2.21)年會上,支付寶公布 2011 年的交易筆數已經是 PayPal 的兩倍。這個劃時代的創新,其實就是在不斷的思索過程中的一個靈光乍現。
當時開發“安全交易”功能的是茅十八和他的徒弟苗人鳳(茅十八開發到一半去上海讀 MBA 去了,苗人鳳現在是支付寶的首席業務架構師),開發跟銀行網關對接的功能的是多隆。當時多數銀行的網站已經支持在線支付了,但多隆告訴我,他們的網關五花 八門,用什么技術的都有,必須一家一家去接。而且他們不保證用戶付錢了就一定扣款成功、不保證扣款成功了就一定通知淘寶、不保證通知淘寶了就一定能通知 到、不保證通知到了就不重復通知。這害苦了苗人鳳,他必須每天手工核對賬單,對不齊的話就一定是有人的錢找不到地方了,少一分錢都睡不著覺。另外他為了測 試這些功能,去杭州所有的銀行都辦理了一張銀行卡。一堆銀行卡擺在桌子上,不知道的人還以為這個家伙一定很有錢,其實里面都只是十塊八塊的。現在我們再一 次知道,任何牛B的人物,都必須有一段苦B的經歷。
有人說淘寶打敗易趣(eBay 中國)是靠免費,其實這只是原因之一。如果說和易趣過招第一招是免費的話,這讓用戶沒有門檻就愿意來,那第二招就是“安全支付”,這讓用戶放心付款,不必 擔心被騙。在武俠小說中真正的高手飛花摘葉即可傷人,他們不會局限于一招兩招,一旦出手,連綿不絕。而淘寶的第三招就是“旺旺”,讓用戶在線溝通。其實淘 寶旺旺也不是自己生出來的,是從阿里巴巴的“貿易通”復制過來的。從 2004 年 3 月開始,“叮咚、叮咚”這個經典的聲音就回蕩在所有淘寶買家和賣家的耳邊,“親,包郵不?”,“親,把零頭去掉行不?”,這親切的砍價聲造就了后來的“淘 寶體”。有人說中國人就是愛砍價,雖然筆者體會不到砍價成功后有多少成就感,但每次我去菜市場,看到大媽們砍價砍得天昏地暗,那滿足的勁頭堪比撿到了錢, 我就深刻的理解了淘寶旺旺在交易過程中的價值。我猜 eBay 也體會不到砍價的樂趣,他們一直不允許買賣雙方在線聊天,收購了 skype 之后也沒有用到電子商務中去。
旺旺在推出來沒多久,就惹了一個法律方面的麻煩。有個做雪餅的廠家找上門來,說我們侵權了,他們家的雪餅很好吃,牛奶也做得不錯,我們都很喜 歡。然后我們就在旺旺的前面加了兩個字,叫做“淘寶旺旺”。在那個野蠻生長的階段,其實很多產品都是想到什么就做什么,例如我們還搭建過一個聊天室,但似 乎淘寶網不是一個閑聊的地方,這個聊天室門可羅雀,一段時間后就關閉掉了。
SQLRelay 的問題搞得三豐他們很難睡個囫圇覺,那一年開半年會的時候,公司特地給三豐頒了一個獎項,對他表示深切的安慰。但不能總這樣啊,于是,2004年的上半年開始,整個網站就開始了一個脫胎換骨的手術。