小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

eaby技術(shù)架構(gòu)變遷

 holines 2014-01-28

最近在infoq上面看到 ebay介紹其系統(tǒng)架構(gòu)變遷以及系統(tǒng)設(shè)計(jì)分享方面的講座,其中陳述了ebay從1995年到2006年之間系統(tǒng)架構(gòu)的變化過(guò)程。從這里,我們可以學(xué)習(xí)到許多寶貴的經(jīng)驗(yàn)來(lái)設(shè)計(jì)一個(gè)大容量,高并發(fā),分布式的系統(tǒng)。

 

ebay的系統(tǒng)架構(gòu)的變遷主要經(jīng)歷了4個(gè)階段,下面一幅圖展現(xiàn)了ebay系統(tǒng)架構(gòu)變遷的時(shí)間表

 

 

在ebay的V1版本,ebay采用的是FREEBSD + APACHE + PERL +DGBM,這是一個(gè)比較原始的模型,而且相對(duì)比較簡(jiǎn)單,操作系統(tǒng),應(yīng)用服務(wù)器,web服務(wù)器 以及 數(shù)據(jù)庫(kù)服務(wù)器都是在同一臺(tái)機(jī)器中,網(wǎng)絡(luò)結(jié)構(gòu)在物理上只有一層。整個(gè)網(wǎng)站有四個(gè)域名,每個(gè)域名對(duì)應(yīng)不同的應(yīng)用,每組應(yīng)用對(duì)應(yīng)一臺(tái)服務(wù)器。

 

圖表 1 ebayV1系統(tǒng)架構(gòu)

 

隨著業(yè)務(wù)量以及訪問(wèn)量的不斷上升,ebay在1999年開(kāi)始對(duì)架構(gòu)進(jìn)行升級(jí),技術(shù)架構(gòu)發(fā)生了較大的變化,這期間主要是從1999-2004年,而架構(gòu)的版本號(hào)則從V2.0到V2.5 ,下面我們來(lái)看看Ebay V2.0技術(shù)架構(gòu)

 

  • V2.0

2  開(kāi)始采用ORACLE服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器和web服務(wù)器分開(kāi),數(shù)據(jù)庫(kù)獨(dú)立部署到一臺(tái)新的機(jī)器上面

2  程序邏輯上面已經(jīng)開(kāi)始分層,也就是我們常說(shuō)的mvc3層結(jié)構(gòu):顯示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層,而在物理上面還是兩層結(jié)構(gòu) web服務(wù)器 以及 數(shù)據(jù)庫(kù)服務(wù)器

2  編程語(yǔ)言采用C++,那個(gè)時(shí)候java剛興起,估計(jì)也沒(méi)有其他好的語(yǔ)言選擇了。

  • V2.1

2  每組應(yīng)用對(duì)應(yīng)多臺(tái)服務(wù)器,而多臺(tái)服務(wù)器組成一個(gè) servler pool(服務(wù)池),通過(guò)一個(gè)負(fù)載均衡服務(wù)器來(lái)分別轉(zhuǎn)發(fā)請(qǐng)求到不同的服務(wù)器

2  數(shù)據(jù)庫(kù)部署到性能更加好的服務(wù)器上面

  • V2.2

2  增加了一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器作為 備份服務(wù)器,防止失敗

  • V2.3

這個(gè)版本只是對(duì)每個(gè)應(yīng)用增加了更多的服務(wù)器,不斷的進(jìn)行server pool

  • V2.4

這個(gè)版本最大且最重要的改變就是對(duì)數(shù)據(jù)庫(kù)進(jìn)行垂直拆分,即把數(shù)據(jù)庫(kù)按照不同的功能模塊進(jìn)行劃分,例如交易庫(kù),會(huì)員庫(kù),帳務(wù)庫(kù)

  • V2.5

這個(gè)版本在2.4的版本上面,對(duì)部分?jǐn)?shù)據(jù)庫(kù)進(jìn)行讀寫分離,同時(shí)對(duì)Item(物品條目)數(shù)據(jù)庫(kù)進(jìn)行水平拆分,把Items按照不同的Categoty分配到不同的Categoty商品庫(kù)里面,,這樣大大的擴(kuò)展了對(duì)Items數(shù)據(jù)庫(kù)的訪問(wèn)性能。

 

