阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

在 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:333586

评论

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

GaussDB数据库事务介绍

平平无奇爱好科技

华为云GaussDB入选“2022年数字技术融合创新应用解决方案”

轶天下事

面试官问:kafka为什么如此之快?

JAVA旭阳

kafka

GaussDB,连续五次No.1!

平平无奇爱好科技

GaussDB为什么成为游戏行业的心头爱?

平平无奇爱好科技

深入剖析Redis性能问题及优化方案

xfgg

redis 优化 6 月 优质更文活动

多模块项目使用枚举配置spring-cache缓存

javalover123

Java lombok Enum spring-boot spring-cache

au音频编辑 Audition 2022 中文激活版

真大的脸盆

Mac Mac 软件 音频编辑 音频处理 编辑音频

架构实战营模块 1 第 4 课 - 如何做好架构设计

净意

全量通过!华为云GaussDB首批完成信通院全密态数据库评测

轶天下事

GaussDB数据类型转换介绍

平平无奇爱好科技

大模型时代下的企业系统架构变革

蔡超

架构 AI 大模型 GPT ChatGPT

GaussDB如何给世界一个更优选择?

平平无奇爱好科技

AI版女网红“半藏森林”上线,服务项目让人意想不到

引迈信息

人工智能 AI 低代码 JNPF

ChatGPT 之后,B 端产品设计会迎来颠覆式革命吗?| Liga妙谈

LigaAI

交互设计 产品设计与思考 tob产品 ChatGPT 企业号 6 月 PK 榜

大数据公司数据分析取数流程以及SQL示例

MobTech袤博科技

低代码平台提升软件开发速度

这我可不懂

软件开发 低代码 JNPF

利用 AWS CodeWhisperer 激发孩子的编程兴趣

Jerry Wang

人工智能 AI AWS AIGC 代码生成器

再识华为云数据库——GaussDB

轶天下事

国产芯片开发为什么这么难?2023 中国芯片开发者调查报告发布

博文视点Broadview

华为云GaussDB助力MetaERP构建“收入成本”产品,高效支撑华为多业务

轶天下事

音乐人解密:究竟是如何一步一步成为音乐人的?

懒得勤快

使用Leangoo领歌敏捷工具实施多团队规模化敏捷管理

顿顿顿

项目管理 敏捷项目管理 敏捷工具 scrum工具

墨天轮专访TDengine陶建辉:坚持做难而正确的事,三次创业成就不悔人生

墨天轮

数据库 tdengine Influxdb 时序数据库 国产数据库

听说最近AI应用爆了?!来AI Studio玩转大模型应用

飞桨PaddlePaddle

百度飞桨

ChatGPT热度不减!华为宣布入局,盘古GPT能否大杀四方!

加入高科技仿生人

低代码 数智化 ChatGPT 文心一言 通义千问

区块链代币DAPP通缩燃烧模式系统开发技术方案

I8O28578624

ChatGPT会取代低代码开发平台吗?

力软低代码开发平台

九科信息获评“第一新声”最佳信创企业管理软件,案例入选信创产业研究报告

九科Ninetech

GaussDB存储过程介绍

平平无奇爱好科技

重学 Java 设计模式:实战建造者模式

Java你猿哥

Java 设计模式 ssm 计算机

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