一天十亿次的访问-eBay网站服务器架构

一天十亿次的访问-eBay架构(一)

本文来自于2003JavaOne(http://java.sun.com/javaone/)上的一篇文章。我把它翻译成中文,有些不重要的部分我已略去。虽然是2003年的文章,但其中的J2EE设计方案还是值得我们去学习的,而且这个架构本身就是面向未来的。

eBay作为全球最大的网络交易市场赢得了市场的尊重,作为技术人员我们对其后台架构如何能够支撑起这个庞然大物都会感兴趣。每天十亿次访问量,6900万注册会员,1600万商品这些天文般的数字意味着它每天承受着巨大的并发访问量,而且eBay上大量页面都不是静态页面。

这篇介绍eBay架构的文章一定能对我们的项目设计和开发起到很好的指导作用。

eBay的架构是eBay的工程师和Sun的工程师共同设计完成的。

下面文章中斜体字是我的注释或者感想,其他的都是原文翻译。

作者:Deepak Alur、Arnold Goldberg、Raj Krishnamurthy

翻译:杨争

一天十亿次的访问

采用Core J2EE Pattern架构的J2EE 系统


详细了解Core J2EE Pattern可以查看此链接http://java.sun.com/blueprints/corej2eepatterns/Patterns/

目标:

通过本文,学习如何采用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的好处

2、eBay介绍

(1)使命

1、全球交易平台

2、拍卖、定价、B2C、B2B

(2)统计数据

- 6900万注册会员

- 28000个分类,1600万商品

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

-全球社区

-每天十亿次访问量

- 1200多个URL

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

(1)ebay旧的二层架构

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

- 330万行C++ ISAPI DLL

-面向功能的设计

- Not for systemic qualities

(2)二层架构存在的问题

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

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

-高额的维护成本

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

- Architects in constant Fire-Fighting Mode

4、2000年底开始三层架构改造


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

一天十亿次的访问-eBay架构(二)

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

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

J2EE的Message Driven Beans

(2)SOAP

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

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

采用SOAP满足我们的QoS需求

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

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

一天十亿次的访问-eBay架构(三)

五、结论

1、表示层架构




2、商业逻辑层架构




3eBay整体架构



4、总结

1eBay.com的架构采用了J2EE核心模式

-使你不用重新发明轮子,提高系统重用性

-经过实践证明的解决方案和策略

-J2EE核心模式可以成为DeveloperArchitect 的词汇

-更快的开发效率

2)在你开发项目中学习和采用这些设计模式

3)参与到模式的社区中。

5、看了这么多,如果你能记得些什么的话,希望是下面这段话:

模式在开发和设计中是非常有用的。模式能帮助你达到设计的重用、加快开发进度、降低维护成本,提高系统和代码的可理解性。

一天十亿次的访问-eBay架构(四)

我的体会:

1、ebay架构的主体是采用J2EE的核心设计模式设计的,我们在实际项目中可根据我们应用的需求采用适合我们应用的设计模式。毕竟我们看到eBay的架构也不是用了J2EE核心设计模式中提到的所有模式,而是根据项目的实际情况采用了部分适合其本身的模式。
2、需要澄清的是:这些设计模式是J2EE的设计模式,而不是EJB的设计模式。如果你的架构没有采用EJB,你仍然可以使用这些设计模式。
3、本文中除了介绍如何采用J2EE核心模式架构eBay网站,还介绍了eBay架构为了支持线性扩展而采用的一些做法,我觉得这些做法很有特点,不仅可以大大提高系统的线性扩展性,而且也能大大提高网站的性能。这些我会有另外一篇文章介绍给大家。

我的体会:

1、ebay架构的主体是采用J2EE的核心设计模式设计的,我们在实际项目中可根据我们应用的需求采用适合我们应用的设计模式。毕竟我们看到eBay的架构也不是用了J2EE核心设计模式中提到的所有模式,而是根据项目的实际情况采用了部分适合其本身的模式。
2、需要澄清的是:这些设计模式是J2EE的设计模式,而不是EJB的设计模式。如果你的架构没有采用EJB,你仍然可以使用这些设计模式。
3、本文中除了介绍如何采用J2EE核心模式架构eBay网站,还介绍了eBay架构为了支持线性扩展而采用的一些做法,我觉得这些做法很有特点,不仅可以大大提高系统的线性扩展性,而且也能大大提高网站的性能。这些我会有另外一篇文章介绍给大家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值