Pinterest一直保持着指数增长,每一个半月都会翻一翻。在两年内,他们实现了从0到数百亿的月PV;从开始的两个创始人加一个工程师增长到现在超过40个工程师,从一个小型的MySQL服务器增长到180个Web Enigne、240个API Enigne、88个MySQL DB(cc2.8xlarge,每个DB都会配置一个奴节点)、110个Redis Instance以及200个Mmecache Instance。
在一个名为 《Scaling Pinterest》 的主题演讲上,Pinterest的Yashwanth Nelapati和 Marty Weiner为我们讲述了这个戏剧性的过程。当然扩展到当下规模,Pinterest在众多选择中不可避免的走了许多的弯路,而Todd Hoff认为其中最宝贵的经验该归结于以下两点:
如果你的架构应对增长所带来的问题时,只需要简单的投入更多的主机,那么你的架构含金量十足。 当你把事物用至极限时,这些技术都会以各自不同的方式发生故障,这导致他们对工具的选择有着特殊的偏好:成熟、简单、优秀、知名、被更多的用户喜爱、更好的支持、稳定且杰出的表现、通常情况下无故障以及免费。使用这些标准,他们选择了MySQL、Solr、Memcache、Redis、Cassandra,同时还抛弃了MongoDB。
同样这两个点是有关联的,符合第二个原则的工具就可以通过投入更多的主机进行扩展。即使负载的增加,项目也不会出现很多故障。即使真的出现难以解决的问题,至少有一个社区去寻找问题解决的方案。一旦你选择过于复杂和挑剔的工具,在扩展的道路上将充满荆棘。
需要注意的是所有他们选择的工具都依靠增加分片来进行扩展,而非通过集群。讲话中还阐述了为什么分片优于集群以及如何进行分片,这些想法可能是之前你闻所未闻的。
下面就看一下Pinterest扩展的阶段性时间轴:
项目背景
Pins是由其它零零碎碎信息集合成的图片,显示了对客户重要的信息,并且链接到它所在的位置。 Pinterest是一个社交网络,你可以follow(关注)其它人以及board。 数据库:Pinterest的用户拥有board,而每个board都包含pin;follow及repin人际关系、验证信息。
1. 2010年3月发布——寻找真我的时代
在那时候,你甚至不知道需要建立一个什么样的产品。你有想法,所以你快速的迭代以及演变。而最终你将得到一些很小的MySQL查询,而这些查询在现实生活中你从未进行过。
Pinterest初期阶段的一些数字:
2个创始人 1个工程师 Rackspace 1个小的网络引擎 1个小的MySQL数据库 2011年11月
仍然是小规模,产品通过用户反馈进行演变后的数字是:
Amazon EC2 + S3 + CloudFront 1 NGinX, 4 Web Engines (用于冗余,不全是负载) 1 MySQL DB + 1 Read Slave (用于主节点故障情况) 1 Task Queue + 2 Task Processors 1 MongoDB (用于计数) 2 Engineers
2. 贯穿2011年——实验的时代
迈上疯狂增长的脚步,基本上每1个半月翻一翻。
当你增长的如此之快,每一天每一星期你可能都需要打破或者抛弃一些东西。 在这个时候,他们阅读大量的论文,这些论文都阐述着只需要添加一台主机问题就会得以解决。他们着手添加许多技术,随后又不得不放弃。 于是出现了一些很奇怪的结果 : Amazon EC2 + S3 + CloudFront 2NGinX, 16 Web Engines + 2 API Engines 5 Functionally Sharged MySQL DB + 9 read slaves 4 Cassandra Nodes 15 Membase Nodes (3 separate clusters) 8 Memcache Nodes 10 Redis Nodes 3 Task Routers + 4 Task Processors 4 Elastic Search Nodes 3 Mongo Clusters 3个工程师 5个主数据库技术,只为了独立其中的数据。 增长太快以至于MySQL疲于奔命,所有其它的技术也达到了极限。 当你把事物用至极限时,这些技术都会以各自不同的方式出错。 开始抛弃一些技术,并且自我反省究竟需要些什么,基本上重做了所有的架构。
3. 2012年2月——成熟的时代
在重做了所有的架构后,系统呈现了如下状态 Amazon EC2 + S3 + Akamai, ELB 90 Web Engines + 50 API Engines 66 MySQL DBs (m1.xlarge) +,每个数据库都配备了奴节点 59 Redis Instances 51 Memcache Instances 1 Redis Task Manager + 25 Task Processors Sharded Solr 6个工程师 现在采用的技术是被分片的MySQL、Redis、Memcache和Solr,有点在于这些技术都很简单很成熟。 网络传输增长仍然保持着以往的速度,而iPhone传输开始走高。
4. 2012年10月12日 —— 收获的季节
大约是1月份的4倍
现在的数据是: Amazon EC2 + S3 + Edge Cast,Akamai, Level 3 180 Web Engines + 240 API Engines 88 MySQL DBs (cc2.8xlarge) ,同样每个数据库都有一个奴节点 110 Redis Instances 200 Memcache Instances 4 Redis Task Manager + 80 Task Processors Sharded Solr 40个工程师(仍在增长) 需要注意的是,如今的架构已趋近完美,应对增长只需要投入更多的主机。 当下已开始转移至SSD
(责任编辑:admin)