10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

在 Facebook 我学到了什么

  • 2016-05-26
  • 本文字数:2517 字

    阅读完需:约 8 分钟

大家好,我是汤林鹏,来自普林斯顿大学的一名博士生。在刚刚过去的夏天,我与视频基础设施团队紧密合作,从事针对流媒体视频引擎(SVE)的负载测试框架的工作,即在将视频呈现给用户之前进行并行处理。我还与Facebook 的内容分发网络(FBCDN)团队合作,将我们以前设计的RIPS( FAST15 论文 FB 研究博客)一种新型的缓存框架投入生产。在这里,我想以一名毕业生的身份,从三个方面分享我的心得体会:(1)技术方面,如何构建一个生产质量体系;(2)非技术方面,如何在开放的环境(如 Facebook)中茁壮成长;(3)生产和研究之间的关系。

如何建立一个生产质量体系

从零开始建立一个系统,直到它运行在数千台服务器上,服务数十亿的用户,是非常有价值的。但这比在实验室里创造出一个原型要复杂得多,那么什么是重要的指导原则呢?

测试,再测试。有什么方式能比在现实环境中测试更能确保系统的可靠性呢?然而,测试也是一种艺术。以流媒体视频引擎为例:生产层处理用户请求;测试层运行负载测试并测试新功能,而对整体系统没有任何影响;开发层,每个工程师可以快速启动一个小的开发层来进行小实验。这三层的规模越来越小,但是灵活性越来越高,从而可以实现产品的快速迭代。

日志和图表。软件一旦开发出来,通常会稳定的应用于生产一段时间,所以,使其易于维护非常重要。除了良好的代码设计和清晰的注释,还需要事件日志记录和数据统计,并汇总生成实时图表。实际上,Facebook(其他大型科技公司也是如此)整个团队都致力于开发这些工具。当问题发生时他们可以迅速确定问题所在,并为系统监控配备良好的设备,从而能更好地理解系统的监控性能情况,进而做出改进。

吸取教训。有趣的是,要更好地了解系统行为,确保长时间稳定运行,一个重要的方法就是把它推到极限,观察它是如何失败的。我实习的部分工作是为流媒体视频引擎设计并实现一个负载测试框架,此框架可以产生不同类型的工作负载,然后逐渐提高系统的负载直到系统出现问题。这些负载测试帮助团队定位多个问题以及性能瓶颈,最终加速了产品正式发布。Facebook 内部的一些团队甚至通过转移用户的请求来对整个后端系统进行压测。

如何在一个开放的环境中茁壮成长

Facebook 在团队之间的自我管理与合作方面拥有开放的文化,管理层更多的承担服务的角色。下面是一些我从队友中观察到的典型特点,我认为在这样一个开放的环境中成长是很重要的。

接触。一个人如果只在团队内舒适的做自己份内的工作,就会浪费在 Facebook 工作的巨大优势。你应该去接触其他团队,看看他们在做什么,听听他们面临什么问题,并思考如何解决问题,是对现有的工具进行修改,还是建立新的工具?而新项目的开始往往源于这个过程。

如果你对其他团队的工作感到兴奋,那为什么不加入他们呢?我们听过一些大公司的整个部门因为不再创造价值而被裁员或转移到其他部门的故事。我经常开玩笑说,这类事件是不可能在 Facebook 中发生,因为工程师们会早在这种事发生之前离开,去做更有趣的项目。

了解别人的观点。合作既可能是有益的,也可能是令人沮丧。任何形式的交流,都需要大家抽出宝贵的时间,因此我们必须尊重对他们的承诺。了解公司的观点和目标,你就能更好的理解他们所做出的响应,知道如何协作更有益于他们的工作,并持久保持互惠互利的关系。

在做决定时考虑一下其他团队。整个 Facebook 的后端通过硬件和软件的依赖关系连接在一起,一个团队的决定将对其他团队的系统产生影响。例如,当决定一个服务需要多少台机器时,我们不仅需要考虑每台机器可以提供多少带宽,而且如果我们使用 100% 的机器带宽,是否会跑满机架的带宽,从而影响同一机架其他团队的服务?当开发我们的系统时,我们在多个场合受到其它系统问题的影响,这些影响通常很难跟踪和调试,所以,我们必须尽量不给其他团队增添麻烦。

保持方向感。当开发一个新的系统时,我们需要克服许多障碍,并不断付出时间和精力做好预算。优秀的工程师不仅需要迅速解决问题,还需要明确哪些问题更重要。这通常需要分析日志,找到问题根源,设计妥善解决方案,列出任务列表。保持明确的方向感同时兼顾无限的工程细节,是在这瞬息万变的世界里快速进步的关键。

生产和研究

我现在已经在攻读博士学位上花了三年多时间,我以前的实习工作已经或多或少地以研究为方向了。这是我第一次深入生产系统实习,我们设计并实施了 SVE 负载测试框架。通过进行一系列的测试,大大加快测试进度,最终推出 SVE。我们还实现了在 Facebook 的 CDN 基于闪存的缓存框架 RIPQ。以前它只是一个学术的原型,现在它已在生产中应用。当我把更多的精力投入到生产系统,并开始欣赏所有的工程成果时,我对研究有了更深入的了解,更能明确两者的优势和特性。

