创始人告诉你,Instagram 成功的 5 个经验

公司

2015-10-30 11:33

2010 年,我们推出 Instagram 第一版的前一夜,联合创始人 Kevin 和我打赌,在没有任何推广的情况下,第一天会有多少人下载我们的 app。Kevin 猜是 2500 人,而在那个特别乐观的瞬间,我决定把数目定高,猜测会有 25000 人。结果第二天,我都不敢相信,下载量恰好就是我所估计的数目。

如今,在我们第 5 个生日之际,Instagram 在全球已经拥有 4 亿用户,他们每天上传 8000 万张图片或视频。往回看,我们在最初的产品上就实现了简洁与精细的平衡,而在上一年,搜索和发现功能得到更新,Instagram Direct 上线了全新界面,并且有创意小工具不断推出,比如 Layout。

在我们团队发展的这五年中,我们一直忠于我们的原则:先做简单的事。而在我们的下一个五年,也会把它继续作为核心。下面是我们在过去五年创立 Instagram 过程中的一些大的里程碑——有好的,不好的,还有令人惊喜的。我希望其中会有你可以带走的经验,帮助你去发展你自己的团队和公司。

里程碑 #1:3 个月内拥有 100 万用户

总结:最大的挑战

在 Instagram 推出后的第一个月,情况几乎是混沌的—— 凌晨三点服务器警告页面的出现是常态而不是例外。在第一天激增至 25000 名用户后,我们的用户数继续快速增长,直到达到 100 万。没有什么刺激比人们真的想用我们的产品更强烈的了,于是我们换到了 “高速档”,确保我们可以支撑增长的需求。当我们刚开始的时候,Instagram 只在洛杉矶的一个服务器上运行,它的运算能力比一部 Macbook Pro 还要差。在遭遇到第一天快速增长之后,我跟主机服务提供商打电话,要求增加一台服务器,他们说需要 4 天才能实现——如果我们很急的话可以缩短到 48 小时。考虑到我们的增长看起来那么不可预测,我们决定转移到 AWS(亚马逊网络服务)。

考虑到我们在基础架构上都没有太多的经验,我们不得不快速地吸收尽量多的知识。QCon 和 Velocity 上有非常好的会议视频,Facebook,NEtflix,Twitter 还有其他网站上也有很多相关文章。共享技术性想法的这种开放文化是我们这个行业最好的东西之一,也是促使我们更新技术博客的主要因素。

可借鉴的经验:我们的原则——“先做简单的事” 在最开始的时候已经成型了。因为当时我们只有两个人,因此,每一次面对新挑战的时候,我们都需要确定一个最快速,最简单的解决办法。如果当时我们对一切事情都作长远考虑,那么我们可能会因为什么也做不了而瘫痪。选择最重要的问题去解决,选择最简单的解决方法,这样才能支撑起我们指数式的增长。

里程碑 #2:登陆 Android

总结:最令人期待的发布

在 Instagram 的最初几年,每一次我和 Kevin 上台时都会遇到同样的一个问题:“Android 版本什么时候推出?”

我们刚开始只发布了 iOS 版本,这是因为我们希望可以快速迭代我们的产品——要知道我们当时只有两个工程师。但进入 2012 年,拓展到更多平台上的时机已经到来。在典型的 Instagram 风格下,我们的 Android app 在三个工程师的三个月努力下搭建起来。团队里除了有两位为完成这个项目而学习 Android 的工程师外,还有从 Gowalla(一家基于位置服务的社交网络公司,在 2012 年关闭)的 Android 部门过来的 Philip,他领导 Instagram 的移动业务直到现在。

在那段时间里我部分的工作是成为一个 “专业的 eBay 购物者”,因为我们希望在尽可能多的设备上测试我们的 app,包括一个叫 “M865 Ascend II 2 Touch” 的手机。通常的流程是,拆开送来我们办公室的新手机,安装我们的测试版 app,然后赞叹 app 在上面的良好表现。Android 设备的广泛给我们带来了一些挑战——特别当我们开发 Instagram 视频产品的时候。但是,在很小的改动后,我们的应用就能适应如此多设备,这让我们非常兴奋。

Instagram_Android

当 Android 版本发布后的 12 个小时,有超过 100 万新用户加入 Instagram——这是一个非常难以置信的结果。在那个时候,我还写了一些在基础架构上学到的东西。随着时间的推移,我们的 Android 版本不断更新,越来越像平台上的原生应用了。到了今天,它已经成为增长最快、评分最高的 Android 应用之一。

可借鉴的经验:从一个平台上起步,这使得我们可以专注其中,并且,我们可以快速迭代而不需要任何东西都重复实现两次(在 Instagram 内部我们经常说 “把更少的事情做好”)。当到了需要拓展到更多平台的时间,我们搭建了一个小团队,里面包括 Android 的专家和一些对这个平台不熟悉但有才华的工程师。组建一支成熟的 Android 团队让我们的 app 可以逐渐适应那个平台。

里程碑 #3:2012 年弗吉尼亚风暴

总结:最糟糕的断电

当时,我正在波特兰享受三天的长周末,电话响了:“Instagram.com 宕机了 “。我立刻上网查看,发现除了 Instagram 之外,Netflix 和其他网站也出现了同样的问题。我跑回旅馆,打开笔记本,看到 AWS(亚马逊网络服务)的状态页面上有一条让人惊慌的消息:“us-east 可用区(位于美国东部)出现电力问题”。一场大风暴席卷了弗吉尼亚,我们的虚拟服务器几乎一半都失去了电力。接下来的 36 个小时里,我们艰难地重建了几乎全部的基础设施。可以苦中作乐的是,由于此事,出现了下面这幅搞笑图片:

