醉创业
首发于醉创业
Aditya Agarwal:Facebook 技术规模化的4个秘密

Aditya Agarwal:Facebook 技术规模化的4个秘密

导语前的导语:

之前发的 Larry Page 的长文反响格外好,在此谢谢大家。我们未来还会努力提供些好内容,包括,好故事。

好故事当然是「创业」这个母题的一部分,但我们也不会忽略一些「硬」的东西。今天的这篇文章,是技术向的一点趣味。

我们曾经也推荐过一些技术向的文章,内容倒是不错,只是作为一个没什么技术功底的人,每次写导语的时候我都痛不欲生...于是这次我们找来「墨轨迹」的联合创始人和 CTO 沈晓龙来客串,介绍一下这篇文章的作者和内容。

当然,看不懂你也不用硬撑,直接发给你身边的工程师吧...



客座导语@沈晓龙

这篇文章的作者 Aditya Agarwal, 也许并不过多的出现在任何一个创业的频道里。并不是因为他不输出方法论,而是他的方法论更多的应用在了一个相对难以理解的领域: Scale Engieering.

思来想去,所以对他的介绍,总让语文不好的我手足无措...

从Oracle出来,他在 Facebook 有15人的时候加入,几乎一个人完成了 Facebook 最初的搜索引擎。2011年从 Facebook 离开,他做了一个协同平台 Cove 并被 Dropbox 收购,之后他作为 Dropbox 的 Engineering VP 再一次出现在公众面前。Aditya Agarwal 还参与投资了许多公司,包括天天管理我工作的 Asana,和以教编程为由常介绍给各色姑娘的 Codecademy...

其实谈到 scale engineering,如今风生水起的招聘市场告诉着我们,创业公司在拓展自己工程开发能力的过程中的第一道坎是——找到性价比高的人,或者在如今的创业市场,更多的是找到性价比高的工程师。而风风火火地招完人回来,做着梦觉得这样我们就可以10X速的迭代产品,就可以快速占领市场拥有用户,就可以融起ABCD轮然后IPO了。然后回过头发现,也许每个人都在贡献代码,但是调试的周期变长了,沟通的成本变高了,为什么有人忙疯了有人却天天按时上下班了。或者,开始陷入无休止的挣扎,纠结于我们用A架构还是B架构去迎接未来也许出现井喷的业务需求和用户量,用C语言还是D语言去进行开发来保证效率和维护性的平衡。而这,恰恰是 scale engineering 的过程中不得不经历的痛。于是这个市场开始从抢工程师走向了抢CTO...但这真的理性么?

2010年的 Aditya Agarwal 已经成为 Facebook 的 Director of Product Engineering,最多带领过2000人的团队,服务着近7亿用户。而同为CMU毕业的我,实在是......更让人感慨的是,无论在多么细分领域内的探讨,最终是术无穷而道有尽。就好像文章里所说:

You can get the code right, you can get the products right, but you need to get the culture right first. If you don't get the culture right, your company won't scale.


The Four Meta Secrets Of Scaling At Facebook

作者:General Chicken

翻译:爱小逗逗的@Fish

原文链接:The Four Meta Secrets of Scaling at Facebook

Facebook 的技术主管 Aditya Agarwal 发表了一篇关于 Facebook 规模化的演讲,这篇演讲讲述了 Facebook 的体系结构,但是它更多的谈及如何通过保存公司文化中最优异的部分来实现规模化。这篇演讲的精华部分如下:


你可以写出好的代码,你可以做出好的产品,但是你需要先建立好的公司文化。如果你的公司文化不对,你的公司无法实现规模化。


这就引出了 Facebook 规模化的4个秘密:


1. 规模化需要迭代;

2. 不要过度设计;

3. 选择正确的工具,但要注意你选择带来的管理成本;

4. 建立正确的文化。快速行动,破旧立新(Move fast, break things);大的影响力,小的团队(Huge Impact, small teams);勇敢,创新(Be bold, innovate)。



一些背景


  • Facebook 很大:它拥有4亿活跃用户;用户每天平均花20分钟用 Facebook;每周 Facebook 上分享50亿个板块(状态更新,评论,点赞,照片上传,视频上传,聊天,收件箱,群组事件,粉丝界面,朋友联络);每月上传30亿照片;每个月有250个应用的用户超过100万用户;8万个连接应用程序,50万个应用程序;200万开发人员;每秒钟1.5亿缓存操作;上千台拥有数十T内存的缓存服务器;300名开发人员。


  • Facebook 的规模化很难。每个版块都有它自己的访问模式而导致规模化很难实现。每个人都以不同方式使用 Facebook。每一个体验都是独一无二的。大多数网页都是通过增加服务器来实现规模化的,因为它们的数据可以被分割,这是水平式规模化。但是,因为 Facebook 的用户可以访问任意的网络,所以用户不能被分割。它是一个全球化的网络,让全球每个人都能使用,它让每个人都可以加其他人为好友,用户间可以呈现任何关系。任何新的用户能够访问其他用户的数据,这意味着不可能从地理上或其他方式来分割用户。Facebook 的每个用户平均有130个好友,没有其他方法来分割这些数据,所以访问只在一个群集。


  • 总体系有5个主要部分:负载均衡器,网络服务器(用PHP写的),服务(快捷、复杂、搜索、广告、划线器),缓存(快速、简单),数据库(缓慢、持久)。



