Facebook 怎样实施部署

最近一周facebook内部放出了一些关于Facebook的部署流程的消息。如果你不想了解整个内部信息的话,这里我把这些信息做了一个整合概括。这些信息直接来自查克·罗西,而查克·罗西就是Facebook发布工程组的负责人,这里有瑞恩·保罗对他的采访:

Facebook发展文化的一个重要方面是开发人员对他们的代码在产品中的表现完全负责。这一理念反应了DevOps,这样可以减小开发人员与运维人员之间的隔阂。

如果在Facebook更新中任何代码在产品中出现问题,这些代码的开发者与修复这些问题挂钩,必须确保问题尽快被解决。

对于部署来讲,Facebook使用:

  • 使用自定义的BitTorrent的P2P系统
  • 站点更新耗时15-30分钟
  • JS、CSS、图像使用分布式的CDN

部署步骤

  1. 在进行全面的更新之前,新代码首先被推送到“A2”层——Facebook的少量公共服务器。这个阶段的测试把更新特性随机暴露给Facebook的部分正式用户,但只是所有用户的一小部分而已。
  2. 在IRC上初始化了一个checkin过程。此时所有的开发者,不管是提交更新或者没有提交更新,都会被通知,并要求回应,是否做好了系统全面更新的准备。
  3. 当准备开始实施更新的时候,在一个终端里输入了一行命令,然后整个过程就开始了。
  4. 通过Facebook的基于Web的监控工具观察整个更新过程。

有一小部分的服务器在部署过程中会失败,不过这通常不会造成任何问题。这是因为任何FaceBook服务器能处理任何页面请求,所以他们不必担心关于序列化和移植用户session状态。服务器在升级的过程中能保持收到的页面请求,就想我们知道的一样,不会因此而使用户下线。

部署的频度

  • 在绝大多数时间里,每个工作日都有一个小规模的更新
  • 每周通常是周二有一个大型更新。

在我们看起来比较好的公司例如Google、Facebook,下面这句话听起来非常真实可靠:“Release early and often.”

via dzone