BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            37 Posts :: 64 Stories :: 21 Comments :: 0 Trackbacks
          幾年以來(lái),eBay在幾個(gè)不同的大會(huì)上先后分享過(guò)幾次關(guān)于eBay技術(shù)的PPT,在這篇blog中,就以這些PPT來(lái)以旁觀者的角度分析下eBay的技術(shù)發(fā)展歷程,不論eBay現(xiàn)在的業(yè)績(jī)?nèi)绾危豢煞裾J(rèn),他們的技術(shù)還是挺強(qiáng)的,因此還是值得學(xué)習(xí),eBay的整個(gè)技術(shù)發(fā)展歷程從一定程度上來(lái)說(shuō)可以認(rèn)為是互聯(lián)網(wǎng)公司的典型技術(shù)發(fā)展歷程,基本上各家互聯(lián)網(wǎng)公司都在走著類似的路線,只是各家選擇的語(yǔ)言不同、具體的實(shí)現(xiàn)方案不同、細(xì)節(jié)不同,當(dāng)然,思路是一方面,實(shí)現(xiàn)又是另外一方面,只有兩者結(jié)合才能實(shí)現(xiàn)一個(gè)高可用、高性能和高并發(fā)的有海量數(shù)據(jù)的系統(tǒng)。

          本篇blog中涉及到的主要有eBay的以下三個(gè)PPT,先來(lái)闡述下這幾個(gè)PPT,最后從一個(gè)旁觀者的角度來(lái)總結(jié)下eBay的技術(shù)發(fā)展。
          ps: 以下提及的三個(gè)PPT均可在此下載:http://www.aygfsteel.com/BlueDavy/archive/2009/04/28/267970.html

          1、The eBay Architecture 2006
                這個(gè)PPT非常經(jīng)典,闡述了eBay從成立之初到2006年所經(jīng)歷的技術(shù)發(fā)展歷程,這個(gè)過(guò)程一定程度上也是目前大多數(shù)網(wǎng)站從小到大時(shí)的一個(gè)發(fā)展過(guò)程。
                在這個(gè)PPT中,eBay首先根據(jù)自己的經(jīng)驗(yàn),總結(jié)出了一些經(jīng)驗(yàn),這些經(jīng)驗(yàn)包括:
                (1). 每一層都要支持水平伸縮,按功能劃分;
                (2). 優(yōu)選異步方式為系統(tǒng)間交互的方式;
                (3). 減少系統(tǒng)間物理依賴以及提升部署的靈活性;
                (4). 自動(dòng)化的錯(cuò)誤診斷和通知,業(yè)務(wù)功能的降級(jí)支持。
               即使現(xiàn)在看這些經(jīng)驗(yàn),可謂是金玉良言,想必eBay也是在一個(gè)快速發(fā)展的過(guò)程經(jīng)歷了很多次血的教訓(xùn)才得到上面這些經(jīng)驗(yàn)的。
               在總結(jié)完經(jīng)驗(yàn)后,PPT開始詳細(xì)的闡述eBay從1995--2006的技術(shù)發(fā)展歷程,從V 1.0到V 2.x,首先是將系統(tǒng)重構(gòu)為3層結(jié)構(gòu),采用Oracle,業(yè)務(wù)服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器分開,采用索引,這也就是2.0版本;進(jìn)入2.1版本后,想必是數(shù)據(jù)庫(kù)壓力開始增大了,這有兩方面原因,一是訪問(wèn)量的上漲,二是數(shù)據(jù)量的上漲,因此將數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行了升級(jí),換成了更好的服務(wù)器,同時(shí)給前端加上了負(fù)載均衡,這應(yīng)該是為了前端應(yīng)用更簡(jiǎn)單的實(shí)現(xiàn)水平擴(kuò)展;進(jìn)入2.3版本后,增加了第二臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,以支持failover,提升可用性,同時(shí)其他的業(yè)務(wù)服務(wù)器在不斷的增加中,到2.3版本運(yùn)行的末階段,數(shù)據(jù)庫(kù)服務(wù)器已經(jīng)達(dá)到了運(yùn)行的極限;進(jìn)入2.4版本階段,專注解決數(shù)據(jù)庫(kù)壓力的問(wèn)題,采用的方案為將數(shù)據(jù)庫(kù)邏輯分區(qū)為多個(gè)實(shí)例;進(jìn)入2.5版本階段,開始進(jìn)行水平分表,例如按類目將商品分解到多張表中,或者讀寫分等。在V 2.5階段完成后,此時(shí)數(shù)據(jù)庫(kù)部分壓力的問(wèn)題基本解決,但在eBay面前又出現(xiàn)了新的問(wèn)題(畫外音:所以說(shuō)互聯(lián)網(wǎng)公司到最后技術(shù)的比拼也非常重要),幾百人維護(hù)同樣的代碼,甚至還達(dá)到了類允許的最大的方法數(shù)等問(wèn)題,于是進(jìn)入了eBay架構(gòu)的V 3時(shí)代。V 3最重要的是將整個(gè)應(yīng)用翻寫為Java,并提升了代碼的重用性和代碼的職責(zé)分離,同時(shí)為開發(fā)人員提供了一個(gè)開發(fā)的框架(應(yīng)該就是那篇著名的eclipse at eBay)。
                在PPT的最后,eBay又詳細(xì)的分享了他們對(duì)于構(gòu)建可伸縮系統(tǒng)的一些經(jīng)驗(yàn),這些經(jīng)驗(yàn)對(duì)多數(shù)人而言都會(huì)非常的有幫助,來(lái)看看。
                 (1). 數(shù)據(jù)層的伸縮
                 主要是三種方法:分解壓力,減少數(shù)據(jù)庫(kù)做的事情,無(wú)事務(wù)等技巧。
                 分解壓力最主要的方法有按功能進(jìn)行劃分,功能范圍內(nèi)的則可進(jìn)行水平劃分,在PPT中eBay還分享了下按功能劃分的一些例子,例如按用戶、商品、評(píng)價(jià)等,水平劃分方面同樣列舉了一些例子,例如讀寫分、hash分等。
                 對(duì)于數(shù)據(jù)層的伸縮,eBay在PPT中提到了非常關(guān)鍵的一點(diǎn),那就是應(yīng)用無(wú)需關(guān)心分庫(kù)、分表這些,這樣的話,無(wú)論是要分庫(kù)、合庫(kù)、分表還是合表,對(duì)應(yīng)用都是完全透明的,正是因?yàn)檫@個(gè)理念造就了eBay很早以前就擁有了令人驕傲的數(shù)據(jù)層,也就是DAL。
                 減少數(shù)據(jù)庫(kù)做的事情最主要的方法是不要在數(shù)據(jù)庫(kù)中做業(yè)務(wù)邏輯的處理,將耗CPU的操作(包括joins、sorting等)放到應(yīng)用中完成,使用Prepared statements和綁定變量。
                 所謂的無(wú)事務(wù)等技巧是指沒有分布式事務(wù),而改為采用補(bǔ)償?shù)确绞饺ケ3謹(jǐn)?shù)據(jù)一致性。
                 (2). 應(yīng)用層的伸縮
                 主要也是三種方法:分解壓力,減少依賴和虛擬的數(shù)據(jù)操作。
                 分解壓力最主要的方法有按功能劃分,水平則借助負(fù)載均衡來(lái)進(jìn)行伸縮,關(guān)于這里面的具體的一些技巧,PPT中提到了應(yīng)拋棄大部分Java EE的東西,保持應(yīng)用層的無(wú)狀態(tài),盡可能的使用緩存。
                 減少依賴最主要的方法有將代碼也按功能進(jìn)行劃分,各功能之間需要共享的東西則放入domain中,所有的應(yīng)用都只能依賴domain,不能依賴其他的應(yīng)用,而domain之間也不能有依賴,另外PPT中還提及到的有平臺(tái)解耦,對(duì)于這點(diǎn)eBay的做法是經(jīng)典的EDA以及同步的SOA。
                 虛擬的數(shù)據(jù)操作指的就是(1)中提及到的數(shù)據(jù)層了,不過(guò)在這里還值得注意的是它有提到它們可以做到從數(shù)據(jù)路由方面來(lái)達(dá)到優(yōu)雅降級(jí),所謂優(yōu)雅降級(jí)的概念就是當(dāng)系統(tǒng)壓力大時(shí),只保核心功能可用,而其他非核心的功能則不可用。
                 (3).搜索的伸縮
                 對(duì)這部分不是很感興趣,大概提下主要就是做了實(shí)時(shí)索引,水平劃分以及緩存。
                 (4).操作的伸縮
                 eBay在當(dāng)時(shí)就能考慮這塊,真的很不容易,這里包含的主要是兩點(diǎn):代碼部署以及監(jiān)測(cè)。
                 由于當(dāng)時(shí)的eBay基本每?jī)尚瞧诰鸵鋈静渴穑贿^(guò)現(xiàn)在的eBay已經(jīng)不會(huì)這么頻繁部署了,部署時(shí)的依賴關(guān)系、部署后失敗的回滾操作、眾多的配置以及需要部署到眾多的機(jī)器,這些都煩惱著當(dāng)時(shí)的eBay,因此eBay做了一個(gè)部署系統(tǒng),該部署系統(tǒng)可做到的是根據(jù)需要的部署的功能,分析出其依賴關(guān)系,按依賴關(guān)系進(jìn)行部署,部署時(shí)自動(dòng)進(jìn)行檢測(cè)和校驗(yàn),并可選擇性的進(jìn)行回滾或全部回滾,不得不感嘆,真夠強(qiáng)大的。
                 監(jiān)測(cè)方面基于消息機(jī)制實(shí)現(xiàn),對(duì)日志進(jìn)行廣播、記錄(記錄至文件(當(dāng)時(shí)的eBay記錄的操作日志文件就已經(jīng)有1.5TB每天了)、捕捉異常進(jìn)行告警或?qū)崟r(shí)的系統(tǒng)狀態(tài)的監(jiān)測(cè))以及分析(報(bào)表、挖掘等)。
                從上面的對(duì)PPT的分析來(lái)看,盡管這個(gè)PPT并不厚,但它的價(jià)值真的非常的高,并且也充分的展現(xiàn)了eBay的技術(shù)實(shí)力。

          2、eBay Architectural Principles 2008
                在2008年的QCon London會(huì)議上,eBay分享了這個(gè)PPT,這個(gè)PPT的內(nèi)容不像上面的PPT講解eBay的架構(gòu)演變過(guò)程,而是直接根據(jù)eBay的經(jīng)驗(yàn)總結(jié)了一些構(gòu)建大型可伸縮系統(tǒng)的架構(gòu)原則,有點(diǎn)像設(shè)計(jì)模式,將之前應(yīng)對(duì)場(chǎng)景需求的一些技巧都總結(jié)成了模式,因此這些原則對(duì)于構(gòu)建大型系統(tǒng)的同學(xué)而言都非常有幫助,來(lái)具體的看看。
                PPT首先提到了架構(gòu)關(guān)注的重點(diǎn):可伸縮性、可用性、延時(shí)、可管理性以及成本,然后就提交到四點(diǎn)架構(gòu)模式,來(lái)具體看看。 
                (1). 能分則分
                在這點(diǎn)上eBay提出了一個(gè)觀點(diǎn):"If you can't split it,you can't scale it",因此eBay建議將系統(tǒng)按數(shù)據(jù)、壓力或使用情況來(lái)進(jìn)行分解,分解的模式為按功能以及水平拆分。
                在PPT中eBay繼續(xù)提及了數(shù)據(jù)庫(kù)的垂直以及水平拆分方法、無(wú)事務(wù)、應(yīng)用層的垂直以及水平拆分方法、應(yīng)用層的無(wú)狀態(tài)、搜索的垂直以及水平拆分,這些方法在第一個(gè)PPT中也有詳細(xì)分享。
                (2). 能異步則異步
                在這點(diǎn)上,eBay認(rèn)為,只要能異步就應(yīng)該異步,異步的實(shí)現(xiàn)模式為消息機(jī)制以及定時(shí)批量操作機(jī)制。
                消息機(jī)制的方式通常為功能核心部分完成后發(fā)出消息,然后訂閱消息的應(yīng)用異步的進(jìn)行一些處理,例如創(chuàng)建商品在創(chuàng)建完畢后,發(fā)出消息,圖像處理的應(yīng)用在接到消息后則能對(duì)此商品進(jìn)行相應(yīng)的處理,在PPT中還舉到的一個(gè)例子為發(fā)出消息,用于更新搜索中的索引信息,這其實(shí)也就是eBay的實(shí)時(shí)索引的實(shí)現(xiàn)方式了。
                定時(shí)批量操作適用于導(dǎo)入三方數(shù)據(jù)、生成推薦等。
                (3). 能自動(dòng)化則自動(dòng)化
                在這點(diǎn)上,eBay認(rèn)為,能自動(dòng)化的就盡量自動(dòng)化,避免人工操作,實(shí)現(xiàn)的模式為自適應(yīng)配置以及機(jī)器學(xué)習(xí)。
                自適應(yīng)配置方面eBay舉了個(gè)例子,給一個(gè)事件的訂閱者定義了SLA,例如為99%的事件應(yīng)在15秒內(nèi)處理完,那么所謂的自適應(yīng)配置就是系統(tǒng)應(yīng)能根據(jù)配置的SLA自動(dòng)的調(diào)整,以最小的資源去滿足SLA,例如調(diào)整處理的線程數(shù)、隊(duì)列的大小、彈出的頻率等,是不是有那么點(diǎn)云計(jì)算的前兆,:)。
                機(jī)器學(xué)習(xí)方面eBay主要提及到的為給用戶提供最匹配的頁(yè)面布局、推薦等。
                (4). 記住所有失敗的事     
                這里的需求是所有的系統(tǒng)都應(yīng)能容錯(cuò),主要目的是為了保證可用性,實(shí)現(xiàn)的模式為失敗檢測(cè)、回滾以及優(yōu)雅降級(jí)。
                失敗檢測(cè)上eBay采取的方法為通過(guò)發(fā)送消息,由消息訂閱者來(lái)進(jìn)行記錄、告警、分析或挖掘。
                在回滾方面主要指的是代碼的部署和回滾,就是之前第一個(gè)PPT中提及的部署系統(tǒng)。
                優(yōu)雅降級(jí)指的是系統(tǒng)功能的動(dòng)態(tài)打開和動(dòng)態(tài)關(guān)閉,eBay采取的方法為一個(gè)集中的配置來(lái)管理功能的打開或關(guān)閉。
                PPT中還舉了個(gè)例子來(lái)更好的說(shuō)明,首先應(yīng)用檢測(cè)到了某個(gè)資源不可用或很慢,此時(shí)為了保證可用性,可做的有這么幾件事:應(yīng)用停止對(duì)此資源的操作并發(fā)出警告、關(guān)閉非核心的功能、核心功能退化(基于failover切換至其他資源或轉(zhuǎn)為異步處理模式)。
                這個(gè)PPT同樣也不厚,但總結(jié)的非常好,這些模式對(duì)于構(gòu)建大型系統(tǒng)(尤其是互聯(lián)網(wǎng)系統(tǒng))而言基本都是必須的,在2009 QCon北京大會(huì)上,eBay分享的也是這方面的話題,大體都是相同的,因此就不再去分析那個(gè)PPT了。

          3、Teaching Machines To Fish
                在QCon San Francisco上,eBay分享了這個(gè)PPT,這個(gè)PPT重點(diǎn)在于分享了eBay的智能化方面的工作,包括智能的推薦、用戶請(qǐng)求的智能回答等,實(shí)現(xiàn)的策略方面主要是基于對(duì)用戶數(shù)據(jù)的收集和分析,這個(gè)部分由于主要是用戶數(shù)據(jù)分析的模型,在PPT中沒有做過(guò)多的介紹,但從PPT中也可以看出,eBay為了改進(jìn)搜索的效果付出了很大的努力,以盡可能的達(dá)到讓用戶最快的搜到自己想要的東西,這其實(shí)很難做到,例如同樣一個(gè)用戶搜索同樣一個(gè)單詞,期待的結(jié)果有可能是不同的。

          eBay的這三個(gè)PPT都非常的經(jīng)典,不得不說(shuō),這種分享精神也是值得敬佩的,畢竟這都是eBay的發(fā)展歷程中摸索出來(lái)的,分享出來(lái)必然能讓很多碰到類似問(wèn)題的網(wǎng)站少走很多的彎路,來(lái)說(shuō)說(shuō)我自己從旁觀者的角度看eBay的發(fā)展歷程。
          從eBay的這幾個(gè)PPT來(lái)看,我覺得可以看出,eBay的技術(shù)其實(shí)在2006年就已經(jīng)基本成型,而其發(fā)展過(guò)程也可以看做是互聯(lián)網(wǎng)行業(yè)技術(shù)發(fā)展的一個(gè)縮影。
          隨著訪問(wèn)量的增長(zhǎng)、數(shù)據(jù)量的增長(zhǎng)以及功能的不斷增長(zhǎng),"分"基本成為了第一招救命招,而這招要做到其實(shí)不如想象中簡(jiǎn)單,通常涉及到緩存技術(shù)、應(yīng)用的拆分、eBay提及的同步SOA和異步EDA、數(shù)據(jù)庫(kù)的拆分(分庫(kù)、分表)、文件存儲(chǔ)的拆分、負(fù)載均衡等,這些對(duì)技術(shù)的要求都很高,網(wǎng)站發(fā)展到了這一步后通常就逐步顯示出技術(shù)的重要性了。
          eBay在進(jìn)行"分"的同時(shí)以及之后,在自動(dòng)化以及可用性的提升方面也做出了很大的努力,這包括了部署系統(tǒng)、優(yōu)雅降級(jí)、監(jiān)測(cè)、系統(tǒng)容錯(cuò)、自適應(yīng)配置等的動(dòng)作。
          到了后面的階段,eBay開始投入了更多的精力在智能化的領(lǐng)域。
          從上面這三個(gè)階段來(lái)看,可以認(rèn)為"分"-->自動(dòng)化-->智能化是互聯(lián)網(wǎng)技術(shù)發(fā)展的一個(gè)常見發(fā)展模式,當(dāng)然,這其中涉及到了非常多的技術(shù),eBay的PPT確實(shí)為我們分享了很多這方面的技術(shù),而我同時(shí)覺得除了智能化以外,虛擬化或者云計(jì)算、節(jié)能技術(shù)也將成為后續(xù)互聯(lián)網(wǎng)技術(shù)的重點(diǎn),也許在后面各類大會(huì)上我們會(huì)更多的看到這方面的知識(shí),當(dāng)然,目前也有一些在這方面領(lǐng)先的公司,例如Google、Amazon等。
          posted on 2009-08-07 23:15 xiachang88 閱讀(1417) 評(píng)論(1)  編輯  收藏

          Feedback

          # re: 旁觀者看eBay技術(shù)發(fā)展 2009-09-20 18:10 陳新漢
          非常不錯(cuò),贊  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 合江县| 三穗县| 临沭县| 嫩江县| 犍为县| 当涂县| 杭锦后旗| 精河县| 方城县| 布尔津县| 余江县| 新野县| 金川县| 临潭县| 青州市| 彭泽县| 宜黄县| 铁岭县| 怀来县| 台东市| 安塞县| 茂名市| 高平市| 金平| 湖南省| 临邑县| 河曲县| 泸州市| 二连浩特市| 织金县| 池州市| 肃南| 金门县| 德江县| 新巴尔虎左旗| 伽师县| 仙游县| 江陵县| 武宣县| 大关县| 岚皋县|