四个秘密( Four meta secrets)


1. 规模化需要迭代。大部分解决方案在最初的时候可行,但是你需要随时调整。在第一年适用的方法以后不一定适用。比如说,PHP 在最初是很容易使用的,但是当你有成千上万的网络服务器时,它并不是一个好的选择。


另一个例子是照片。目前它们一秒钟可处理120万张照片。最初是用很简单的方式建立的,不需要担心大量规模化,只需要专注在功能的运行上不出错。主页上传的文件存储在 NFS,元数据存贮在 MySQL(数据库系统)。最初的3个月能正常运作,之后就问题不断。他今天或许仍会这么做。上市的时间是他们最大的竞争优势。比起确认它有个可行的规模化解决方案,具备功能更为重要。


第二阶段是优化。是否有不同的优化路径的方式?事实证明访问最频繁的是小的图片,所以这些已经缓存过了。他们也开始使用CDN(内容传递网路)。NFS 不是用来存储800亿小的文件,所以所有的元数据不能存入内存中,因此需要2到3个磁盘操作系统来查找,这显然很慢。


第三阶段是覆盖系统,它创建了一个可以存储在文件系统的整体文件。图像存储在整体文件中,你知道图片的在整体文件中的偏移量。每张照片一个IO。


2. 不要过度设计。当你的系统在规模化时,只使用你需要使用的。要明白迭代中你解决问题需要的东西,优化它,或者自己完整地创建出它的一部分。他们花了很多时间试图优化 PHP,最后编写了HipHop,一种将PHP语言转化成 C++ 语言的代码。它减少了大量的内存和 CPU(中央处理器)。你不需要第一天就这么做,但是你将来可能需要这么做。在你开始写一项新的语言之前,专注在产品上。


3. 选择正确的工具,但要注意你选择带来的代价。如果你真的要使用 Python,那么尽情去做吧,我们会帮助你成功。意识到这个选择伴随着的代价,通常在资源配置、监测、操作等等。


如果你选择使用服务体系结构,那么你需要自己创建后端的大部分工作,这会花费你大量的时间。但是用 LAMP (Linux、Apache、MySQL 和 PHP)堆栈,大部分你可以免费获得。一旦你不使用LAMP堆栈,将由你来决定如何操作例如服务器构架和监测。当你更深入服务方法,你不得不做无谓的重复劳动。


4. 建立正确的文化。快速行动——破旧立新。大的影响力 ——小的团队。勇敢——创新。建立好的内部环境有助于一开始就把事情做对,只有在需要时才调整,不需要去担心创新,不需要担心破旧立新,从大处着眼,在做第一步的时候就想好你下一步要做的是什么。你可以写出正确的代码,你可以做出正确的产品,这些都基于你要一开始建立正确的文化。如果文化不对,你的公司无法规模化。


1)快速行动。先投入市场。破旧立新很正常的。比如,你现在运行他们整个 HipHop 网络层,它是由3个人开发的。这非常有风险,它会经常导致你的网站出问题(内存不足、无限循环),想出办法来让它运行是需要很大的代价的。备选方法可能是花3个月时间来做每个改变的测试过程,但它让每件事都变慢。这是一个特有的例子,但是最重要的是文化,让人们相信最重要的是他们能多快地行动。


2)大的影响力。小的团队可以做很伟大的事情。搜索、图片、聊天及 HipHop 都是由小的团队做出主要的特性。招募正确的人,授权,然后放手让他们做。


3)勇敢。不要害怕失败。尝试,然后失败,这再正常不过了。想要做一个新的 JVM 或许很疯狂,但是如果万一成功了会多牛啊。


在 Facebook 并没有所谓的产品的拥有者。每个人都拥有这个产品。你应该赋予人们他们所做之事的所有权(ownership)。如果你把所有权给一个人,那么其他人不会推动它进一步发展。好的想法来源于内部用户。如果你不把责任下放,你孤立了那些自认为是所有者的用户,那么你唯一能激励的人就是那些认为自己是所有者的人。因此,为什么不把整个责任下放呢?

保护那部分你珍视并且想保留的文化。它不会自发地出现。Facebook 组织编程马拉松,它的意义是告诉新的工程师如果他们早上8点过来,他们能在12个小时内让一个新的功能上线。「快速行动」不仅仅是陈词滥调,公司要想办法让员工相信,它是真实存在的。

编辑于 2015-04-21

文章被以下专栏收录