一天十億次的訪問
採用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、看了這麼多,如果你能記得些什麼的話,希望是下面這段話:
模式在開發和設計中是非常有用的。模式能幫助你達到設計的重用、加快開發進度、降低維護成本,提高系統和代碼的可理解性。