在2010年,在我们发布Instagram第一个版本之前的那个晚上,我和我的合伙人Kevin打赌第一天会有多少野生用户。Kevin猜是2500,在特别乐观的情况下,我猜了25000这么多。第二天,务实的我难以相信我猜对了。

现在,在我们的第5个生日,Instagram在全球有400万用户,一天会上传8千万照片和视频。回头看,我们在我们最初的产品里保持了简洁和工匠的平衡,就在去年,翻新了搜索和发现,发布了崭新的Instagram Direct,并且继续发布创造性的工具例如Layout。在过去5年里,我们的团队已经成长(谢天谢地)和进化,我们保持了我们“先做最简单的事”的圣歌,并且一直把它作为我们如何在接下来的5年继续规模化的核心。这是我们在过去5年里创建Instagram的一些重要里程碑——好的、坏的和意想不到的。我希望这能像一个外卖一样帮助你创建和培育你自己的团队和公司。

里程碑1号:3个月1百万用户

下方文件:最大的挑战

发布后的第一个月实在是一片模糊——凌晨3点服务器警报页是常态而不是例外。在第一天爆炸到25000名用户之后,我们继续快速增长直到1百万。没有比人们真的想要用产品更强的动机了,我们一直在高速档来确保我们能提供一直增长的需求。在我们开始的时候,我们在一个洛杉矶的独立服务器上运行,它的计算能力还不如一台Macbook Pro。当我因为我们第一天的增长而联系主机提供商想要另一台服务器,他们给了我一个为期四天的周转——48小时如果我们冲击它。由于我们的增长看起来是那么不可预测,我们打算移动到亚马逊网络服务云上。

由于我们中没有一个人对于基础设施有很多经验,我们只能浸泡在尽可能多的知识里。QCon和Velocity上有很棒的研讨视频,还有Facebook、Netflix、Twitter和其它网站的文章。分享科技见解的开放文化是我们这一行最棒的事情之一,最主要的促动者就在我们的工程博客背后。

外卖:我们的圣歌,“先做最简单的事情”在最开始的几周和几个月里成形。虽然我们只有两个人,但我们要最快速地做决定,每当遇到新挑战都要最简单的搞定。如果我们试图证明我们所做的一切,我们可能会因不作为而陷于瘫痪。通过确定要解决的最重要的问题,然后选择最简单的解决方式,我们才能够支持我们呈几何级数的增长。

里程碑2号:发布安卓版

下方文件:最受期望的发布
Instagram刚开始的几年里,我和Kevin每次在舞台上都会被问一个问题:“安卓版什么时候发布!?”

我们只从iOS开始,因为我们希望能够快速迭代——我们只是两个工程师。当我们进入2012年,是时候扩展到多平台了。用典型的Instagram方式,我们的安卓App在三个月里由3名工程师创建,其中2名和Philip一起学习安卓来完成项目,Philip从创建Gowalla的安卓App中加入我们,引领了Instagram的移动贡献直到今天。

当时我的角色之一是成为“专业eBay卖家”,因为我们希望能够在尽可能多的设备上测试我们的App,包括叫做“M865 Ascend II 2 Touch”的什么鬼。我们经常在我们的办公室里取出一个刚到的新手机,加载我们的半成品App,为能够在上面运行如何而保持惊讶。安卓设备的丰富度给我们造成了一些挑战——特别是创造我们的Instagram视频产品的时候——但用最少自定义需要来发布到这么多种类的设备上是非常神奇的。

在我们发布的头12个小时里超过100万新用户加入了Instagram——难以置信的反应。在当时,我也写了一些我们的学习基础设施的课程。随着时间的过去,我们的安卓App在平台上进化的更原生化,今天它是最快速、最受好评的安卓App之一。

外卖:从一个单独的平台开始允许我们聚焦和快速迭代,而不用把所有事都做两遍(在Instagram中我们经常说“少做更好”)。当扩展到多平台的世纪来到时,我们建立了一个小团队,组合了资深安卓专家和这个平台的新手天才工程师。随着时间过去,建立一个完全合格的安卓团队允许我们调整我们的App和其它平台更接近。

里程碑3号:2012弗吉尼亚州风暴

下方文件:最糟糕的运行中断
当时是2012年,我在波特兰度3天短假,我的手机嗡嗡作响:“Instagram.com挂了”。我去网上速查了一下,显示不只是Instagram——Netfix和其它网站也在经历同样的问题。我跑回我们的酒店,打开我的笔记本,看到亚马逊网络服务状态页上可怕的消息:“美国东部的电力问题”。一个巨大风暴席卷了弗吉尼亚州,我们几乎一半的实例都没电了。接下来的36小时会在我们整个技术设施进行残酷的重建。一线希望是它生成了这样的模因图片:

在当时,包括我在内的我们整个后端团队,我们的首席工程师Shayne和Rick,他们在不到一个月前刚在Instagram开始工作。没有丢失用户数据,但这个运行中断暴露了我们还有很多工作去做,让我们的基础设施全自动化。

这个运行中断打了我们的屁股,我们需要移动到一个更可重复的服务器配置过程。在接下来的一年里,我们移动了我们所有的供给,从易碎的壳脚本到完整Chef系统,并大大降低了新团队成员和基础设施合作的门槛。

我们也移除了对于亚马逊弹性块存储数据库备份的依赖,改用了WAL-E和Postgres’WAL重复运输。我们还启动了一个可靠性的倡议,靠跨数据中心的努力,让Instagram运行在地理分布式数据中心。

外卖:脚本化的基础设施需要前期工作,但可以给新工程师到基础设施团队带来巨大的红利,也有助于灾难恢复方案。我也很高兴我们雇佣了正确的工程师——面临无法想象的坏情况时,Shayne和Rick卷起了袖子挽回备份,一个时间一个问题,Mark-Watney风格。

里程碑4号:整合

下方文件:最有志向的工程项目
2010年10月5日:0用户 😬
2010年10月6日:25000用户😜
2010年11月:100万用户😅
2012年:3000万用户😆
2013年:2亿用户😵

到2013年每个月有2亿用户使用Instagram,超过200亿图片被存储。我们的团队在成长但是很小,并且我们为Instagram团体的持续增长而极度兴奋。随着时间发展,我们持续寻找我们想要和Facebook已经存在的后端系统的新整合——例如,他们的站点完整性系统对于帮助我们鉴别垃圾邮件是有帮助的。但做这些整合很难,当我们在亚马逊网络服务的时候,我们等待越久,转移我们日益增长(和日益昂贵)的基础设施就越难。

很明显我们应该转移到Facebook的基础设施,但我们在转移数百万用户和数十亿照片的时候不想中断服务。所以开始整合,或者我喜欢叫做在一辆车100迈每小时的时候把所有零件换掉。一个8名Instagram和Facebook工程师组成的小团队首先建立了一个公用网络来移动Instagram从EC2到亚马逊虚拟私有云(VPC),用一个我们家用自制的工具叫做Neti。然后我们周密地转移我们的系统和工具,包括建立一个“ig”命令行工具,建立了从我们的工程师熟悉的AWS到新的FB数据中心环境的模式桥梁。最终的结果是用最少的中断完成了巨大的转移。

外卖:不要重新发明轮子。移动到Facebook服务器让我们的基础设施更快、更高效,充分利用Facebook的其它工具例如打击垃圾邮件等等。我们能吃保持小型,也能利用Facebook的资源和经验,并且更快的移动。

里程碑5号:Instagram的趋势

下方文件:下一个大赌博
今年早期,我们翻新了搜索和探索,扩展了在Instagram上轻易发现世界上正在发生的有趣的时刻的能力。我们介绍了趋势标签和位置,并且建立了全新的基础设施来支持辨认、排名和显示Instagram上最好的内容。

2010我们第一次采用趋势,是我们的“流行”页,在Instagram发布的时候就可用。算法非常简单:用每个图片的喜欢个数,照片的年龄每大4个小时就衰减一次。在我们的社区很小的时候这很有效,但过了一段时间我们意识到我们需要一个更细微的方式。

考虑到我们巨大的社区,在2014年我们开发了针对个人的探索,带有无限可滚动的照片和视频页面,为每个人而定制。在几个月内,我们的用户在用5倍于非个人定制的探索的速度浏览内容。今年,我们带回了初始流行页的意图——Instagram格式塔的一瞥——作为我们的趋势产品。带有排名,机器学习了加入我们的团队的专家,我们能够采用知名趋势算法来计算Instagram社区的细微差别。

外卖:先做简单的事不意味着你的解决方式会永远奏效。我们学习去开放来进化我们的产品,旋转目标建立团队就像我们的数据团队,来适应我们快速规模化的社区。


近五年来,对我们许多人来说,都是一次疯狂的旅程,在我们的生日之际,暂停和反思是很好的。我确信在我们社区继续增长的时候,我们产品会继续进化,在我的“过去10年”的Medium帖子里不会缺少谈资。为了接下来的5年!