Instagram3

(Instagram 宕机了,跟我说说你中午饭吃了什么)

当时,我们全部的后端技术团队只包括我自己、首位工程师 Shayne 和 Rick——他加入 Instagram 的时间不到一个月。用户数据未遭受任何损失,但是,此次断电揭示出了我们在自动化运维上的短板。

这次断电倒逼我们采用重用性更高的服务器配置过程。在之后的一年中,我们将所有配置从一大堆容易出问题的 shell 脚本迁移到了 chef(一个开源的配置管理以及自动化运维工具),这大幅降低了新团队上手的门槛。

除此之外,我们还使用了开源项目 WAL-E 和 Postgres 内置的 WAL(预写日志)替代了依赖于 Amazon ELB(Amazon AWS 提供的块存储方案)的数据库备份方案,并实现了数据库同步 (replication)。除此之外,我们也成立了一个可靠性工作组,这个工作组使 Instagram 拥有了运行在物理分布式的数据中心上的能力。

可借鉴的经验:尽管构建一个脚本话的基础构架需要不少前期工作,但是在基础设施运维组有新成员加入时以及在灾难恢复工作进行时,这些前期工作将得到回报。除此之外,我也很高兴的看到,我们招聘的工程师非常优秀——当遇到状况外的糟糕状况时,Shayne 和 Rick 都紧张的投入了工作,让我们重新恢复了服务。一次解决一个问题,像 Mart-Watney(电影《火星救援》的宇航员)那样。

里程碑 #4:Instagram 式的融合

总结:最具野心的工程项目

2010.10.5 : 0 用户 ?
2010.10.6: 25,000 用户?
2010.11: 100 万用户?
2012: 3000 万用户?
2013: 2 亿用户?

到了 2013 年,Instagram 的每月使用人数达到 2 亿,存储照片达到 200 亿张。尽管团队在扩张,整个团队仍然是个小团队,而且,我们激动地看到了 Instagram 社区的持续成长。

随着时间推移,我们不断思考如何与 Facebook 的现有后端系统进行整合。例如, Site Integrity(站点完整性) 系统可以对抗垃圾信息。但是,因为基础设施运行在在 AWS 上,这种整合就很难进行。而且,我们等待时间越长,不断扩张(而且愈加昂贵)的基础架构就越不容易迁移。

很显然,我们需要迁移到 Facebook 的基础设施上面,但是,当我们迁移上亿用户和数十亿图片时,我们不想影响自己的服务。于是,Instagration(这是作者创造的复合词,instagram+intergration,Instagram 式的整合)开始了。对于这件事,我比较喜欢的一个比方是汽车在 100 英里时速的行驶中更换所有的零件。一个包括 Instagram 员工与 Facebook 工程师的 8 人小团队接受了这个挑战。首先,他们开发了一个叫做 Neti(https://github.com/Instagram/neti)的工具把实例从 AWS EC2 经典网络迁移到了 VPC 上。接下来,他们构建了一个叫做 “ig” 的命令行工具,在 Facebook 的数据中心中模拟了 AWS 的设计模式以及使用习惯。在这一切的周密安排下, Instagram 在做到最小的影响下完成了一次最大的迁移。

可借鉴的经验:不要重新发明轮子。转向 Facebook 的服务器后,我们的基础设施变得更快速、更高效。同时,我们还可以利用 Facebook 的其他工具,比如反垃圾工具等等。我们仍然维持了小团队,但是,我们利用了 Facebook 的资源和经验,实现了更快的迭代。

里程碑 #5:Instagram 的 “热门” 功能

总结:下一个大赌注

今年早期,我们重新设计了 “搜索和探索” 功能,使用户能够更方便地寻找 Instagram 上的有趣时刻——当它们发生的时候。我们推出了热门标签和地点功能,并且构建了全新的基础架构,能够对 Instagram 上最好的内容进行辨识、排序和展现。

我们对热门趋势的首次展现是 2010 年的 “流行” 页面。这是 Instagram 发布时就有的功能。算法非常简单:用每张照片实际拥有的赞数来排列,而 4 小时之后照片就会逐渐消失。当我们的社区很小时,这是不错的做法,但是,随着时间的推移,我们意识到,我们需要一种更为精细的方法。

考虑到我们已经扩大的社区,2014 年,我们开始了 “探索” 功能的个性化,为每个人带来了可无尽滑动的图片和视频页面。在几个月里,我们的用户与内容的交互次数达到了 “探索” 未个性化前的 5 倍。今年,我们让原来的 “流行 “页面回归——让你一览 Instagram 的全貌——它就是我们的 “热门” 功能。随着排序和机器学习专家加入我们的团队,我们能够使广为人知的热门趋势算法适应 Instagram 社区的各种需求。

可借鉴的经验:先做简单的事并不意味着你的方案永远合适。我们学会了以开放态度对待产品的进化,以及为实现特定目标而组建团队,比如 Datagram 团队。这使得我们可以适应快速扩大的社区。

对于我们中的大多数人来说,过去的五年是一段狂野的旅程。在生日之际,停下来反思,这是一件不错的事情。我相信,我们的社区会继续成长,而我们的产品也会不断改进。当我今后在 Medium 写下 “回顾 10 年 “ 的时候,肯定还有聊不完的话题。向接下来的 5 年进发!

本文全文译自 Medium ,原文标题 War Stories,Five Years of Building Instagram,作者为 Instagram 创始人 Mike Krieger。他在文中讲述了 Instagram 这五年来的 5 件里程碑事件和从中得到的经验教训。爱范儿积木、黄美菁翻译出品,感谢爱范儿技术部门对技术细节的核对。

题图来自:YouTube  插图来自:Medium

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中