了解一件事情是怎么做的一个正确的方式是看看它在现实中是怎么做的。软件工业一直以来都在为"很多idea仅仅在理论上说说"所困惑。与此同时,软件厂商不断地把这些idea作为最佳实践推销给大家。
很少的软件开发者亲眼目睹过大规模可扩展的架构这一领域。幸运的是,有时我们可以看到和听到关于这方面公开发表的资料。我读过一些好的资料关于 google的硬件基础设施的设计以及yahoo的页面渲染专利。现在,另一个互连网的巨人,eBay,给我们提供了其架构的一些资料(译者注:指的是" 一天十亿次的访问-采用Core J2EE Pattern架构的J2EE 系统"这篇文章)。
这篇文章提供了很多信息。然而,我们将只对那些独特的和我感兴趣的那部分进行评论。
给我留下深刻印象是eBay站点的99.92%的可用性和380M page的页面数据。除此之外,每周近3万行代码的改动,清楚明白地告诉我们ebay的java代码的高度扩展性。
eBay使用J2EE技术是如何做到这些的。eBay可扩展性的部分如下:
Judicious use of server-side state
No server affinity
Functional server pools
Horizontal and vertical database partitioning eBay取得数据访问的线性扩展的做法是非常让人感兴趣的。他们提到使用"定制的O-R mapping" 来支持本地Cache和全局Cache、lazy loading, fetch sets (deep and shallow)以及读取和提交更新的子集。 而且,他们只使用bean管理的事务以及使用数据库的自动提交和O-R mapping来route不同的数据源.
有几个事情是非常令人吃惊的。第一,完全不使用Entity Beans,只使用他自己的O-R mapping工具(Hibernate anyone?)。第二、基于Use-Case的应用服务器划分。第三、数据库的划分也是基于Use-Case。最后是系统的无状态本性以及明显不使用集群技术。
下面是关于服务器状态的引用:
基本上我们没有真正地使用server-side state。我们可能使用它,但现在我们并没有找到使用它的理由。....。如果需要状态化的话,我们把状态放到数据库中;需要的时候我们再从数据库中取。我们不必使用集群。也就不用为集群做任何工作。
总之,你自己不必为架构一台有状态的服务器所困扰,更进一步,忘掉集群,你不需要它。现在看看功能划分:
我们有一组或者一批机器,上面运行的应用是某个具体的use case,比如搜索功能有他们自己的服务器群,我们可以采用不同的调优策略,原因是浏览商品这个基本上是只读的用例和卖一件商品这个读写的用例在执行的时候是不同。在过去四五年我们一直采用水平数据库划分达到我们需要的可用性和线性扩展性。
总之,不要把你的应用和数据库放在一个giant machine,仅仅使用servers pools,每个pools对应一个Use Case. 听起来是否类似Google的策略。
下面是关于水平划分的一些介绍:
基于内容的路由可以实现系统的水平线性扩展。所以,想象一下,如果eBay某天拥有6000万种商品,我们不必把这些数据存储到一台超级Sun服务器上。.....也许我们可以把这些数据库放到许多台Sun服务器,但是我们怎么取到我们需要的数据呢?eBay提出了基于内容路由的方法. 这种方法通过一定的规则,从20台物理服务器中找到我需要的数据。更cool的事情是这里还定义了failover的策略。
最后,下面一句话描述了未来采用更加松散耦合的架构:
使用消息系统来耦合不同的Use Case是我们研究的内容。
是不是觉得很奇怪,最初这篇文章是介绍J2EE设计模式的?关键的线性扩展的思想几乎和Patterns无关。是的,eBay采用设计模式组织他们的代码。然而过分强调设计模式将失去对整体的把握。eBay架构关键的思想是无状态的设计,使用灵活的,高度优化的 OR-mapping 层以及服务器基于use cases划分。设计模式是好的,然而不能期望它使应用具有线性扩展性。
总之,eBay和Google的例子表明以Use-Case为基础组成的服务器pools的架构比几个大型计算机证明是具有更好线性扩展性的和可用性。当然,厂商害怕听到这样的结论。然而,部署这么多服务器的最大麻烦是如何管理好他们。-)
我的总结:
eBay采用设计模式达到eBay架构的分层,各层(表示层、商业逻辑层、数据访问层)之间松散耦合,职责明确,分层提高了代码的扩展性和程序开发的效率。
eBay采用无状态的设计,灵活的、高度优化的 OR-mapping 层以及服务器基于use cases划分,达到应用之间的松散耦合,提高系统的线性扩展性。
为什么要求系统具有可线性扩展,目的就是当网站的访问量上升的时候,我们可以不用改动系统的任何代码,仅仅通过增加服务器就可以提高整个网站的支撑量。
分享到:
相关推荐
实用架构教程--eBay架构设计原则、策略、模式 Strategy 1: Partition Everything – “How do you eat an elephant? … One bite at a time” • Strategy 2: Async Everywhere Strategy 2: Async Everywhere – ...
**eBay架构** eBay是全球知名的在线拍卖和购物网站,其背后的技术架构支撑着海量的商品交易和用户交互。为了处理如此大规模的业务,eBay的架构必须具备高可用性、可扩展性和高性能等特性。以下是对eBay架构的详细...
标题与描述均提到了“ebay架构原则,架构演变历史及ebay的自动化”,这实际上指代了eBay在IT架构设计、发展以及自动化技术应用上的深入探索与实践。以下是对这一主题的深入分析,旨在解析eBay如何通过其独特的架构...
**eBay架构分析** 在深入探讨eBay架构之前,我们首先要理解eBay作为一个全球领先的在线拍卖和购物网站,其背后的技术复杂性和需求。eBay必须处理海量的数据、高并发的用户请求、实时的交易更新以及复杂的业务逻辑。...
【EBay源码泄露事件详解】 在编程世界中,源码是软件开发的核心,它揭示了程序设计的逻辑和实现细节。"EBay Source.Codes-HACKED"这个标题暗示了一个重要的安全事件——eBay公司的源代码被非法获取并可能对外公开。...
Ebay作为全球知名的电子商务平台,其架构的演化体现了互联网发展的历程,同时也代表了在巨大流量和高并发环境下的架构设计和技术选型的最佳实践。了解Ebay的架构发展历程,对于IT行业人员理解大型分布式系统的设计、...
本次演讲由eBay杰出架构师Randy Shoup分享,主要聚焦于eBay作为一个全球领先的电子商务平台,在其发展历程中所面临的可扩展性和可用性挑战,并介绍了一系列的最佳实践方案。eBay的成功不仅在于它的商业模式,更在于...
eBay架构分析图1.JPG,eBay架构分析图1.JPG,eBay架构分析图1.JPG,eBay架构分析图1.JPG
Ebay架构特点主要体现在其高可扩展性、高性能和高可用性上,这些特性使得Ebay平台能够处理全球海量的在线交易。在2009年HPTS(High Performance Transaction Systems)会议上,Ebay分享了他们的系统架构设计,以下是...
标题中的"PyPI 官网下载 | ebay_rest-0.0.9-py3-none-any.whl"指出了这是从Python Package Index (PyPI) 官方网站下载的一个软件包,名为`ebay_rest`,版本号为0.0.9。PyPI是Python社区用来分享、发布和管理Python第...
文档: : :ledger: 目录安装npm install ebay-node-api 用法let eBay = require ( "ebay-node-api" ) ;let ebay = new eBay ( { clientID : "-- Client APP ID ----" , env : "SANDBOX" , // optional default = '...
本文是关于电商行业的深度分析,特别关注了美国电商巨头eBay的发展历程,从中我们可以提炼出以下几个重要的知识点: 1. **eBay的兴衰历程**: - **初创崛起**:eBay于1995年开创了C2C(消费者对消费者)交易模式,...
eBay的架构.rareBay的架构.rareBay的架构.rar
`none`意味着它不针对任何特定平台,而`any`意味着它可以在任何Python 3环境中运行,无论硬件架构如何。 **安装与使用** 要在Python项目中使用`ebay_feedsdk`,开发者可以通过`pip`工具进行安装,命令如下: ```...
张广平在eBay工作期间也积累了丰富的经验,负责过支付平台的开发管理、PaaS平台架构以及作为电商平台系统的TechLeader。 唯品会的业务系统可以被描述为一家专注特卖的电子商务平台,其核心业务包括精心挑选品牌正品...
关于ebay的存储及架构内容的一些介绍,从最初的版本,到现在到支持上亿用户,上亿次请求的发展过程。
eBay作为全球知名的电子商务平台,其大数据基础架构的未来是业界关注的焦点。随着线下与线上购物界限的模糊,消费者期望的提升,大数据在商业领域的应用正在经历一场深刻的变革。据IDC报告,2005年全球数据量为130艾...
【eBay USD to LKR-crx插件】是一款专为购物平台eBay设计的货币转换扩展程序,主要针对英语用户。这款插件的核心功能是自动将eBay商品页面上显示的美元(USD)价格实时转换为斯里兰卡卢比(LKR),方便居住在...