eBay架构
原文地址:http://www.dbanotes.net/database/ebay_storage.html
作为电子商务领头羊的eBay公司,数据量究竟有多大? 很多朋友可能都会对这个很感兴趣。在这一篇Web 2.0: How High-Volume eBay Manages Its Storage(从+1 GB/1 min得到的线索) 报道中,eBay 的存储主管 Paul Strong 对数据量做了一些介绍,管中窥豹,这些数据也给我们一个参考。
站点处理能力
- 平均每天的 PV 超过 10 亿 ;
- 每秒钟交易大约 1700 美元的商品 ;
- 每分钟卖出一辆车A ;
- 每秒钟卖出一件汽车饰品或者配件 ;
- 每两分钟卖出一件钻石首饰 ;
- 6 亿商品,2 亿多注册用户; 超过 130 万人把在 eBay 上做生意看作是生活的一部分。
在这样高的压力下,可靠性达到了 99.94%,也就是说每年 5 个小时多一点的服务不可用。从业界消息来看,核心业务的可用性要比这个高。
数据存储工程组控制着 eBay 的 2PB (1Petabyte=1000Terabytes) 可用空间。这是一个什么概念,对比一下 Google 的存储就知道了。每周就要分配 10T 数据出去,稍微算一下,一分钟大约使用 1G 的数据空间。
计算能力
eBay 使用一套传统的网格计算系统。该系统的一些特征数据:- 170 台 Win2000/Win2003 服务器;
- 170 台 Linux (RHES3) 服务器;
- 三个 Solaris 服务器: 为 QA 构建与部署 eBay.com; 编译优化 Java / C++ 以及其他 Web 元素 ;
- Build 整个站点的时间:过去是 10 个小时,现在是 30 分钟;
- 在过去的2年半, 有 200 万次 Build,很可怕的数字。
存储硬件
每个供货商都必须通过严格的测试才有被选中的可能,这些厂家或产品如下:- 交换机: Brocade
- 网管软件:IBM Tivoli
- NAS: Netapp (占总数据量的 5%,2P*0.05, 大约 100 T)
- 阵列存储:HDS (95%,这一份投资可不小,HDS 不便宜, EMC 在 eBay 是出局者) 负载均衡与 Failover: Resonate ;
搜索功能: Thunderstone indexing system ;
数据库软件:Oracle 。大多数 DB 都有 4 份拷贝。数据库使用的服务器 Sun E10000。另外据我所知, eBay 购买了 Quest SharePlex 全球 Licence 用于数据复制.
应用服务器
应用服务器有哪些特点呢?
- 使用单一的两层架构(这一点有点疑问,看来是自己写的应用服务器)
- 330 万行的 C++ ISAPI DLL (二进制文件有 150M)
- 数百名工程师进行开发
- 每个类的方法已经接近编译器的限制
非常有意思,根据eWeek 的该篇文档,昨天还有上面这段划掉的内容,今天上去发现已经修改了:
架构
- 高分布式
- 拍卖站点是基于 Java 的,搜索的架构是用 C++ 写的
- 数百名工程师进行开发,所有的工作都在同样的代码环境下进行
可能是被采访者看到 eWeek 这篇报道,联系了采访者进行了更正。我还有点奇怪原来"两层"架构的说法。
其他信息
- 集中化存储应用程序日志;
- 全局计费:实时的与第三方应用集成(就是eBay 自己的 PayPal 吧?)
- 业务事件流:使用统一的高效可靠消息队列. 并且使用 Cookie-cutter 模式用于优化用户体验(这似乎是大型电子商务站点普遍使用的用于提高用户体验的手法)。
后记
零散作了一点流水帐。作为一个 DBA, 或许有一天也有机会面对这样的数据量。到那一天,再回头看这一篇电子垃圾。更新:更详细信息请参考:Web 2.0: How High-Volume eBay Manages Its Storage。可能处于 Cache 的问题,好几个人看到的原文内容有差异
--EOF--
在过去的 Blog 中, 我(插一嘴:这里的"我" 如果替换成 "Fenng" 似乎有些自恋, 也不是我喜欢的行文语气, 可发现转贴不留名的行为太多了,他大爷的)曾经介绍过 《eBay 的应用服务器规模》 , 也介绍过 《eBay 的数据量》,在这篇文章中提到过 "eBay 购买了 Quest Share Plex 全球 Licence 用于数据复制",这个地方其实没有说开来。
对于 eBay 这样超大规模的站点来说,瓶颈往往最容易在数据库服务器上产生,必定有一部分数据(比如交易记录这样不容易水平分割的数据)容易带来大量的读操作,而不管用什么存储,能承担的 IO 能力是有限的。所以,如果有效的分散 IO 的承载能力就是一个很有意义的事情。
经过互联网考古学不断挖掘,路路续续又现了一些蛛丝马迹能够多少说明一些问题。客观事实加上主观想象,简单的描述一下。见下图:
通过 Quest 公司的 Share Plex 近乎实时的复制数据到其他数据库节点,F5 通过特定的模块检查数据库状态,并进行负载均衡,IO 成功的做到了分布,读写分离,而且极大的提高了可用性。F5 真是一家很有创新性的公司,虽然从这个案例来说,技术并无高深之处,但方法巧妙,整个方案浑然一体。
F5公司专门为Oracle 9i 数据库开发了专用的健康检查模块,通过调用F5专有的扩展应用校验(EAV)进程,F5能够随时得到Oracle 9i数据库的应用层服务能力而不是其他的负载均衡设备所采用的 ICMP/TCP 层进行健康检查。
这个图来自一篇《F5助力eBay数据库服务器负载均衡》的软文,真是一篇很好的软文,国外恐怕不会出现这样"含金量"极高的东西。
当然,这个技术架构可不算便宜。Quest 的 Share Plex License 很贵,而且,对于每个结点来说,都需要数据库 License 与硬件费用。但优点也很多:节省了维护成本; 数据库层面的访问也能做到 SOA; 高可用性。
国内的一些厂商比较喜欢给客户推存储级别的解决方案。通过存储底层复制来解决数据分布以及灾备问题。这个思路似乎太传统了,对于互联网企业来说多少有点过时。
BTW: 对 Amazon 的存储架构非常感兴趣,谁/哪里能提供点线索呢?
--EOF--