当一家网站突然开始流行,用户数每月增长数倍时,最常见问题的就是服务器崩溃。全球最流行的图片兴趣分享网站——Pinterest的工程师在本周四的Surge大会上分享了他们的经验教训和解决之道。

Pinterest的工程师Marty Weiner和Yashh Nelapati的演讲PPT《Pinterest如何扩展IT架构》中大部分内容是关于如何(用Sharding技术)扩展MySQL数据库的规模,其中总结了Pinterest的两大经验教训。

简而言之,如果想让网站的架构跟上业务的发展速度,就必须从一开始保证其简洁性,复杂性是最大的敌人。

2010年3月刚开始开发的时候,Pinterest只有一个MySQL数据库和一个小的web引擎,网站托管在Rackspace。到2011年1月网站正式发布的时候,Pinterest迁移到了亚马逊的EC2云,增加了几个MySQL数据库,一些Nginx web服务器,MongoDB和TaskQueue。当进入爆炸式增长阶段时,Pinterest开始运行越来越多的工具,包括Memcached、Redis等工具。

首先,Pinterest的第一个经验教训是,不能同时使用过多工具,必须简化。Pinterest采用的工具都有三个共同特点:免费、用户基数庞大满意度高、性能优异。这些工具包括亚马逊云、Memcached、Redis和MySQL。这些工具的扩展性并非完全不需人工干预,但至少可管理性是没有问题的。

其次,Pinterest面临的最艰难的选择是:采用Clustering还是Sharding技术扩展数据库?

Weiner认为前者是自动化数据分发技术(通过Cassandra、HBase和Membase等技术),而后者是手动数据分发技术(需要为每台服务器逐一设置)。Weiner最终选择了控制力更强的Sharding并乐此不疲。

Weiner认为在服务器间自动分发数据是一件很酷很简单的事情,但也会导致严重的单点失败。因为负责处理数据库在多服务器中扩展的集群管理软件如果出现错误代码,将会复制扩散到整个集群。