Tag Archives: 扩展性

再谈 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最佳实践

有扩展性问题请向 Flickr 的 Cal Henderson 提问

《程序员》杂志在做关于 Web 可扩展性的专题,编辑朱海燕联系上了 Flickr 的 Cal Henderson, Web 2.0 应用最出色的架构师之一, 准备对他进行 e-mail 采访,如果大家有什么关于 Web 扩展性的相关问题,可以在后面留言或者发邮件给 [email protected] , 我代为转交。

五月份阿里巴巴举办的侠客行网络大会 Cal Henderson 因为时间的关系而没能成行,希望这次的采访能弥补一下不少人的遗憾。

EOF

Web 2.0 站点扩展性问题随感

最新一期《程序员》杂志上有篇《Web 2.0 构建要素》的文章,里面描述了一些 Web 2.0 的扩展性问题,这可能也是 Web 2.0 站点从小到大必须承受的苦恼。该文简单介绍了有些站点通过 Amazon S3 服务来解决存储扩展带来的压力。有些站点则必须自己动手构建最适合自身业务的技术方案。
很多比较成功的站点,有的时候会透露出一些关于站点扩展性的技术信息,像我收集的 Flickr 的开发者的 Web 应用优化技巧Technorati 的后台数据库架构Craigslist 的数据库架构等,往往是蜻蜓点水,看过之后让人心痒难当,可是更细节的东西又很难获取。尽管这些站点基本都是构建在 OpenSource 软件上,但这一点上看,似乎不够 Open ,唯一一个做的比较好的倒是要算 LiveJournal ,他们通过 Danga 站点贡献了几个经典的软件与一些很有参考价值的文档(如这篇对LiveJournal扩展性的介绍),是为很多后起 Web 2.0 站点必备的参考信息。
在国内,很多 Web 2.0 站点也同样面临着这样的问题,象豆瓣阿北还需要身兼 DBA, 而抓虾,虽然数据库已经有上亿级别的记录量,就上次我在北京和谌振宇聊天,感觉抓虾在扩展性上也是还有很多细节需要完善,在杭州,Yupoo 也因为日益增长的数据量而不得不着手考虑如何更为成功的实现分布式存储解决方案……
这些似乎表明,Web 2.0 站点扩展性问题越来越突出,已经成为制约 Web 2.0 发展的一个障碍,”多、快、好、省”的构建新型互联网应用,不知道正在让多少人犯愁。
在传统互联网领域,很多技术解决方案往往是软硬件厂商提出来,类似自上而下的推动,而 Web 2.0 站点变化太快,到现在为止,似乎只有 MySQL 一家公司是比较大的赢家,可是因为面对的客户情况各异,解决方案似乎无从说起(比较简略的实现案例倒是能找到几个),再者,这些站点基本上是把 MySQL 这样的产品当作基本工具,和其他软硬件相互结合,然后在这个上面灵活构建出很多具有创新性的应用。这是一种自下而上的变化。
另一方便,Web 2.0 架构方面的人才还是稀缺,这个架构不是指某一方面(比如Java)的架构,而是整个产品环境的架构,象 Flickr 技术大牛 Cal Henderson 这样的人几乎是可遇不可求。操作系统、网络、数据库、开发语言每样都能那起来并且能够涉及足够灵活的技术方案,这要求,也的确高了一些。或许有人说,一个人不行,那么多几个人分别负责某几个环节不就成了? 这又带来另外一个问题:人力成本。
上一篇 Blog 我提到五月份的”侠客行“大会,我倒是希望能有一群网络技术人才能够就 “Web 站点可扩展性” 这个话题作一番探讨,每个站点如果都说说自己的心得,那么汇集在一起参考价值会对整个 Web 2.0 环境起到很大的促进作用。
最后,还拿 MySQL 说事儿,去年网志年会上,就有人感叹,国内 MySQL 好手太少了,考虑到物以稀为贵,有的 Oracle DBA 已经开始学习 MySQL 啦.
EOF