再谈 eBay 的扩展性最佳实践

很多人都觉得 eBay 在 QCon (北京) 上的技术讲座不错,但对我来说,其实冲击力没那么大了。eBay 一两年前就是这个 PPT 。不过还是比 Amazon 的 Jeff Barr 强了很多,以后要是开个什么会,你把 Jeff Barr 请来还讲那个销售文档,估计自己都不好意思。

不过,eBay 这次的PPT 总算还是有点更新的。

1)数据分片(Partition Everything)

说是分区(Partition),这里不能简单等同于 Oracle 的分区,理解成分片(Sharding)就好啦。可以参考一下我以前写的科普小文:开源数据库 Sharding 技术 (Share Nothing)。这里要强调一下的是,分片是在数据量的确有规模的时候才适合进行,如果单节点足以应付,那么还是不要冒进。

从分片的模式上,eBay 主要根据功能切分(Functional Segmentation)和水平分割(负载均衡考虑),作为推论,所有会话都是无状态性的。

2)异步处理(Asynchrony Everywhere)

其实对于任何网站来说,过度追求”同步”化设计还是比较糟糕的做法。以用户能观察到的数据为视角进行设计,中间可以最大限度用异步来完成。

eBay 的举例的模式有两个,一个是事件队列(Event Queue),另一个是信息分发(Message Multicast)。前者基本上是个生产者–消费者的模型。后者主要用在搜索的架构上。

eBay_message_multicast.png

注意到图中的消息总线,这才是 eBay 整个架构中的动脉,估计轻易不会批露技术细节

3)自动化(Automate Everything)

这里的自动化举了两个例子,一个是针对运维方面的,另外举了关于机器学习的东西,这是演讲者 Randy Shoup 的强项所在。

eBay 的自动化,在一年前的另一篇文章里可以窥测一点东西。只是这篇文章当初没有被更多人重视,参见:eclipse at eBay。可以看到 eBay 能在自动化方面做得这么好(起码敢出来讲)不是一朝一夕之功。

4)故障检测与回溯(Remember Everything Fails)

更好的失败检测机制: 监控每天超过 2TB 的日志,根据日志中的相关事件得出判断或者预警。这个看起来简单,但实现起来还是需要一点技巧和策略的,重要的是,需要不断根据结果的反馈去改进。

完美回滚: 任何服务都通过服务配置中的标记来识别,无痛回滚。(个人感觉这个非常有难度,尤其是升级的时候)

优雅降级(Graceful Degradation):能够相对容易的对应用标记”Marks down(下线)”

5)拥抱不一致性(Embrace Inconsistency)

举了 CAP 原则,程立将其形象描述为帽子戏法,非常准确。说起一致性,自从 Amazon CTO Werner Vogels的 Eventually Consistent 一出,基本上不需要再废话了,这就是事务处理的九阴真经,大家回家慢慢参详好了。

eBay 也有自己的绝对准则: 绝对没有分布式事务(两阶段提交), 通过状态机与操作顺序最小化不一致性,通过异步事件(消息总线?)达到最终一致性。

EOF

另外小道消息:Amazon CTO Werner Vogels 可能会参加六月份在杭州举办的侠客行大会。

以前的老帖子:eBay 的Scalability最佳实践


  • lithium

    eBay 也有自己的绝对准则: 绝对没有分布式事务(两阶段提交), 通过状态机与操作顺序最小化不一致性,通过异步事件(消息总线?)达到最终以执行。
    ——————————
    貌似有错别字,应该是“达到最终一致性“

  • http://www.dbanotes.net/ Fenng

    @lithium
    反馈够快。更新了。多谢!

  • http://www.dbatools.net anysql

    理解别人的PPT比较容易一些, 但要下决心做, 及何时下决心做更难.

  • http://www.dbanotes.net/ Fenng

    @anysql
    谁能承担风险并负责,谁去做好了

  • http://www.zhangjinzhu.com Jinzhu

    我是来打酱油兼祝生日快乐的,哈哈 :)

  • http://www.dbatools.net anysql

    比较好奇,当初eBay如何一步一步推动这个的,阻力一样是相当大的,谁是那个勇士.

  • http://www.lutuzhi.com 路途志

    我接触过的几位ebay牛都很低调,技术着实不错。

  • http://www.dbanotes.net/ Fenng

    @anysql
    没有人做,你来做就是最合适的

  • http://www.jobsphere.cn/ 面经

    这次Qcon的内容实在是太丰富拉

  • http://zhu1.blogspot.com 木匠

    哪里下载演讲稿呀? 是不是仍旧和这篇一样?
    http://www.infoq.com/cn/articles/ebay-scalability-best-practices
    鄙人在我们公司推动的Function split一个月前已经启动啦.
    1) http://zhu1.blogspot.com/2009/04/talk-to-coo.html
    2) http://mujiang.blogspot.com/2009/01/overview-asynchronous-process-change.html

  • http://www.b2bmarts.com B2Bmarts

    外企作事还是比较实在,不象国内些平台,事没作,先把锣敲得轰天响!

  • http://www.dbafan.com Eagle Fan

    to anysql
    据我所知,当初推数据库sharding的人就是Mazen了

  • http://www.fovweb.com FovWeb

    大哥,您好。已经持续关注您的站好久了,想与您交换个链接。算是对自己的小站简单推广一下吧。内容是关注互联网和网站相关技术与运营。多向大哥学习吧。。。

  • http://keardy.spaces.live.com Keardy

    找不到PPT在infoq的下载啊

  • jarodhawk.wordpress.com

    要不大辉你把PPT都放上来吧!

  • http://5linan.blog.163.com attend

    弱弱的向各位大牛请教几个问题,希望各位不吝赐教。
    “在应用层次,由于eBay将各种交互都设计成无状态的,所以水平分割是轻而易举之事”.这句话中的无状态是什么意思?怎样才能实现无状态的设计?这里的无状态和EJB中的无状态SESSIONBEAN的概念是怎样的关系?

  • http://www.xinkb.org/new/index.html yalez

    很不错
    、、
    收藏了、、学习了、、

  • http://www.b2cmarts.com Electronics Store

    细节决定成败.在软件与平台上,国外在细节上做得非常成功了.
    细节是魔鬼.太多的东西一追求细节都是个无底洞.
    国外成功企业都不可能一蹴而就,而国内企业老想着一步登天.