圖表 2 ebayV2系統(tǒng)架構(gòu)

 

從上可以看出ebay V2的架構(gòu)變遷,主要是通過(guò)服務(wù)器的添加,數(shù)據(jù)庫(kù)的垂直拆分以及水平拆分,數(shù)據(jù)庫(kù)的讀寫分離操作 來(lái)提高整個(gè)網(wǎng)站的性能。在web層,通過(guò)添加服務(wù)器來(lái)進(jìn)行水平擴(kuò)展,同時(shí)對(duì)應(yīng)用服務(wù)功能進(jìn)行垂直拆分,按照不同的業(yè)務(wù)功能劃分到不同的系統(tǒng)。在數(shù)據(jù)庫(kù)層面,進(jìn)行了讀寫分離嘗試,對(duì)數(shù)據(jù)庫(kù)進(jìn)行垂直拆分,同時(shí)把Items庫(kù)按照Category進(jìn)行水平拆分,這樣做,分散了對(duì)產(chǎn)品庫(kù)items的集中訪問(wèn),不過(guò)需要在DAL層提供透明的訪問(wèn)機(jī)制,ebays這里貌似還并沒(méi)有這個(gè)成熟的框架,同時(shí)不知道 分布式事務(wù)ebay在這個(gè)階段是如何實(shí)現(xiàn)的。

 

  • V3

整個(gè)應(yīng)用程序開(kāi)發(fā)平臺(tái)全部替換為j2ee平臺(tái),用java改寫了整個(gè)網(wǎng)站??磥?lái)是一次比較大的工作。目的是為模塊解耦 以及模塊復(fù)用,從這里,我們可以看出java在開(kāi)發(fā)復(fù)雜企業(yè)應(yīng)用的優(yōu)勢(shì)。

 

V3版本在數(shù)據(jù)庫(kù)層面上面做了更加優(yōu)化的設(shè)計(jì),ebay繼續(xù)在數(shù)據(jù)庫(kù)上面進(jìn)行優(yōu)化

垂直拆分?jǐn)?shù)據(jù)庫(kù),按照 功能模塊 拆分為更多的子庫(kù)

水平拆分?jǐn)?shù)據(jù)庫(kù),對(duì)同一類數(shù)據(jù),按照key值的不同數(shù)據(jù)分配到不同的數(shù)據(jù)庫(kù)中(具體水平分庫(kù)的方式有多種,這里就不再介紹了。)在進(jìn)行水平拆分?jǐn)?shù)據(jù)庫(kù)的時(shí)候,ebay也必須建立一套透明的DAL訪問(wèn)方式,必須提供透明的數(shù)據(jù)庫(kù)訪問(wèn)機(jī)制以及透明的數(shù)據(jù)庫(kù)路由功能,數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)變更不會(huì)影響到代碼的邏輯變動(dòng)。

 

在這里,ebay也在數(shù)據(jù)庫(kù)層給出了最佳實(shí)踐:

2  盡量減少數(shù)據(jù)庫(kù)CPU的消耗,例如不使用存儲(chǔ)過(guò)程,只使用少量的觸發(fā)器

2  減少數(shù)據(jù)庫(kù)層面的邏輯功能,例如數(shù)據(jù)轉(zhuǎn)化,組合,這些都放在邏輯層

2  減少動(dòng)態(tài)SQL,主要是SQL中參數(shù)的動(dòng)態(tài)生成功能,這一點(diǎn),公司的DBA也在強(qiáng)調(diào)

2  盡可能的縮短數(shù)據(jù)庫(kù)的事務(wù)時(shí)間,盡可能早的結(jié)束事物

2  盡可能的采用異步更新數(shù)據(jù)庫(kù)方式,分散數(shù)據(jù)庫(kù)的壓力,例如消耗數(shù)據(jù)庫(kù)時(shí)間的操作要放在夜間處理。

