从6名工程师到1100万用户,Pinterest的成功与挫折

createh52周前 (06-03)技术教程10

曾几何时,以图像为中心的社交网络 Pinterest 凭借仅由 6 名工程师组成的精简团队,排除万难,用户数量猛增至 1100 万。请系好安全带,让我们揭开 Pinterest 如何战胜规模化挑战、在追求数字主导地位的过程中的成功与挫折的迷人传奇。

Pinterest的开始

在神秘的 2012 年,Pinterest 自豪地炫耀其每月活跃用户数达到 1100 万,仅用六名工程师就实现了这一壮举。这个传奇始于 2010 年 3 月,当时先驱者仅用一名工程师和一个小型 MySQL 数据库就推出了这款产品。这次旅程充满了教训,创新与简单的结合。

扩展的艺术 - 经验教训

1.经过验证的技术规则:Pinterest 坚持使用已知技术的智慧,避免潜入未知领域的陷阱。

2. 简单的胜利:他们的旅程中反复出现的主题 - 保持简单。复杂性是他们每次都要战胜的恶棍。

3. 扩展的智慧: Pinterest 决定添加更多相同的节点来扩展,避免不必要的创造力,这是他们策略中的一个关键举措。

4. 数据库之舞:分片数据库优先于集群、优化数据传输并避开潜在陷阱。

5. 工程的乐趣: Pinterest 的工程师不仅仅是编码员;他们还是程序员。他们从第一天起就是贡献者,将创新精神注入公司的 DNA 中。

Pinterest 的架构演变

随着时间的流逝,Pinterest 的架构不断发展。从基本的 Web 服务器堆栈到采用 Django 作为后端,他们敏捷地穿越了增长的迷宫。

过于复杂化的失误

在满足快速增长的用户群的竞争中,Pinterest 遇到了障碍。他们的架构变成了由五种不同的数据库技术编织而成的错综复杂的挂毯,造成了混乱。

  • Membase (Now Couchbase)
  • Cassandra
  • Elasticsearch
  • MongoDB
  • NGINX

集群管理的噩梦:集群的复杂性导致数据损坏和无法修复的问题。Pinterest 的解决方案?坚持使用经过验证的 MySQL 和 Memcached 是一个大胆的举动。

2012 精简的胜利

2012 年 1 月,Pinterest 经历了一次转型,目前用户数量已达到惊人的 1100 万。该架构经过简化,抛弃了未经充分验证的概念,以提供强大的替代方案。

Pinterest 的简化堆栈

  • Amazon EC2 + S3 + Akamai
  • AWS ELB
  • Flask 作文后端
  • MySQL, Memcache 作为分布中心存储

掌握手动分片

手动分片数据库的艺术成为 Pinterest 的强项。在冻结期间,他们手动增量地对数据库进行分片,删除表连接并采用缓存。

Pinterest 分片交响曲

  • 功能冻结
  • 增量和手动分片
  • 在庞大的、未分片的数据库中维护独特的约束

2012 年用户数量跃升至 2200 万

2012 年 10 月,Pinterest 用户数量增至 2200 万。架构保持不变,展示了复制有效内容并扩大规模的力量。

增长中的一致性

  • 过渡到 SSD
  • 有限的、经过验证的稳定性选择
  • EC2 和 S3 - 经受住时间考验的组合。

Pinterest 的数据库魔法

揭开 Pinterest 数据库结构、独特的 64 位 ID 结构和表格艺术背后的秘密。

ID 结构魔法

  • 分片 ID、类型、本地 ID - 为可扩展性精心编排的 64 位交响乐。

表的优化

  • 使用大量对象表
  • 用关系表来做查询优化
  • 告别 JOIN,拥抱效率。

相关文章

迅游科技赵亚南:游戏监控实践分享

赵亚南,7年运维实践经验,早期主要负责过淘宝网淘江湖、浙江日报、银率网(北京)、广州宝洁、机电之家等网站的维护,2012年后加入重庆迅游,负责开服网、开区网及多个游戏项目的运维,务真求实,追求以公司项...

Nginx Lua编程基础

Lua是一门脚本动态语言,并不太适合做复杂业务逻辑的程序开发,但是,在高并发场景下,Nginx Lua编程是解决性能问题的利器。Nginx Lua编程主要的应用场景如下:API网关:实现数据校验前置、...

Docker-基础操作

一、镜像1、从仓库获取镜像搜索镜像:docker search image_name 搜索结果过滤: 是否官方: docker search --filter="is-offical=true...

Springmvc使用Nginx负载均衡session共享

上一节,我们讲到nginx的结构组成,已经把模块、还有之前谈及负载均衡知识时候遗留的东西进行了讲解,那么今天我们继续把使用nginx做负载均衡的时候,如何处理session的方法做个解析,如何有需要对...

常用高并发网络线程模型设计及MongoDB线程模型优化实践

服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用。本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优缺...

新浪微博混合云架构实践挑战之弹性调度揭秘

微博DCP弹性调度的需求是快速迭代实现内网私有云计算资源统一管理调配,公有云上获得计算资源,实现快速自动化资源调度与应用部署。我们要解决的问题主要有服务池动态伸缩、单机容器灰度、多实例部署、故障自动恢...