eBay 使用mysql 进行Personalization
其实这篇文章Fenng 早写了(连接), 08年四月Mysql 大会上的, 讲的是ebay 使用mysql 的memory 引擎做其用户个性化的解决方案.
ebay 的有趣数据:
1.1亿商品出售
每秒2千美元的交易量
2.7亿注册用户
20亿页面点击每天
6千台应用服务器(apache Geronimo)
300 个数据库服务器和700 数据库实例 (oracle居多)
9PB 的OLTP 数据
1千3百万代码(Java 的)
由于ebay 还在快速的向其v4 架构转变,无论是后台的基于eclipse 的快速开发,还是前台基于Flex 的用户体验. 除了9PB 的数据量比以前多很多之外,其他的数据比其巅峰时期还是下降了不少(amazon 在技术上真是低调呀).
大型互联网站点的用户个性化还是比较重要的, 而cookie 和 普通的数据库储存上还是有很多限制的,比如
cookie 只能保存4k的数据,(虽然你可以通过多个站点的多个cookie 来扩展)
每次传输都需要浪费不必要的数据,不管你在cookie 中需要的还是不需要的.
OLTP 数据库的读写和扩展性都有限,尤其面对ebay 的平均每个用户40k 的个性化数据, 每秒处理能力有限.
面对ebay 这样的数据量,每一个字节都是宝贵的,尤其是ebay 从v4 开始,有能力把多个http request 压缩, 每一个字节都能为他们节省宽带和服务器.
使用mysql memory 作为其个性化引擎之后,所面临的需求:
每天要40 亿次读写,(读写基本上个半50%/50%开)
要能够至少支持1万两千个java 进程发起的connection.
使用低端硬件 (ebay 也是有钱的主,全世界最贵的it 硬件基本都能在他们机房找到,最贵的软件也是毫不含糊)
水平和垂直的无线扩展.
低延时,快速响应和低网络消耗.
我猜最后一点是其选用mysql memory 引擎的最优先考虑,不能使用嵌入式数据库和内存数据库主要就是不能无限扩展和容灾.
为什么选定mysql memory 引擎还是做了灰常多的测试的(ebay自己做的patch):
在一个50%/50% 读写环境的测试中,一个低端的SUN 4100 Solaris x86 能够支撑2w的并发连接,每秒1.3wTPS , 基本到极限了,普通的这种硬件即使是做web server 的http request connections, 到8w/s 基本就是极限了,更何况这是java 的jdbc connections .
整体架构图

ebay 也很清楚这个结构的好与坏:
5分钟之内数据库挂掉了,是可以接受的,只有重要的personalization 数据是一定会保存的,大部分not critical data 可以接受丢失.
mysql单复制线程如果挂了,可能会引起数据拥堵,可以通过两次写(第二次是程序框架),应用框架会自动从应用服务器异步执行第二次写.(应该是v4)
但节点失效或负载多大,应用程序会自动负载平衡.
写都是批量的
Special techniques used to minimize table lock duration during write back and eviction operations (这个很重要的信息被带过去了,批量操作还能通过特殊技术减小table lock 不知道怎么实现的)
结果:
每天40亿的用户请求,50%读/50%写,平均每个用户40k/Session 的数据量,以前可能要添加不同的域名来解决cookie 限制的,现在通过25台普通的Sun 服务器就能够解决了,成本得到了很好的控制. 而且最重要的是ebay 的这种方案充分发挥了数据库特性,需求以及成本之间的平衡.
后记
看完这篇文章之后,逛了一下一些大型互联网的站点,发现有很多站点对cookie 基本上是无限制的使用,一个页面可以同时使用8,9个cookie,如果是多个域名之间使用20,30个cookie 还可以理解,一个页面跳8,9个cookie ,的确是有钱的主呀. 有的站点甚至里面的cookie 有非常不解的东西,甚至用户名可以用两三个变量保存,浪费30,40字节的带宽,只能说有钱的主呀!!!
参考资料:
http://www.dbanotes.net/database/ebay_personalization_platform_mysql.html
Fenng 的ebay personalization platform mysql 案列
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-ebay1/
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-ebay2/
ebay 的v4 架构细节
http://www.infoq.com/cn/articles/ebay-scalability-best-practices
ebay 数据库伸缩最佳实践
http://blog.sina.com.cn/s/blog_466c66400100bi2n.html
sina 的杨建关于web server 优化的建议, 那种每个字节都计较,不比别人超过10倍,20倍的性能不罢休的精神值得每个技术人员学习呀.