2  不使用分布式事務(wù),看來(lái)分布式事務(wù)的確不使用高并發(fā)性的系統(tǒng)

 

 

在應(yīng)用邏輯層面,ebay把系統(tǒng)按照功能劃分成許多不同的模塊,每個(gè)模塊作為一個(gè)子系統(tǒng),同時(shí)通過(guò)水平擴(kuò)展子系統(tǒng)服務(wù)器數(shù)量來(lái)提高整個(gè)系統(tǒng)的伸縮性。

下面看看ebay在應(yīng)用層面給出的最佳實(shí)踐

2  保持應(yīng)用層子系統(tǒng)完全是無(wú)狀態(tài)的,可以水平進(jìn)行無(wú)限擴(kuò)展以提高伸縮性,通過(guò)負(fù)載均衡服務(wù)器均等分配到各個(gè)子系統(tǒng)的實(shí)例池里面。

2  盡可能的使用緩存,緩存能夠減少數(shù)據(jù)庫(kù)的壓力,使用空間來(lái)?yè)Q時(shí)間

2  嚴(yán)格劃分系統(tǒng)的各個(gè)層面,表現(xiàn)層,業(yè)務(wù)邏輯層,服務(wù)集成層,DAO層,基礎(chǔ)設(shè)施層。

 

在應(yīng)用層的設(shè)計(jì)上面,ebay通過(guò)不同的功能劃分了很多domain,每個(gè)domain只負(fù)責(zé)自己的功能的業(yè)務(wù)邏輯,domain與domain之間是不會(huì)依賴的,同時(shí)還會(huì)提供common domain 提供各個(gè) domain之間的交互以及依賴,見(jiàn)下圖:

 

由于ebay的數(shù)據(jù)庫(kù)按照邏輯劃分了很多不同的字庫(kù),那么ebay必須提供透明的訪問(wèn)數(shù)據(jù)庫(kù)的能力,舉個(gè)例子:ebay把Items按照categoray分成了很多sub items庫(kù),假如需要查詢出來(lái)某一個(gè)用戶所購(gòu)買的所有Items,那么必須要查詢所有的sub items庫(kù),把數(shù)據(jù)庫(kù)組合出來(lái),那么DAL層必須屏蔽數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),一次性的把所有的sub items庫(kù)中對(duì)應(yīng)的數(shù)據(jù)查詢出來(lái)。而這個(gè)訪問(wèn),對(duì)應(yīng)用來(lái)說(shuō)是透明的。應(yīng)用不需要關(guān)注到底items有多少個(gè)子庫(kù)。

      

      

總結(jié):在大規(guī)模,高并發(fā)系統(tǒng)的設(shè)計(jì)中,最常用的技術(shù)就是分層和緩存,把一個(gè)業(yè)務(wù)流程垂直分解成幾個(gè)系統(tǒng),每個(gè)系統(tǒng)提供不同類型的服務(wù),一個(gè)業(yè)務(wù)流程通過(guò)不同的服務(wù)組裝起來(lái),這就是SOA設(shè)計(jì)的思路吧。每個(gè)系統(tǒng)可以進(jìn)行水平集群,提供無(wú)狀態(tài)的服務(wù),可以水平無(wú)線擴(kuò)展,數(shù)據(jù)庫(kù)層面,主要就是用到垂直分庫(kù),水平分庫(kù),讀寫分離,熱備份等技術(shù),提高數(shù)據(jù)庫(kù)的讀寫能力。在應(yīng)用層可以考慮使用集中式緩存或者分布式緩存來(lái)減少數(shù)據(jù)庫(kù)的訪問(wèn)壓力。

GodIsCoder
博客園blog地址:http://www.cnblogs.com/aigongsi/
獨(dú)立Blog: God Is Coder
個(gè)人網(wǎng)站: iphone發(fā)碼網(wǎng)
本人版權(quán)歸作者和博客園所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處

文章來(lái)源:http://www.cnblogs.com/aigongsi/archive/2012/04/25/ebay.html God Is Coder

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多