开发生产系统是一个综合性的工作,在整个系统顺利运行之前,要做好所有准备工作。在用于执行一个功能时会有许多可供选择的技术,大多数时候,一个不理想的技术可能会比较慢,需要更多的硬件,或者它只是一些快速的解决方案,并没有推广到所有的情况,但它仍然会工作。

另一方面的研究往往集中在生产中遇到的特定问题上。我们发现了一个有趣的问题,制定了一个关于它的抽象概念。基于这种概念,去尝试理解和解决一个普遍存在的问题,确实很好。做研究的另一种方法是从想法开始。系统中的例子,比如稳定杂凑、Bloom 过滤器、谱系这些好的想法都为一系列不同的问题提供解决方案。

生产和研究似乎是两个不同的世界,那二者可以协调起来吗?我们必须着眼于大局。虽然通常一个单一的技术不会成为一个生产系统成功的关键,但当我们检查各个方面时会发现,它们往往来源于研究项目当中。一个项目对一个系统的贡献可能比较小,但是,对整个社会的聚集效应非常巨大。

我也很高兴看到 Facebook 对研究开放的态度。许多没有经过正规科研训练的工程师如果对一些研究项目感兴趣,就可以将部分时间投入到研究活动中去。毕竟发现和分享新知识的渴望深深扎根在我们的内心。

查看英文原文: What I learned from interning at Facebook as a PhD student


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-26 17:334152

评论

发布
暂无评论
发现更多内容

Web3 项目外包开发的类型

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

Apache RocketMQ 在阿里云大规模商业化实践之路

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

RocketMQ 消息集成:多类型业务消息——定时消息

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列 定时消息

“同声传译”还是“全文翻译”?为何HotSpot虚拟机仍要保留解释器?

poemyang

编译原理 Java虚拟机 #java 解释器

我试用了5款文本配音工具后的真实感受

石臻臻的杂货铺

AI TTS 文本转语音

私有化部署即时通讯,企业专属通讯系统BeeWorks

BeeWorks

即时通讯 IM 私有化部署

解析 RocketMQ 多样消费功能-消息过滤

Apache RocketMQ

阿里云 云原生 消息队列 消息过滤

CST补丁安装教程-CST Studio Suite 2022 SP4 补丁包

思茂信息

cst CST软件 CST Studio Suite

RocketMQ 客户端负载均衡机制详解及最佳实践

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

RocketMQ 重试机制详解及最佳实践

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

哪些企业需要私有化部署?有没有推荐的私有化im

BeeWorks

即时通讯 IM 私有化部署

解析 RocketMQ 业务消息--顺序消息

Apache RocketMQ

RocketMQ 云原生 消息队列 消息集成 mq消息集成

分库分表之后如何使用?面试可以参考这些话术

王中阳Go

面试 分库分表

大数据-59 Kafka 拦截器全解析:原理、拦截链机制与自定义实现实战

武子康

Java 大数据 kafka 分布式 消息队列

Building An Elastic Query Engine on Disaggregated Storage

数新网络官方账号

2025 China Joy,Affinity以广告科技解锁开发者与出海企业的共同增长

科技热闻

2025大模型应用平台选型指南:从个人助手到企业级智能体

测试人

RocketMQ 5.0 API 与 SDK 的演进

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

阿里云基于全新 RocketMQ 5.0 内核的落地实践

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

瑞士开源大语言模型今夏发布

qife122

大语言模型 多语言处理

Mac系统编程入门指南:从环境配置到高效编码

qife122

命令行工具 Mac开发

监督学习与无监督学习:机器学习技术对比与应用实例

qife122

机器学习 监督学习

值得买商品详情API响应数据解析

tbapi

值得买 值得买商品详情API 值得买数据接口

CGDC|网易伏羲揭秘AI Agent等技术驱动游戏玩法革新,重塑交互与内容生态

网易伏羲

人工智能 ChinaJoy 网易伏羲 游戏AI

高防IP:数字化时代企业网络安全的核心盾牌

德迅云安全杨德俊

解析 RocketMQ 业务消息——事务消息

Apache RocketMQ

RocketMQ 云原生 消息队列 事务消息

JimuReport 积木报表 v2.1.1 版本发布,免费开源的报表和大屏设计

JEECG低代码

数据可视化 报表 数据大屏 报表工具 数据BI

用过这么多方案,远程访问还是贝锐花生壳内网穿透最靠谱

科技热闻

区块链U卡APP外包开发的费用

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

EventBridge 生态实践:融合 SLS 构建一体化日志服务

Apache RocketMQ

云原生 事件总线 EventBridge sls

小红书笔记详情API响应数据解析

tbapi

小红书 小红书笔记详情接口 小红书API 小红书数据采集

在Facebook我学到了什么_Meta_汤林鹏_InfoQ精选文章