淘寶技術發展

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  目錄

  一、引言

  二、個人網站

  三、Oracle/支付寶/旺旺

  作者:趙超

  一、引言

  光棍節的狂歡

  “時間到,開搶!”坐在電腦前早已等待多時的小美一看時間已到2011年11月11日零時,便迫不及待地投身于淘寶商城一年一度的大型網購促銷活動——“淘寶雙11購物狂歡節”。小美打開早已收藏好的寶貝——某品牌的雪地靴,飛快的點擊購買,付款,一回頭發現3000雙靴子已被搶購一空。

  小美跳起來,大叫一聲“歐耶!”

  小美不知道,就在11日零點過后的這一分鐘內,全國有342萬人和她一起涌入淘寶商城。當然,她更不知道,此時此刻,在淘寶杭州的一間辦公室里,燈火通明,這里是“戰時指揮部”,淘寶技術部的一群工程師,正在緊盯著網站的流量和交易數據。白板上是他們剛剛下的注,賭誰能最準確地猜中流量峰值和全天的交易總額。他們的手邊放著充足的食物和各類提神的飲料。

  一陣急促的電話聲響起來,是前線部門詢問數據的,工程師大聲報著:“第1分鐘,進入淘寶商城的會員有342萬”。過一會工程師主動拿起電話:“交易額超過1億了,現在是第8分鐘。”接下來,“第21分鐘,剛突破2億”。“第32分鐘,3億了”。“第1個小時,4.39億”。這些數據隨后出現在微博上,引起一片驚呼。

  “完蛋了!”突然有人大喝一聲,所有的眼睛都緊張的盯著他,只見他撓撓頭,嘿嘿的笑道“我賭的少了,20億輕松就能過了,我再加5億”,他跑去白板邊上把自己的賭注擦去,寫上25,接下來有人寫上28,有人寫上30,有人跑到微博上開下盤口,同事們紛紛轉載下注。接下來的這24個小時,戰時指揮部的工程師們都不能休息,他們盯著網站的各種監控指標,適時的調整機器和增減功能。頂住第一波高峰之后,這些人開始忙里偷閑的給自己買東西,大家互相交流著哪家買的移動硬盤靠譜,哪家衣服適合自己的女朋友,不時的有人哀嚎寶貝被人搶了、信用卡額度不夠了。同時,旁邊白板上的賭注越下越大。

  11月11日,這個棍子最多的日子被網民自我調侃的變成了一個節日——“光棍節”。而淘寶網又用瘋狂的折扣促銷給它賦予了另外一個意義——“購物狂歡節”。2011年11月11日這一天,淘寶商城與淘寶網交易額之和突破52億,這個數字是“購物天堂”香港一天零售總額8.5億的6倍。

  網民感受到的是瘋搶的喜悅,而網站的技術人員感受到的卻是“壓力山大”。就如同你家辦酒席,宴請左鄰右舍,這個辦起來容易。倘若宴請十里八鄉所有的人,吃飯的人自然開心,但卻不是一般人家能夠辦得起來的。能辦得起來如此盛宴者,需要強大的財力物力、組織能力、技術實力(例如做這么多菜,你的炒鍋一定要是“分布式的”、“可復制的”、“可擴展的”,洗菜切菜要有“工作流引擎”,上菜的路徑要用圖論來計算出來,甚至連廚房的下水道都要重新設計)。

  淘寶能夠舉辦如此盛宴,網站的技術實力可見一斑。淘寶網擁有全國最大的Hadoop分布式計算集群之一,日新增數據50TB,有40PB海量數據存儲。分布在全國各地80多個節點的CDN網絡,支持的流量超過800Gbps。淘寶的搜索引擎能夠對數十億的商品數據進行實時搜索,另外還擁有自主研發的文件存儲系統和緩存系統,以及Java中間件和消息中間件系統,這一切組成了一個龐大的電子商務操作系統。另外從商業數據上來看,Amazon的財報顯示2011年完成了大約480億美金的交易額,eBay 2011年財報全年完成了大約600億美金的交易額(不包括其獨立的汽車交易平臺)。不管從交易額、商品數量、同比增速等指標上看,淘寶網均遠超于此,是目前全球最大的電子商務平臺。(由于淘寶非上市公司,未公布2011年業績,以上內容來自淘寶網技術副總裁@_行癲 的微博)

  以上這些技術數據可能已經讓一些同學產生不適的感覺,為了讓更多的人讀懂這本書,我們從技術的角度來看,小美訪問淘寶網的時候,網站上發生了什么事情。參考資料:《技術普及帖:你剛才在淘寶上買了一件東西》,來自南京郵電大學孫放同學。

  為了有個更直觀的對比,我們說一個同行,他在2011年光棍節之前做促銷,流量上去之后,達到12Gbps(他們有這么大的流量,老板很高興,在微博上面說了這個數據),這時候流量達到了極限,網站幾乎掛掉,用戶無法下訂單。而淘寶網光棍節當天網絡的流量最高達到800多Gbps,帶給各家銀行和快遞公司的流量也讓他們壓力山大,如臨大敵(后來,他們以能夠撐住淘寶帶來的流量為榮而到處宣傳)。另外如果你在網上購買過火車票的話,更能體會到網站能支持多大的流量有多重要。但這不是一朝一夕做出來的,也不是有錢就能辦到的。

  以上對比的這些網站,也許讀者很容易就猜到是哪一家,這里拿出來作對比,絕對沒有嘲笑人家的意思,采用通常的網站技術方案,能做到這種程度已經不錯了。任何網站的發展都不是一蹴而就的,在什么樣的階段采用什么樣的技術。在發展的過程中網站會遇到各種各樣的問題和業務帶來的壓力,正是這些原因才推動著技術的進步和發展,而技術的發展又會反過來促進業務的更大提升。二者互為因果,相互促進。如今淘寶網的流量已經是全球排名第12、國內排名第3(美國的eBay全球排名23,國內前兩名是百度和騰訊)。淘寶網的系統也從使用一臺服務器,到采用萬臺以上的服務器。本書就為大家描述淘寶網在整個發展過程中,所有的主動和被動的技術變革的前因后果,這由很多有趣的故事組成。

  正如同很多人或組織成功了以后,就會為自己的出身編造一個美麗的傳說。淘寶網的出身,網上也有非常多的傳說,下面我們就從它的出生開始講起。

  二、個人網站

  2003年4月7日,馬云,在杭州,成立了一個神秘的組織。他叫來十位員工,要他們簽了一份協議,這份協議要求他們立刻離開阿里巴巴,去做一個神秘的項目。這個項目要求絕對保密,老馬戲稱“連說夢話被老婆聽到都不行,誰要是透漏出去,我將追殺到天涯海角”。這份協議是英文版的,匆忙之間,大多數人根本來不及看懂,但出于對老馬的信任,都卷起鋪蓋離開了阿里巴巴。

  他們去了一個神秘的據點——湖畔花園小區的一套未裝修的房子里,房子的主人是馬云。這伙人剛進去的時候,馬云給他們布置了一個任務,就是在最短的時間內做出一個個人對個人(C2C)的商品交易的網站。現在出一個問題考考讀者,看你適不適合做淘寶的創業團隊。親,要是讓你來做,你怎么做?

  在說出這個答案之前,容我先賣個關子,介紹一下這個創業團隊的成員:三個開發工程師(虛竹、三豐、多隆)、一個UED(二當家)、三個運營(小寶、阿珂、破天)、一個經理(財神)、還有就是馬云和他的秘書。當時對整個項目組來說壓力最大的就是時間,怎么在最短的時間內把一個從來就沒有的網站從零開始建立起來?了解淘寶歷史的人知道淘寶是在2003年5月10日上線的,這之間只有一個月。要是你在這個團隊里,你怎么做?我們的答案就是:買一個來。

  買一個網站顯然比做一個網站要省事一些,但是他們的夢想可不是做一個小網站而已,要做大,就不是隨便買個就行的,要有比較低的維護成本,要能夠方便的擴展和二次開發。那接下來就是第二個問題:買一個什么樣的網站?答案是:輕量一點的,簡單一點的,于是買了這樣一個架構的網站:LAMP(Linux+Apache+MySQL+PHP)。這個直到現在還是一個很常用的網站架構模型。這種架構的優點是:無需編譯,發布快速,PHP功能強大,能做從頁面渲染到數據訪問所有的事情,而且用到的技術都是開源的,免費。

  當時我們是從一個美國人那里買來的一個網站系統,這個系統的名字叫做PHPAuction(他們的官方網站 http://www.phpauction.net,這個名字很直白,一眼就看出來這個系統是用什么語言做的、是干什么用的),PHPAuction有好幾個版本,我們買的是最高版的,功能比較多,而且最重要的是對方提供了源代碼。最高版比較貴,花了我們2000美金(貌似現在降價了,只要946美元)。買來之后不是直接就能用的,需要很多本地化的修改,例如頁面模板改的漂亮一點,頁頭頁腳加上自己的站點簡介等,其中最有技術含量的是對數據庫進行了一個修改。原來是從一個數據庫進行所有的讀寫操作,拿過來之后多隆把它給拆分成一個主庫、兩個從庫,讀寫分離。這么做的好處有幾點:存儲容量增加了,有了備份,使得安全性增加了,讀寫分離使得讀寫效率提升了。這樣整個系統的架構就如下圖所示:

  其中Pear DB是一個PHP模塊,負責數據訪問層。另外也用開源的論壇系統PHPBB(http://www.phpbbchina.com )搭建了一個小的論壇社區,虛竹負責機器采購、配置、架設等,三豐和多隆負責編碼,他們把交易系統和論壇系統的用戶信息打通,給運營人員開發出后臺管理(admin系統)的功能,把交易類型從只有拍賣這一種增加為拍賣、一口價、求購商品、海報商品(意思是還沒推出的商品,先掛個海報出來)這四種。(PHPAuction只有拍賣的交易,Auction即拍賣的意思。@_行癲在微博中提到:今天eBay所有交易中拍賣交易仍然占了40%,而在中國,此種模式在淘寶幾乎從一開始就未能占據優勢,如今在主流的交易中幾乎可以忽略不計。背后的原因一直令人費解。我大致可以給出其中一種解釋,eBay基本在發達國家展開業務,制造業外包后,電子商務的基本群體大多只能表現為零散的個體間交易。

  在經歷了另外一些有趣的事情之后(這些有趣的事情包括“淘寶”這個名字的由來,員工花名的由來等等,由于本書主要描述技術方面的故事,對這些有興趣的可以去網上找),網站開始上線運行了。

  在接下來的大半年時間里,這個網站迅速顯示出了它的生機。這里有必要提一下當時的市場環境,非典(SARS)的肆虐使得大家都不敢出門,尤其是去商場之類人多的地方。另外在神州大地上最早出現的C2C網站易趣也正忙的不亦樂乎,2002年3月,eBay以3000萬美元收購了易趣公司33%的股份,2003年6月以1.5億美元收購了易趣公司剩余67%的股份。當時淘寶網允許買賣雙方留下聯系方式,允許同城交易,整個操作過程簡單輕松。而eBay為了收取交易傭金,是禁止這么做的,這必然增加了交易過程的難度。而且eBay為了全球統一,把易趣原來的系統替換成了美國eBay的系統,用戶體驗一下子全變了,操作起來非常麻煩,這等于是把積累的用戶拱手送給了淘寶。為了不引起eBay的注意,淘寶網在2003年里一直聲稱自己是一個“個人網站”。由于這個創業團隊強大的市場開拓和運營能力,淘寶網發展的非常迅猛,2003年底就吸引了注冊用戶XXX,最高每日31萬PV,從5月到年底成交額4000萬。這沒有引起eBay的注意,卻引起了阿里巴巴內部很多員工的注意,他們覺得這個網站以后會成為阿里巴巴強勁的對手。甚至有人在內網發帖,忠告管理層要警惕這個剛剛起步的網站,但管理層似乎無動于衷。(這個團隊的保密工作做的真好)

  在市場和運營的后方,淘寶網的技術團隊也在快速的做著系統的改進和創新。這里還有個有趣的故事,eBay和易趣早期都有員工在論壇上響應用戶的需求,eBay的論壇用粉紅色背景來區分員工的發言,易趣的員工在論壇上昵稱都選各種豆豆,例如黃豆豆、蠶豆豆等。淘寶在討論運營策略的時候提到這個問題,要求所有的員工都去論壇上回答用戶的問題。最早回答問題的任務落在小寶頭上,那我們用什么名字好呢?“淘淘”?“寶寶”?小寶都不滿意,太女性化了。討論了很久之后,小寶靈光乍現,干脆取個名字叫“小寶”吧,小寶帶七個老婆來開店,迎接各位客官,很有故事性。于是很多武俠小說中的人物開始在論壇中行俠仗義,這些昵稱下面標志著“淘寶店小二”,他們回答著各種各樣的問題,快速響應著用戶的各種需求。如果是技術上能解決的,幾個人商量一下,馬上就開發、測試、發布上線。反過來對比一下,易趣被eBay收購之后,系統更換成了全球通用的版本,響應用戶的一個需求需要層層審批,反應速度自然慢了下來。

  當時淘寶第一個版本的系統里面已經包含了商品發布、管理、搜索、商品詳情、出價購買、評價投訴、我的淘寶這些功能(現在主流程中也是這些模塊。在2003年10月增加了一個功能節點:“安全交易”,這個是支付寶的雛形)。隨著用戶需求和流量的不斷增長,系統上面做了很多的日常改進,服務器由最初的一臺變成了三臺,一臺負責發送email、一臺負責運行數據庫、一臺負責運行Web App。過一段時間之后,商品搜索的功能占用數據庫資源太大了(用like搜索的,很慢),又從阿里巴巴中文站搬過來他們的搜索引擎iSearch,起初iSearch索引的文件放在硬盤上,隨著數據量的增長,又采購了NetApp服務器放置iSearch。

  如此快節奏的工作,其實大家都累得不行,有人就提議大家隨時隨地的鍛煉身體,可是外面SARS橫行,在一個一百多方的房子里,怎么鍛煉呢?高挑美女阿珂提議大家練習提臀操,這個建議遭到男士的一致反對,后來虛竹就教大家練習倒立,這個大家都能接受。于是這個倒立的傳統一直延續至今,和花名文化、武俠文化一并傳承了下來。

  隨著訪問量和數據量的飛速上漲,問題很快就出來了,第一個問題出現在數據庫上。MySQL當時是第4版的,我們用的是默認的存儲引擎MyISAM,這種類型讀數據的時候會把表鎖住(我們知道Oracle在寫數據的時候會有行鎖,讀數據的時候是沒有的),尤其是主庫往從庫上面寫數據的時候,會對主庫產生大量的讀操作,使得主庫性能急劇下降。這樣在高訪問量的時候,數據庫撐不住了。另外,當年的MySQL不比如今的MySQL,在數據的容量和安全性方面也有很多先天的不足(和Oracle相比)。

  三、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年的上半年開始,整個網站就開始了一個脫胎換骨的手術。

  (待續)


趙超 2012-02-26 23:57:34

[新一篇] 支點:技術選擇的精髓

[舊一篇] 從P1到P7——我在淘寶這7年
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表