一天十億次的訪問-eBay架構

effecttec 發佈 2022-09-18T05:51:04.846154+00:00

一天十億次的訪問採用Core J2EE Pattern架構的J2EE 系統架構介紹eBay舊的二層架構及其存在的問題三層架構改造系統向分層、鬆散耦合、模塊化、基於標準的架構過渡架構的改造是基於下面介紹的模式21 種J2EE設計模式,我們可以把他們歸類到三層中。

一天十億次的訪問

採用Core J2EE Pattern架構的J2EE 系統

架構介紹

舊的二層架構及其存在的問題




三層架構改造


系統向分層、鬆散耦合、模塊化、基於標準的架構過渡


架構的改造是基於下面介紹的模式

21 種J2EE設計模式,我們可以把他們歸類到三層中。






三層架構的目標

1、目標

高可用性、高可靠性、可線性擴展,實現系統的無縫增長。

高開發效率,支持新功能的快速交付。

可適應未來的架構,應變將來商業的更新需求。

ebay的系統可用性2002年已到了99.92%.(令人嘆服),每季度網站新增十五個重大功能,

每個星期將近3萬行代碼在修改,3個星期內可以提供一個國際化版本。


2、為了可適應未來的架構,ebay採用了下面的做法

採用J2EE模式

Only adopt Technology when required

Create new Technology as needed

大量的性能測試

大量的容量計劃

大量關鍵點的調優



3、為了實現可線性擴展,ebay採用了下面的做法:

(1) 合理地使用server state

(2) No server affinity

(3) Functional server pools。

(4) Horizontal and vertical database partitioning。


ebay架構採用了伺服器分塊化的概念,每台伺服器上的應用與它的use case有關,即server pool中的一部分伺服器專門用於登陸,一部分伺服器專門用於顯示商品信息。畢竟不同use case訪問資料庫的方式不同,比如「顯示商品信息」use case只是只讀操作。而且由於是只讀操作,資料庫的壓力會比較低,我可以只採用幾台伺服器來承擔這部分操作,而更多的伺服器用於讀寫操作多的use case,這樣合理地使用伺服器資源。


由於不同的應用放在不同的伺服器上,這裡就涉及到用戶狀態的複製問題。這就是第一條ebay要求合理地使用server state的原因,就我所知,ebay的用戶狀態只有很少保存在session中,ebay把用戶的狀態放到了資料庫和cookie中。


4、為了使得數據訪問可線性擴展

(1) 建模我們的數據訪問層

(2) 支持Support well-defined data access patternsRelationships and traversals,本地cache和全局cache

(3) 定製的O-R mapping—域存儲模式

(4) Code generation of persistent objects

(5) 支持lazy loading

(6) 支持fetch sets (shallow/deep fetches)

(7) 支持retrieval and submit (Read/Write sets)


5、為了使數據存儲可線性擴展,eBay採用了下列做法

(1)商業邏輯層的事務控制

-只採用Bean管理的事務

-Judicious use of XA

-資料庫的自動提交

(2)基於內容的路由

-運行期間採用 O-R Mapping ,找到正確的數據源

-支持資料庫的水平線性擴展

-Failover hosts can be defined

(3)數據源管理

-動態的Overt and heuristic control of availability

-如果資料庫宕機,應用可以為其他請求服務。


6、應變未來採用的技術


(1)消息系統

子系統之間、資料庫之間鬆散耦合

J2EE的Message Driven Beans


(2)SOAP

對於外部開發者和合作夥伴,通過可用的工具和最佳實踐來平衡我們的平台

採用SOAP 來標準化不同eBay應用之間進程內部的通信

採用SOAP滿足我們的QoS需求




將J2EE的設計模式應用到eBay中

介紹了三個Use cases例子,「查看帳號」,「查看商品」,「eBayAPI」,介紹了這三個use case 如何採用J2EE的設計模式實現其設計。



結論

1、表示層架構


2、商業邏輯層架構


3、整體架構


4、總結

(1)eBay.com的架構採用了J2EE核心模式

-使你不用重新發明輪子,提高系統重用性

-經過實踐證明的解決方案和策略

-J2EE核心模式可以成為Developer和Architect 的詞彙

-更快的開發效率

(2)在你開發項目中學習和採用這些設計模式

(3)參與到模式的社區中。



5、看了這麼多,如果你能記得些什麼的話,希望是下面這段話:

模式在開發和設計中是非常有用的。模式能幫助你達到設計的重用、加快開發進度、降低維護成本,提高系統和代碼的可理解性。

關鍵字: