<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      37 Posts :: 64 Stories :: 21 Comments :: 0 Trackbacks
    幾年以來,eBay在幾個不同的大會上先后分享過幾次關于eBay技術的PPT,在這篇blog中,就以這些PPT來以旁觀者的角度分析下eBay的技術發展歷程,不論eBay現在的業績如何,不可否認,他們的技術還是挺強的,因此還是值得學習,eBay的整個技術發展歷程從一定程度上來說可以認為是互聯網公司的典型技術發展歷程,基本上各家互聯網公司都在走著類似的路線,只是各家選擇的語言不同、具體的實現方案不同、細節不同,當然,思路是一方面,實現又是另外一方面,只有兩者結合才能實現一個高可用、高性能和高并發的有海量數據的系統。

    本篇blog中涉及到的主要有eBay的以下三個PPT,先來闡述下這幾個PPT,最后從一個旁觀者的角度來總結下eBay的技術發展。
    ps: 以下提及的三個PPT均可在此下載:http://m.tkk7.com/BlueDavy/archive/2009/04/28/267970.html

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

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

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

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

    Feedback

    # re: 旁觀者看eBay技術發展 2009-09-20 18:10 陳新漢
    非常不錯,贊  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 99在线精品视频观看免费| www在线观看播放免费视频日本| 国产午夜精品久久久久免费视| 免费夜色污私人影院在线观看| 亚洲日本va一区二区三区 | 99久久婷婷免费国产综合精品| 亚洲中文字幕成人在线| 日韩在线视频线视频免费网站| 免费v片在线观看| 人人爽人人爽人人片A免费| 亚洲国产成人久久精品99| 一级做a爰片久久免费| 在线A亚洲老鸭窝天堂| 精品一卡2卡三卡4卡免费视频| 亚洲Av永久无码精品三区在线| 久久免费国产精品一区二区| 亚洲最新视频在线观看| 全免费毛片在线播放| 亚洲高清有码中文字| 免费在线观看亚洲| 国产一区二区三区免费观在线| 亚洲AV无码一区东京热久久| 777爽死你无码免费看一二区| 亚洲人成电影在线观看网| 国产精品视_精品国产免费| 全部一级一级毛片免费看| 亚洲av永久无码精品古装片| 亚洲视频免费在线播放| 国产精品亚洲lv粉色| 亚洲中文字幕无码不卡电影| **一级一级毛片免费观看| 亚洲AV无码之国产精品| 亚洲精品乱码久久久久66| 69式互添免费视频| 青青草97国产精品免费观看| 亚洲AV日韩AV高潮无码专区| 猫咪社区免费资源在线观看| 国产精品高清免费网站| 亚洲一区免费视频| 亚洲欧洲中文日韩久久AV乱码| 99久久久国产精品免费牛牛 |