# 易趣建筑

> 原文： [http://highscalability.com/blog/2008/5/27/ebay-architecture.html](http://highscalability.com/blog/2008/5/27/ebay-architecture.html)

**更新 2：** eBay 的 Randy Shoup 在可伸缩性[最佳做法：eBay](http://www.infoq.com/articles/ebay-scalability-best-practices) 上的 InfoQ 上讲了如何为每天服务数亿用户和超过 20 亿页面浏览量的秘密。 做法：按功能划分，水平拆分，避免分布式事务，异步解耦功能，将处理移至异步流，在各个级别进行虚拟化，适当地缓存。
**更新：** [eBay 每月提供 50 亿个 API 调用](http://blog.programmableweb.com/2007/11/19/ebay-serves-5-billion-api-calls-each-month/)。 我们不是看到开放式 API 之上的混搭驱动了越来越多的流量吗？ API 不再是束缚，而是您的应用程序。 从体系结构上讲，开发人员和用户使用相同的 API 来实现自己的应用程序。

谁不知道 eBay 的业务如何？ 作为世界上负载最大的网站之一，这并不容易。 演讲的字幕暗示了如何创建这样一个庞然大物的系统需要真正的工程：在站点稳定性，特征速度，性能和成本之间取得平衡。

您可能无法模仿 eBay 如何扩展其系统，但是值得学习的问题和可能的解决方案。

网站：http：//ebay.com

## 信息来源

*   [eBay 架构](http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf)-在网站稳定性，功能速度，性能和成本之间取得平衡。*   [播客：eBay 的大规模交易](http://www.uie.com/BSAL/BSAL010_Rohrer_eBayScale_WAS.mp3)*   [Dan Pritchett 在 eBay 上的建筑](http://www.infoq.com/interviews/dan-pritchett-ebay-architecture)接受 InfoQ 的采访

    ## 平台

    *   爪哇*   甲骨文*   WebSphere，servlet*   水平缩放*   分片*   Mix of Windows and Unix

    ## 里面有什么？

    This information was adapted from Johannes Ernst's [Blog](http://netmesh.info/jernst/Comments/sdforum-ebay-architecture.html)

    ### 统计资料

    *   平均每天，它会处理 260 亿条 SQL 查询，并保持 1 亿个可供购买的商品的标签。*   注册用户 2.12 亿，照片 10 亿*   每天 10 亿次页面浏览，1.05 亿个列表，2 PB 数据，每月 30 亿次 API 调用*   从 1999 年 6 月到 2006 年第 3 季度，页面浏览量，发送的电子邮件和带宽之类的因素大约为 35。*   99.94％的可用性，衡量为“网站的所有部分对每个人都起作用”与网站的至少一部分对某些地方的某些用户不起作用*   该数据库已虚拟化，并且跨越了 100 多个服务器群集中的 600 个生产实例。*   15,000 个应用程序服务器，全部为 J2EE。 约有 100 组功能，也称为“应用程序”。 “池”的概念：“处理销售的所有机器” ...

    ### 架构

    *   一切都计划在问题“如果负载增加 10 倍会怎样”。 仅缩放水平，不缩放垂直：许多平行的盒子。*   架构严格分为几层：数据层，应用程序层，搜索，操作，*   利用用于表示层的 MSXML 框架（即使在 Java 中）*   Oracle 数据库，WebSphere Java（仍为 1.3.1）*   按主访问路径（以键为模）拆分数据库。*   每个数据库至少有 3 个在线数据库。 分布在 8 个数据中心*   一些数据库副本会在 15 分钟后，4 小时后运行*   数据库按功能进行细分：用户，物料帐户，反馈，交易，共有 70 多个。*   没有使用存储过程。 有一些非常简单的触发器。*   将 cpu 密集型工作从数据库层移到应用程序应用程序层：引用完整性，联接，排序在应用程序层完成！ 推理：应用服务器便宜，数据库是瓶颈。*   没有客户端交易。 没有分布式交易*   J2EE：使用 servlet，JDBC，连接池（带有重写）。 没什么。*   应用程序层中没有状态信息。 Cookie 或暂存数据库中保持的瞬态状态。*   应用服务器之间不会互相通信-严格的架构分层*   搜索，在 2002 年：9 小时来更新运行在可用的最大 Sun 盒上的索引-不跟上。*   网站上的普通商品在出售前会更改其搜索数据 5 次（例如价格），因此实时搜索结果非常重要。*   “旅行者”：由 eBay 建立的实时馈送器基础结构。使用从主数据库到搜索节点的可靠多播，内存中搜索索引，水平分段，N 个切片，M 个实例上的负载均衡，缓存查询。

    ## 得到教训

    *   **横向扩展，不向上扩展**
    –每层的水平扩展。
    –功能分解。

    *   **首选异步集成**
    –最小化可用性耦合。
    –改进缩放选项。

    *   **虚拟化组件**
    –减少物理依赖性。
    –提高部署灵活性。

    *   **故障设计**
    –自动故障检测和通知。
    –业务功能的“ Limp 模式”操作。

    *   **因为数据库是瓶颈**，所以将工作从数据库移到应用程序中。 Ebay 做到了这一点。 我们在使用缓存和文件系统的其他体系结构中看到了这一点，但是 eBay 甚至在应用程序中执行了许多传统的数据库操作（例如联接）。

    *   **使用喜欢的东西，扔掉不需要的东西**。 Ebay 并没有强迫使用完整的 J2EE 堆栈。 他们喜欢 Java 和 Servlet，因此仅此而已。 您不必完全购买任何框架。 只需使用对您有用的东西。

    *   **不要害怕建立满足您需求并不断发展的解决方案**。 每种现成的解决方案都会使您失望。 您必须自己走其余的路。

    *   **随着您的成长**，操作控件将成为可伸缩性越来越大的一部分。 如何升级，配置和监视将运行实时系统的数千台计算机？

    *   **体系结构不断发展。** 您需要能够更改，完善和开发新系统，同时保持现有站点的运行状态。 这是任何成长中的网站的主要挑战。

    *   **从一开始就过于担心可伸缩性是一个错误。 不要因分析而陷入瘫痪，也不必担心流量永远不会到来。** *   **完全不担心可伸缩性**也是一个错误。 您需要建立一个能够应对架构演变的组织。 了解您永远不会完成。 您的系统将始终在发展和变化。 从一开始就将这些期望和功能融入您的业务中。 不要让人和组织成为您网站失败的原因。 许多人会认为该系统从一开始就应该是完美的。 那样行不通。 为了应对实际问题和关注，加班开发了一个好的系统。 期待变化并适应变化。

另一个有趣的问题是：eBay 的体系结构是他们使用 Akamai 托管其静态内容。 这显然不是秘密，但在他们的体系结构幻灯片中并未提及。

nslookup pics.ebaystatic.com
服务器：10.10.1.140
地址：10.10.1.140＃53

非权威性答案：
pics.ebaystatic.com 规范名称= pics.ebaystatic.georedirector.akadns.net。
pics.ebaystatic.georedirector.akadns.net 规范名称= pics.ebaystatic.com.edgesuite.net。
pics.ebaystatic.com.edgesuite.net 规范名称= a1654.g.akamai.net。
名称：a1654.g.akamai.net
地址：69.8.201.99
名称：a1654.g.akamai.net
地址：69.8.201.104

我看到您在一开始就提到过：“ Windows 和 Unix 的混合体”
，但是后来对于使用 Windows 用于...的想法却没有定论。
我想所有的 Web 服务器，DB 都是 在 Linux 上。
有什么想法吗？

---
[http://iphone.mybuywatcher.com](http://iphone.mybuywatcher.com)

在 Ido 的体系结构部分中，有一个项目“利用用于表示层的 MSXML 框架（甚至在 Java 中）”-这可能意味着 Windows 在应用程序服务器上使用。

Windows 将成为可扩展性恕我直言的瓶颈。

我不同意 Windows 是瓶颈。 特别是如果做对了。 看看“丰盛的鱼”文章。

-
您编码吗？ 和我们一起出去玩吧！
[http://codershangout.com](http://codershangout.com)

I saw that you mention in the beginning: "Mix of Windows and Unix"
But later on there is no idecation for what windows is being used for...
I would guess that all the web servers, DB are on Linux.
Any idea?

e-bay 架构极大地改善了其技术，并购买了 gittigidiyor.com

哇，我知道 ebay 很大，但我从未意识到它是如此之大。 1 亿个物品可供购买...很多物品。 更不用说页面浏览量了。
我将非常有兴趣学习 ebay 背后的故事，想法及其开始方式。

易趣是一家了不起的公司。 他们能够跟踪每日交易的数量这一简单事实证明了他们的体系结构。 日常所需的流量和安全性将使大多数公司屈服。

约翰·塔舍尔

说的没错。 ebay 仅一天就花在安全方面的费用超过了大多数领先公司的月收入，他们保持了出色的体系结构并实现了预期的目标。

我不知道...虽然我真的很喜欢 eBay 在整个联属网络营销中的发展方向，但我还是有些怀疑。

Ebay 将被 Google 或 Microsoft 接管。

DBMS2 在[上有新的博客文章，网址为 http://www.dbms2.com/2009/04/30/ebays-two-enormous-data-warehouses/“](<a rel=) > eBay 的两个巨大的数据仓库。 有关 eBay 的两个数据仓库的详细信息。

eBay 主要 Teradata 数据仓库的指标包括：

*   2 PB 以上的用户数据

*   72 个节点

eBay 的 Greenplum 数据仓库（或数据集市）的指标包括：

*   6 1/2 PB 用户数据

*   17 万亿条记录

*   每天有 1500 亿条新记录，这似乎表明摄取速率远远超过了 50 TB /天

*   96 个节点

与 Java 一起使用 MSXML 的优势如何？