淘寶青春:煩惱中成長(zhǎng)的巨人
講到這里,順便先辟個(gè)謠,網(wǎng)上有很多這樣騙轉(zhuǎn)發(fā)的勵(lì)志段子:“1998年,馬化騰等一伙人湊了50萬(wàn)元?jiǎng)?chuàng)辦了騰訊,
沒買房;1998年,史玉柱借了50萬(wàn)元搞腦白金,沒買房;1999年,丁磊用50萬(wàn)元?jiǎng)?chuàng)辦了163.com,沒買房;1999年,陳天橋炒股賺了50萬(wàn)元,創(chuàng)辦盛大,沒買房;1999年,馬云等18人湊了50萬(wàn)元注冊(cè)了阿里巴巴,沒買房。如果當(dāng)年他們用這50萬(wàn)元買了房,現(xiàn)在估計(jì)還在還著銀行的貸款吧。”事實(shí)上,阿里巴巴和淘寶網(wǎng)都是在馬云自己的房子里創(chuàng)辦的,阿里巴巴是1999年初發(fā)布上線的。所以,關(guān)于馬云買房子的事情,真相是這樣的。
淘寶網(wǎng)作為個(gè)人網(wǎng)站發(fā)展的時(shí)間其實(shí)并不長(zhǎng)由于它太引人注目了,馬云在2003年7月就宣布這個(gè)是阿里巴巴旗下的網(wǎng)站,隨后在市場(chǎng)上展開了很成功的推廣運(yùn)作。***的就是利用中小網(wǎng)站來做廣告,突圍eBay在門戶網(wǎng)站上對(duì)淘寶的廣告封鎖。這時(shí)候,eBay終于看到淘寶網(wǎng)這個(gè)后起之秀了,他對(duì)競(jìng)爭(zhēng)者的態(tài)度就是“封殺他”。eBay買斷了新浪、搜狐、網(wǎng)易的電子商務(wù)類型的廣告,簽署了排他性協(xié)議,切斷了淘寶在這上面做廣告的路子。大路不通,我們就獨(dú)辟蹊徑,上網(wǎng)比較早的人應(yīng)該還記得那些在右下角的彈窗和網(wǎng)站腰封上一閃一閃的廣告,“淘寶網(wǎng)”幾個(gè)字總是如影隨形地出現(xiàn)在任何中小型網(wǎng)站上。市場(chǎng)部那位到處花錢買廣告的家伙太能花錢了,一出手就是幾百萬(wàn)元,他被我們稱為“大少爺”。
數(shù)據(jù)庫(kù)從mySQL到Oracle
“大少爺”們做的廣告,帶來的就是迅速上漲的流量和交易量。在2003年年底,MySQL已經(jīng)撐不住了,技術(shù)的替代方案非常簡(jiǎn)單,就是換成Oracle。換為Oracle的原因除了它容量大、穩(wěn)定、安全、性能高之外,還有人才方面的原因。在2003年的時(shí)候,阿里巴巴已經(jīng)有一支很強(qiáng)大的DBA團(tuán)隊(duì)了,有魯國(guó)良、馮春培、汪海(七公)這樣的人物,后來還有馮大輝(@fenng)、陳吉平(拖雷)。這樣的人物牛到什么程度呢?Oracle給全球的技術(shù)專家頒發(fā)一些頭銜,其中***級(jí)別的叫ACE(就是撲克牌的“尖兒”,夠大的吧),被授予這個(gè)頭銜的人目前全球也只有300多名(公布名單的網(wǎng)址為http://apex.oracle.com/pls/otn/f?p=19297:3 ),當(dāng)年全球只有十幾名,而阿里巴巴就有4名。有如此強(qiáng)大的技術(shù)后
盾,把MySQL換成Oracle是順理成章的事情。
但更換數(shù)據(jù)庫(kù)不是只換個(gè)庫(kù)就可以的,其訪問方式和SQL語(yǔ)法都要跟著變,最重要的一點(diǎn)是,Oracle的性能和并發(fā)訪問能力之所以如此強(qiáng)大,有一個(gè)關(guān)鍵性的設(shè)計(jì)——連接池,連接池中放的是長(zhǎng)連接,是進(jìn)程級(jí)別的,在創(chuàng)建進(jìn)程的時(shí)候,它就要獨(dú)占一部分內(nèi)存空間。也就是說,這些連接數(shù)在固定內(nèi)存的Oracle Server上是有限的,任何一個(gè)請(qǐng)求只需要從連接池中取得一個(gè)連接即可,用完后釋放,這不需要頻繁地創(chuàng)建和斷開連接,而連接的創(chuàng)建和斷開的開銷是非常大的。但對(duì)于PHP語(yǔ)言來說,它對(duì)數(shù)據(jù)庫(kù)的訪問都是很直接的,每一個(gè)請(qǐng)求都要一個(gè)連接。如果是長(zhǎng)連接,應(yīng)用服務(wù)器增多時(shí),連接數(shù)就多了,就會(huì)把數(shù)據(jù)庫(kù)拖掛,如果是短連接,頻繁地連接后再斷開,性能會(huì)非常差(而Java語(yǔ)言有很多現(xiàn)成的連接池)。那如何是好呢?我們打探到eBay用了一個(gè)連接池的工具,是BEA賣給他們的。我們知道,BEA的東西都很貴,我們買不起,就放棄了找BEA的念頭,于是多隆在網(wǎng)上尋尋覓覓,找到一個(gè)開源的連接池代理服務(wù)SQL Relay(http://sqlrelay.sourceforge.net),這個(gè)東西能夠提供連接池的功能,多隆對(duì)它進(jìn)行了一些功能改進(jìn)之后,系統(tǒng)的架構(gòu)就變成了如下形式。
數(shù)據(jù)一開始是放在本地的,七公帶領(lǐng)的DBA們對(duì)Oracle做調(diào)優(yōu)的工作,也對(duì)SQL進(jìn)行調(diào)優(yōu)。后來數(shù)據(jù)量變大后,本地存儲(chǔ)無(wú)法滿足了,買了NAS(Network Attached Storage,網(wǎng)絡(luò)附屬存儲(chǔ)),NetApp(Network Appliance,美國(guó)網(wǎng)域存儲(chǔ)技術(shù)有限公司)的NAS作為數(shù)據(jù)庫(kù)的存儲(chǔ)設(shè)備,加上Oracle RAC(Real ApplicationClusters,實(shí)時(shí)應(yīng)用集群)來實(shí)現(xiàn)負(fù)載均衡。七公說這實(shí)際上是走了一段彎路,NAS的NFS(Network File System)協(xié)議傳輸?shù)难舆t很嚴(yán)重,但那時(shí)不懂。后來采購(gòu)了Dell和EMC合作的SAN低端存儲(chǔ),性能一下提升了十幾倍,這才比較穩(wěn)定了。再后來,數(shù)據(jù)量更大了,存儲(chǔ)的節(jié)點(diǎn)一拆二、二拆四,RAC又出問題了,這才踏上了購(gòu)買小型機(jī)的道路。在那段不穩(wěn)定的時(shí)間里,七公曾經(jīng)在機(jī)房住了5天5夜,差點(diǎn)被輻射成蜘蛛俠。
替換完數(shù)據(jù)庫(kù)后,時(shí)間到了2004年春天,俗話說“春宵一刻值千金”,但這些人的春宵卻不太好過,他們?cè)诎褦?shù)據(jù)的連接放在SQL Relay之后就噩夢(mèng)不斷,這個(gè)代理服務(wù)經(jīng)常會(huì)死鎖,如同之前的MySQL死鎖一樣。雖然多隆做了很多修改,但當(dāng)時(shí)那個(gè)版本內(nèi)部處理的邏輯不對(duì),問題很多,最快的解決辦法就是“重啟”它的服務(wù)。這在白天還好,只要連接上機(jī)房的服務(wù)器,把進(jìn)程殺掉,然后開啟就可以了。但是最痛苦的是它在晚上也要死掉,于是工程師們不得不24小時(shí)開著手機(jī),一旦收到“SQL Relay進(jìn)程掛起”的短信,就從春夢(mèng)中醒來,打開電腦,連上機(jī)房的網(wǎng)絡(luò),重啟服務(wù),后來干脆每天睡覺之前先重啟一下。做這事最多的據(jù)說是三豐,他現(xiàn)在是淘寶網(wǎng)的總裁?,F(xiàn)在我們知道,任何牛B的人物,都有一段苦B的經(jīng)歷。