《淘寶技術(shù)這十年》2003-2013
NAS(Network Attached Storage淤翔,網(wǎng)絡(luò)附屬存儲(chǔ))
NetAPP(Network Appliance,美國網(wǎng)絡(luò)存儲(chǔ)技術(shù)有限公司)
RAC(Real Application Clusters眯勾,實(shí)時(shí)應(yīng)用集群)
NFS(Network File System,網(wǎng)絡(luò)文件系統(tǒng))
好的架構(gòu)是進(jìn)化來的紧唱,不是設(shè)計(jì)來的一疯。
好的功能也是進(jìn)化來的,不是設(shè)計(jì)來的炬搭。
好的架構(gòu)圖充滿美感蜈漓,一個(gè)架構(gòu)好不好,從審美的角度就能看出來宫盔∪谒洌【判斷一個(gè)架構(gòu)好不好之前,需要積累發(fā)現(xiàn)不好的經(jīng)驗(yàn)灼芭。外行看熱鬧有额,內(nèi)行看門道。經(jīng)歷了不好才能知道“好”是什么樣彼绷∥∮樱】
淘寶收款方式
階段一:最早,買家打給賣家都是通過銀行轉(zhuǎn)賬匯款寄悯,有些騙子收了錢卻不發(fā)貨萤衰,干脆逃之夭夭。一個(gè)人這么干之后热某,很多人都學(xué)會(huì)了腻菇。
階段二:淘寶網(wǎng)這伙人開始研究防騙子的解決方案,他們看了Paypal的支付方式昔馋,發(fā)現(xiàn)不能解決問題筹吐。研究了類似QQ幣的東西,想弄個(gè)“淘寶幣”秘遏,發(fā)現(xiàn)也不行丘薛。后來有人把這些想法糅合起來,想到了“擔(dān)保交易”這種第三方托管資金的方法邦危。
于是在2003年10月洋侨,淘寶網(wǎng)上線了一個(gè)功能,叫做“安全交易”倦蚪,賣家如果選擇支持這種功能希坚,買家就會(huì)把錢交給淘寶網(wǎng),等他收到貨之后陵且,淘寶網(wǎng)再把錢給賣家裁僧。這就是現(xiàn)在的“支付寶”。這個(gè)功能最早是讓賣家可選的,因?yàn)檫@會(huì)延遲他收款的周期聊疲。
但一旦賣家用了這個(gè)之后茬底,就發(fā)現(xiàn)交易量猛增,一年之后获洲,幾乎所有的賣家都選擇擔(dān)保交易阱表,到后來干脆所有的交易必須走擔(dān)保交易。在2012年支付寶的年會(huì)上贡珊,支付寶公布2011年的交易筆數(shù)已是Paypal的兩倍最爬。
這個(gè)劃時(shí)代的創(chuàng)新,其實(shí)就是在不斷思索過程中的一個(gè)靈光乍現(xiàn)飞崖。
當(dāng)時(shí)多數(shù)銀行的網(wǎng)站已經(jīng)實(shí)現(xiàn)在線支付烂叔,但他們的網(wǎng)關(guān)五花八門,用什么技術(shù)的都有固歪,必須一家一家地去接。而且銀行網(wǎng)關(guān)不保證用戶付錢后就一定扣款成功,不保證扣款成功后就一定通知淘寶,也不保證同志淘寶后就一定到賬浪感,一級(jí)不保證通知到了就不重復(fù)通知哺徊。
苗人鳳必須每天手工核對(duì)賬單,少一分錢就睡不著覺垫蛆,因?yàn)橘~對(duì)不齊就一定是有人的錢找不到地方了,這可是天大的問題。
另外他為了測(cè)試這些功能判帮,去杭州所有的銀行都辦理了一張銀行卡。一大堆銀行卡擺在桌子上溉箕,不知道的人還以為他一定很有錢晦墙,其實(shí)里面都只是十元八元的。
淘寶和易趣(eBay中國)過招
和易趣過招第一招:免費(fèi)肴茄。讓用戶無需成本就能進(jìn)來晌畅。
和易趣過招第二招:安全支付。讓用戶放心付款寡痰,不必?fù)?dān)心被騙抗楔。
和易趣過招第三招:旺旺。淘寶旺旺不是自己生出來的拦坠,是從阿里巴巴的“貿(mào)易通”復(fù)制過來的连躏。【不要重新發(fā)明輪子】
eBay不允許買賣雙方在線聊天贞滨,收購了Skype之后也沒有用到電子商務(wù)中去入热。
旺旺推出沒多久,做雪餅的旺旺找上門來說淘寶侵權(quán)了,然后改名為淘寶旺旺才顿。
淘寶網(wǎng)2004年從PHP語言轉(zhuǎn)換成了Java語言莫湘。
遇到的問題:2004年初,SQL Relay的問題解決不了郑气,數(shù)據(jù)庫必須要用Oracle幅垮,那么從哪里開始動(dòng)刀呢?只有換開發(fā)語言了尾组。
為什么換Java:1.Java是當(dāng)時(shí)成熟的網(wǎng)站開發(fā)語言忙芒,它有比較良好的企業(yè)開發(fā)框架,被世界上主流的大規(guī)模網(wǎng)站普遍采用讳侨。2.有Java開發(fā)經(jīng)驗(yàn)的人比較多呵萨,后續(xù)維護(hù)成本比較低。
請(qǐng)誰來換跨跨?請(qǐng)sun公司的人潮峦。原因一,他們是創(chuàng)造Java語言的那家公司勇婴,沒有人比他們更懂Java忱嘹。原因二,eBay的系統(tǒng)剛剛從C++改到Java耕渴,而且就是請(qǐng)sun的工程師改造成Java架構(gòu)的拘悦。他們不僅更懂Java,而且更懂eBay橱脸。
需求:要求在遷移過程中础米,不停止服務(wù),原來系統(tǒng)的bugfix和功能改進(jìn)不受影響添诉。
淘寶網(wǎng)的做法:他們的大致方案是給業(yè)務(wù)分模塊屁桑,一個(gè)模塊一個(gè)模塊地漸進(jìn)式替換。
如用戶模塊吻商,老的member.taobao.com繼續(xù)維護(hù)掏颊,不斷添加新功能。新功能在新的模塊上開發(fā)艾帐,跟老的模塊共用一個(gè)數(shù)據(jù)庫乌叶,開發(fā)完畢之后放到不同的應(yīng)用集群上,
另開一個(gè)域名member1.taobao,com柒爸,同時(shí)再替換老的功能准浴,替換一個(gè),就把老的模塊上的功能關(guān)閉一個(gè)捎稚,逐漸把用戶引導(dǎo)到member1.taobao.com乐横,等所有的功能都替換完之后求橄,關(guān)閉member.taobao.com。
從設(shè)計(jì)上來看葡公,這個(gè)member1的二級(jí)域名應(yīng)該是一個(gè)過渡狀態(tài)罐农,但我們把member域名的代碼下線后,發(fā)現(xiàn)很難把member1切換回member催什,因?yàn)橛行┑胤桨焰溄訉懰懒恕?/p>
于是后來很長(zhǎng)時(shí)間里涵亏,我們都是在用member1.taobao.com這樣奇怪的域名。
Java MVC框架:當(dāng)時(shí)的struts1.x是用得比較多的框架蒲凶,但是用過webwork和struts2的人可能知道气筋, struts1.x在多人協(xié)作方面有很多致命的弱點(diǎn),由于沒有一個(gè)輕量框架作為基礎(chǔ)旋圆,因此宠默,很難擴(kuò)展,這樣架構(gòu)師對(duì)于基礎(chǔ)功能和全局功能的控制就很難做到灵巧。
而阿里巴巴的18個(gè)創(chuàng)始人之中搀矫,有個(gè)架構(gòu)師周悅虹,他在Jakarta Turbine的基礎(chǔ)上做了很多擴(kuò)展孩等,打造了一個(gè)阿里巴巴自己用的MVC框架WebX(http∶//www.openwebx. org/docs/Webx3_Guide_Book.html)艾君,這個(gè)框架易于擴(kuò)展,方便組件化開發(fā)肄方,它的頁面模板支持JSP和Velocity等,持久層支持ibatis和hibernate等蹬癌,控制層可以用EJB和Spring(Spring是后來才有的)权她。項(xiàng)目組選擇了這個(gè)強(qiáng)大的框架。另外逝薪,當(dāng)時(shí)Sun在全世界大力推廣他們的EJB隅要,雖然淘寶的架構(gòu)師認(rèn)為這個(gè)東西用不到,但他們還是極力堅(jiān)持董济。在經(jīng)歷了很多次的技術(shù)討論步清、爭(zhēng)論甚至爭(zhēng)吵之后,這個(gè)系統(tǒng)的架構(gòu)就變成了下圖的形式虏肾。
MVC框架是阿里的WebX廓啊,控制層用了EJB,持久層是ibatis封豪。
另外谴轮,為了緩解數(shù)據(jù)庫的壓力,商品查詢和店鋪查詢放在搜索引擎中吹埠。
支付寶
Sun的這幫工程師開發(fā)完淘寶的網(wǎng)站之后第步,用同樣的架構(gòu)又做了一個(gè)很牛的網(wǎng)站疮装,叫“支付寶”。(上一篇說過支付寶最初是淘寶上的“安全交易”功能粘都,這個(gè)功能后來獨(dú)立出來廓推,成立了一個(gè)網(wǎng)站,也成立了一個(gè)公司翩隧,就是現(xiàn)在的支付寶樊展。把支付寶從淘寶分出去的人,就是Sun公司的這幾個(gè)人鸽心。)
上面的架構(gòu)中滚局,引入了搜索引擎iSearch(前文說過,iSearch其實(shí)是在LAMP系統(tǒng)運(yùn)行一段時(shí)間之后被多隆引進(jìn)的顽频,換為Oracle之后只是替換一下數(shù)據(jù)源)藤肢。
iSearch搜索引擎的原理:很簡(jiǎn)單,就是把數(shù)據(jù)庫里的數(shù)據(jù)dump(傾倒)成結(jié)構(gòu)化的文本文件后糯景,放在硬盤上嘁圈,提供Web應(yīng)用以約定的參數(shù)和語法來查詢這些數(shù)據(jù)。
需要做到快速更新數(shù)以億計(jì)的信息蟀淮,以及保證非常高的容量和并發(fā)量最住。
場(chǎng)景:你在淘寶上發(fā)布一件商品,過了1個(gè)小時(shí)還搜不到怠惶,肯定要郁悶了涨缚。
其實(shí)在任何時(shí)候,開發(fā)語言本身都不是系統(tǒng)的瓶頸策治,業(yè)務(wù)帶來的壓力更多的存在于數(shù)據(jù)和存儲(chǔ)方面脓魏。
前面也說到,MySQL撐不住之后換為Oracle通惫,Oracle的存儲(chǔ)一開始在本機(jī)上茂翔,后來在NAS上,NAS撐不住了用EMC的SAN存儲(chǔ)履腋,再后來珊燎,Oracle的RAC撐不住了,數(shù)據(jù)的存儲(chǔ)方面就不得不考慮使用小型機(jī)遵湖。悔政、
在2004年夏天,DBA七公奄侠、測(cè)試工程師郭芙和架構(gòu)師行癲卓箫,踏上了去北京測(cè)試小型機(jī)的道路。他們帶著小型機(jī)回來的時(shí)候垄潮,我們像歡迎領(lǐng)袖一樣歡迎他們烹卒,因?yàn)槟鞘俏覀冏钪靛X的設(shè)備闷盔,價(jià)格表上的數(shù)字嚇?biāo)廊恕P⌒蜋C(jī)買回來之后旅急,我們爭(zhēng)相合影逢勾,然后Oracle就運(yùn)行在了小型機(jī)上,存儲(chǔ)方面藐吮,從EMC低端CX存儲(chǔ)到Sun oem hds高端存儲(chǔ)溺拱,再到EMC dmx高端存儲(chǔ),一級(jí)一級(jí)地往上跳谣辞。
到2004年底迫摔,淘寶網(wǎng)已經(jīng)有4百多萬種商品了,日均4千多萬個(gè)PV泥从,注冊(cè)會(huì)員達(dá)400萬個(gè)句占,全網(wǎng)成交額達(dá)10億元。
到現(xiàn)在為止躯嫉,我們已經(jīng)用上了IBM的小型機(jī)纱烘、Oracle的數(shù)據(jù)庫、EMC的存儲(chǔ)祈餐,這些東西都是很貴的擂啥,那些年可以說是花錢如流水。有人說過“錢能解決的問題帆阳,就不是問題”哺壶,但隨著淘寶網(wǎng)的發(fā)展,在不久以后蜒谤,錢已經(jīng)解決不了我們的問題了变骡。
花錢買豪華的配置,也許能支持1億個(gè)PV的網(wǎng)站芭逝,但淘寶網(wǎng)的發(fā)展實(shí)在是太快了,到了10億個(gè)PV怎么辦渊胸?到了百億怎么辦旬盯?在幾年以后,我們不得不創(chuàng)造技術(shù)翎猛,解決這些只有世界頂尖的網(wǎng)站才會(huì)遇到的問題胖翰。后來我們?cè)陂_源軟件的基礎(chǔ)上進(jìn)行自主研發(fā),一步一步地把IOE(IBM小型機(jī)切厘、Oracle萨咳、EMC存儲(chǔ))這幾個(gè)“神器”都去掉了。
這些神器就如同《西游記》中那些神仙的兵器疫稿,他們身邊的妖怪們拿到這些兵器能把猴子打得落荒而逃培他。但最牛的神仙是不依賴這些神器的鹃两,他們揮一揮衣袖、翻一下手掌就威力無比了舀凛。
一個(gè)企業(yè)級(jí)的Java系統(tǒng)應(yīng)該采用什么樣的架構(gòu)俊扳?
歸納網(wǎng)站遇到的問題,主要是對(duì)性能猛遍、容量和成本的控制馋记,這有哪些通用的解決方案?
在技術(shù)實(shí)力得到提升之后懊烤,淘寶網(wǎng)的哪些業(yè)務(wù)有了突飛猛進(jìn)的發(fā)展梯醒?哪些業(yè)務(wù)又會(huì)遇到技術(shù)的障礙?
(1)【IM工具是什么:IM工具是一種即時(shí)通訊方式腌紧。im工具可允許兩人或多人使用網(wǎng)路即時(shí)的傳遞文字訊息茸习、檔案、語音與視頻進(jìn)行交流寄啼。一個(gè)好的im工具可以幫助節(jié)約企業(yè)成本逮光,降低溝通門檻,提高工作效率墩划。
在常見im工具使用情況中涕刚,我們總會(huì)遇到通訊列表聯(lián)系人繁雜,找人麻煩乙帮;傳統(tǒng)客服系統(tǒng)中歷史消息杜漠,信息太多記不住察净;信息回溯難驾茴,聊天記錄不完整等等問題∏饪ǎ】
(2)BUG-FIX:漏洞修補(bǔ)锈至。
This is a bug-fix release:這是一個(gè)漏洞修補(bǔ)的版本。
意思是這個(gè)版本沒有增加新的功能译秦,只是對(duì)上一版本的漏洞(BUG:蟲子)做了修補(bǔ)峡捡。
(3)去IOE
“去 IOE”指的是擺脫掉IT部署中原有的IBM小型機(jī)、Oracle數(shù)據(jù)庫以及EMC存儲(chǔ)的過度依賴筑悴。告別最后一臺(tái)小機(jī)们拙,意味著整個(gè)阿里集團(tuán)盡管還有一些Oracle數(shù)據(jù)庫和EMC存儲(chǔ),但是IBM小型機(jī)已全部被替換阁吝。2013年7月10日砚婆,淘寶重中之重的廣告系統(tǒng)使用的Oracle數(shù)據(jù)庫下線,也是整個(gè)淘寶最后一個(gè) Oracle數(shù)據(jù)庫突勇。這兩件事合在一起是阿里巴巴技術(shù)發(fā)展過程中的一個(gè)重要里程碑装盯。
————————————————
版權(quán)聲明:本文為CSDN博主「弱弱的羊羔」的原創(chuàng)文章坷虑,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明验夯。原文鏈接:https://blog.csdn.net/hsghggt/article/details/83720571