一天十亿次的访问-采用Core J2EE Pattern架构的J2EE 系统

2024-02-02 09:58

本文主要是介绍一天十亿次的访问-采用Core J2EE Pattern架构的J2EE 系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标:

通过本文,学习如何采用Core J2EE Patterns架构具有高度扩展性多层的J2EE应用。

 

作者:

Deepak Alur

- Senior Software Architect, SunPS program

- Co-author of Core J2EE Patterns

- Sun-eBay V3 Architecture—Team leader

 

Arnold Goldberg

- Lead Architect—eBay.com Platform

- Led V3 architecture, design and implementation

 

Raj Krishnamurthy

- Software Architect, SunPS program

- Sun-eBay V3 Architecture team—Key member

 

议程:

入门和Core J2EE Patterns

eBay.com三层架构的目标

关键架构和技术决策

eBay.com如何应用Core J2EE Patterns

结论

 

 

一、入门和Core J2EE Patterns

1、目标:

- eBay.com网站的架构

- 架构中模式的地位

- 使用 Core J2EE Patterns的好处

 

2eBay介绍

1)使命

1、全球交易平台

2、拍卖、定价、B2CB2B

 

2)统计数据

- 6900万注册会员

- 28000个分类,1600万商品

- 2002年营业额:148亿7千万美元

-全球社区

-每天十亿次访问量

- 1200多个URL

 

3eBay旧的二层架构及其存在的问题

1ebay旧的二层架构

-集成在一起的两层架构(架构中各组件之间的耦合度高

- 330万行C++ ISAPI DLL

-面向功能的设计

- Not for systemic qualities

 

2)二层架构存在的问题

-阻碍商业创新(可扩展性不够

-随着访问量增大,系统线性扩展性面临着挑战(无法通过仅仅增加硬件投入,扩充系统的支撑量

-高额的维护成本

-不便于“重构”(代码很难通过重构来改善

- Architects in constant Fire-Fighting Mode

42000年底开始三层架构改造

系统向分层、松散耦合、模块化、基于标准的架构过渡


5、ebay 架构的改造是基于下面这本书介绍的模式

core J2EE Pattern 最佳实践和设计策略第二版,sun官方网站也提供core J2EE Pattern,见

http://java.sun.com/blueprints/corej2eepatterns/Patterns/


该书介绍了21 J2EE设计模式,我们可以把他们归类到三层中。

1)、表示层的设计模式:

- Intercepting Filter (X)

- Front Controller (X)

- Application Controller (X)

- Context Object (X)

- View Helper

- Composite View

- Service To Worker (X)

- Dispatcher View

(X)表示这些设计模式在eBay.com的架构中采用了。


2)、商业逻辑层的设计模式:

- Business Delegate

- Service Locator (X)

- Session Facade

- Application Service (X)

- Business Object (X)

- Composite Entity

- Transfer Object (X)

- Transfer Object Assembler (X)

- Value List Handler (X)

(X)表示这些设计模式在eBay.com的架构中采用了。


3、集成层(也称为数据访问层 设计模式:

- Data Access Object (X)

- Service Activator

- Domain Store (X)

- Web Service Broker (X)

(X)表示这些设计模式在eBay.com的架构中采用了。


二、ebay三层架构的目标

1、目标

高可用性、高可靠性、可线性扩展,建立实现系统的无缝增长。

高开发效率,支持新功能的快速交付。 

可适应未来的架构,应变将来商业的更新需求。

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

每个星期将近3万行代码在修改,3个星期内可以提供一个国际化版本。

 

2、为了可适应未来的架构,ebay采用了下面的做法

采用J2EE模式

Only adopt Technology when required

Create new Technology as needed

大量的性能测试

大量的容量计划

大量关键点的调优

Highly redundant operational infrastructure and the technology to leverage it

 

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 patterns

Relationships 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)消息系统

子系统之间、数据库之间松散耦合

J2EEMessage Driven Beans

2SOAP

对于外部开发者和合作伙伴,通过可用的工具和最佳实践来平衡我们的平台

采用SOAP 来标准化不同eBay应用之间进程内部的通信

采用SOAP满足我们的QoS需求


四、将J2EE的设计模式应用到eBay

    介绍了三个 Use cases 例子,“查看账号”,“查看商品”,“ eBayAPI ”,介绍了这三个 use case 如何采用 J2EE 的设计模式实现其设计。 

这篇关于一天十亿次的访问-采用Core J2EE Pattern架构的J2EE 系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670342

相关文章

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

MySQL集群高可用架构的两种使用小结

《MySQL集群高可用架构的两种使用小结》本文介绍了MySQL的两种高可用解决方案:组复制(MGR)和MasterHighAvailability(MHA),文中通过示例代码介绍的非常详细,对大家的学... 目录一、mysql高可用之组复制(MGR)1.1 组复制核心特性与优势1.2 组复制架构原理1.3

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环