写点什么

揭秘 Facebook 的开发部署流程:数千名开发中没有一个测试

  • 2019-09-09
  • 本文字数:1774 字

    阅读完需:约 6 分钟

揭秘Facebook的开发部署流程:数千名开发中没有一个测试


Facebook是全球最大的社交网站,今年一季度,Facebook 的月活已经达到 23.8 亿,日活 15.6 亿。这个惊人的用户体量规模是微信+QQ 的总和还要多。


以腾讯的海量服务之道为参考,很容易想到 Facebook 必然有一个规模庞大的工程技术团队,来支撑如此海量的业务需求。但实际上,Facebook 的工程团队只有数千名工程师,在很长一段时间内,该公司甚至只有个位数的发布工程师,并且没有测试工程师!


Facebook 的开发部署流程究竟有何与众不同,可以让其效率如此惊人?

持续部署

传统软件行业通常使用瀑布式开发模型,但这种开发模式对于 Facebook 的业务增长规模显然是不适用的。Facebook 与其他大型互联网公司一样,采用的是持续部署的开发模式:不断开发新的功能,迅速上线,满足用户需求。


Facebook 的工程团队认为,他们的开发工作永远没有到头的那一天,代码库的增长永不停止,2013 年时就有超过 1000 万行代码(850 万 PHP 代码),而到 2019 年时,其代码库已经突破一亿行。


Facebook 的所有前端都在同一个稳定分支上工作,这样做的好处是能加快开发速度,因为省去了繁琐的分支合并过程。在日常工作中,工程师都用 git 在本地进行开发,当代码就绪之后再将它推送到 SVN 上,这样就很自然地区分开了开发中的代码和可以上线的代码。

每日、每周发布相结合

工程师将代码推送到SVN上,就可以上线了吗?并不是。Facebook 为了保证网站的稳定运行,采用了一种兼顾稳定性与速度的做法:将每日发布与每周发布结合到一起。


所有代码变动默认每周发布,每次包含相对比较多的变更。每周固定时间,代码会被发布工程师推送到 SVN 上进行大量的自动测试,其中包含很多针对正确性和性能的回归测试,这个版本会成为内部使用的默认版本,正式的发布通常被安排在周二下午。


在每周发布以外,其他工作日每天还会有两次小型的发布,通常是些非关键性的更新,或者是 Bugfix,极端情况下才会进行更多的发布,甚至是在周末进行发布。

没有测试工程师

Facebook 是一个没有专门测试工程师的科技公司,该公司的所有测试工作都交由自动测试和开发团队自己。


代码上线前,除了进行大量自动化测试之外,每位工程师在内部使用 Facebook 时也相当于进行了高密度的内测,每位工程师都能报告自己发现的问题,写代码的人多了,代码增长得快了,相对而言,对代码进行测试的人也多了。

代码质量如何保证

Facebook 有一个名叫“Push Karma”的机制。这个机制是指:Facebook 的发布工程师会对每个提交代码工程师的历史表现打分,那些经常出 bug 的工程师相应得分也会比较低,因此他们提交的代码会受到更多的“关注”。


这样做的目的是为了控制风险,而非对个人做出评判,因此这个分数是保密的,工程师不会知道自己的分数是高是低。


除此以外,比较大型或相对重要的发布、Code Review 时讨论较多的代码,都是风险比较高的地方,也会受到更多的“关注”。


Facebook 除了细致的 Code Review 以外,还有一个很有特色的“Zuck Review”。一些比较大的功能或产品,扎克伯格会亲自看一下,只要团队 PM 亲自跟扎克伯格说,这个地方你要过一遍,即使再忙他都会亲自来盯。

发布分阶段

类似于 Facebook 的大型网站,发布通常都是分阶段进行的:


  • H1:部署到仅有内部访问的服务器上,进行最后的测试,也就是“预发布”;

  • H2:部署到几千台服务器上,灰度开放给一小部分用户;

  • H3:如果 H2 阶段没有发现问题,则进入 H3,部署到全部服务器上。


如果在这个过程中发现问题,工程师会立即进行修复,随后重新开始分阶段的部署。当然,也可以选择回滚代码,具体视情况而定。

工程师文化是关键

仅有方法论和工具是远远不够的,因为使用它的是人,而人总是会犯错。所以,拥有鼓励个人责任感的企业文化是很重要的。


Facebook 的每位工程师都可以看到全部的代码,并且能提交补丁,或者提交详细的问题描述。工程师们需要自己编写详尽的单元测试,他们的代码还要通过所有的回归测试,并能支持后续的各种运维工作。


除了要对自己的代码负责,他们还要面对各种巨大的挑战,往往要针对多种解决方案进行大量试验。


Facebook 还有一个新兵训练营制度,让那些新入职的工程师,甚至包括不主要从事编程工作的经理都去学习他们的代码、工具和方法。训练的目的很多,其中之一就是让新员工充分认识到,他们拥有直接改变 Facebook 网站的力量。


在这样的氛围下,Facebook 的工程师文化才闻名遐迩于硅谷,并被国内引进加以学习。


2019-09-09 11:314514
用户头像
小智 让所有人认同的文字称不上表达

发布了 410 篇内容, 共 410.2 次阅读, 收获喜欢 1986 次。

关注

评论

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

2022年总结及2023年规划:新起点和新希望

不脱发的程序猿

程序人生 年度总结

坚持技术or转做管理,我们该如何选择?

石云升

极客时间 1月月更 技术领导力实战笔记

Databend Roadmap in 2023

Databend

架构训练营模块五作业

现在不学习马上变垃圾

架构训练营10期

自动驾驶汽车芯片的发展和分析

不脱发的程序猿

嵌入式 汽车电子 自动驾驶汽车芯片

《欧拉开源操作系统行业应用案例集》2023年案例集征集开始!

openEuler

Linux 操作系统 openEuler

mockito入门

查拉图斯特拉说

后端 单元测试

开发互动直播应用很简单:声网 Android Demo保姆级跑通教程

RTE开发者社区

android RTC RTE 教程分享

技术管理 之 干系人管理

码猿外

技术管理 干系人管理

架构实战营第 10 期 - 模块五:微博评论高性能高可用计算架构设计

kaizen

「架构实战营」

云时代,好用的数据迁移方案推荐

NineData

数据库迁移 数据校验 数据复制 迁移工具 NineData

瑞萨RH850 FCL、FDL和EEL库的配置和使用

不脱发的程序猿

嵌入式 汽车电子 RH850 ​瑞萨

分层次的电路设计方法

timerring

FPGA

新范式+新标准=世界级产品|StarRocks年度总结

StarRocks

数据库

1

Doctor Blind

chatgpt小试牛刀

阿呆

ChatGPT

想找个稳定的工作

MavenTalker

职业素养 职业发展 求职面试

windows命令窗口

MEImei

火山引擎DataTester:0代码也能实施A/B测试的实验平台

字节跳动数据平台

大数据 AB testing实战 企业号 2 月 PK 榜

代码实例解读如何安全发布对象

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

比亚迪元EV汽车拆解报告

不脱发的程序猿

嵌入式 汽车电子 比亚迪元EV汽车拆解

比亚迪新能源汽车战略布局研究

不脱发的程序猿

汽车电子 比亚迪新能源汽车战略布局 比亚迪新能源汽车

OKR之剑·实战篇04:OKR执行过程优化的那些关键事

vivo互联网技术

团队管理 OKR

RocketMQ源码-NameServer架构设计及启动流程

小小怪下士

Java 源码 程序员 RocketMQ

全球首个面向遥感任务设计的亿级视觉Transformer大模型

京东科技开发者

CNN 遥感 遥感影像 企业号 2 月 PK 榜 深度视觉

运维百家讲坛第 1 期:井源 - 运维几何

巴辉特

AIGC的浪潮下,文本生成发展得怎么样了?

澜舟孟子开源社区

人工智能 文本生成 AIGC

应用部署初探:3个主要阶段、4种常见模式

SEAL安全

应用部署

2K字就能理解的async/await原理,还要拖多久?

梁木由

前端 前端开发 校招 前端入门

贴合运维场景的告警聚合实现——以Zabbix为例

北海

运维 zabbix 告警 IT运维

揭秘Facebook的开发部署流程:数千名开发中没有一个测试_文化 & 方法_小智_InfoQ精选文章