Facebook工程师都用Python做哪些项目?

在Facebook,Python是被使用最多的语言之一,受欢迎程度排行第三,仅次于Hack(Facebook出品的PHP变种)和C++。这听起来可能会让很多Python迷惊讶。事实上,Facebook的工程师构建并且维护着上千个Python库和项目,这些Python库和项目在Facebook的生产环境中随处可见。

每天,都有数十甚至上百个Facebook工程师为Python工具或服务贡献代码。这些工具或服务被用来做很多事情,比如二进制分发,硬件镜像,操作自动化,和基础设施管理。

从数量上看Python在Facebook的地位

21%的Facebook架构代码

百万行代码,上千个库和二进制文件

2016年至今,平均每月5000个提交,1000个提交者。

到2016年5月,5%的Python代码使用Python3

Python在运维领域的应用

Facebook的基础设施团队大量使用Python,在生产环境中Python可以说无处不在。各个团队通常来说都会为他们自己的服务维护一个Python客户端(一般是thrift),这个客户端可以为其他团队提供简单可依赖的接口,以方便其他团队可以随时调用他们的服务。

有了这些库,产品工程师可以少写大量的代码,也减少了测试和维护的成本。使他们能够快速地将自己的服务接入到Facebook的基础架构中,同时允许架构有效可靠地扩展。

基础设施管理

产品工程师拥有大多数的Python软件,并用这些软件来管理Facebook的基础设施。即便其中的软件不是100%由Python编写,至少它也覆盖了我们的硬件设施的整个生命周期,从硬件进入我们的数据中心到它报废的时刻。

Python软件驱动了这些服务:

网络切换设置和镜像(TORconfig)

白盒切换CLI(FBOSS)

核心服务(DNS, Chef, etc.),通过Kobold,一个系统启动的可插拔系统

服务器硬件错误和服务失败的自动修复(FBAR)

调度和自动化执行维护工作(Dapper)

服务器镜像,老化测试和修复管理(Cyborg)

错误检测和诊断(machinechecker)

平台服务

随着我们的基础设施规模化,一些单片服务被拆分成多个组件,过程中造就了大量各种用途的Python服务。

今天,我们大量的基础设施管理工具都构建在一个公用的平台上,这个平台由4个部分组成:

Job Engine:一个可规模化的任务调度和执行框架,任何团队都可以基于自己的目的扩展它,现在每个月运行上百万个任务。

fbpkg:一个基于BitTorrent的数据分发服务,用来传大文件和软件包,包括facebook.com的代码。

FBTFTP:我们的高性能TFTP实现,支持IPv6,每一次服务器被镜像都会使用到。

Osmosis:一个通用的工作流定义和执行工具,很多团队都在使用。支持了我们从办公室环境到数据中心环境的初始化,到操作系统和内核的升级。

服务配置管理

我们主机级别的配置管理是用Chef完成的。我们服务级别的配置管理,是通过一个Facebook内部的项目,叫Configerator,完成的。工程师们通过Python代码生成配置对象,这些配置存储在JSON文件中,任何的服务都能够读取。验证器,也是Python写的,用来验证这些配置的正确性。Python还是项目Tupperware的配置语言,这个项目是Facebook的容器部署系统。

使用Python让我们能够动态生成配置对象,而不用创建、维护、学习使用复杂的模板系统。

运维效率

很多团队都在已经存在的库和系统上做定制,来提升自己的运维效率或者满足Facebook的通用需求。

我们的MySQL基础设施团队创建了MySQL Pool Scanner,能够像一个DBA一样自动保持我们的MySQL基础设施的健康。

我们广泛部署的二进制文件(服务、代理、CLI工具等)使用slowroll orchestrator进行传输,它是一个构建在Job Engine基础上的Python工具,它允许分段部署并且会自动做安全检查。

Python3部署

Facebook的规模使得Python的效率被使用到了极致,我们的代码里使用了大量的库(Twisted, Gevent, futures, AsyncIO, 和很多其他的)。很多的迁移项目或者新项目都使用Python3,除非有不得已的理由必须使用Python2。目前,我们运行的服务中5%的代码是用Python3编写的。

下面这些兼容Python3的项目已经开源了:

FBOSS CLI:一个Python3.5编写的终端工具,用做主机切换的代理。

Facebook Python Ads API:兼容Python3

FBTFTP: Python3写的动态TFTP服务框架

PYAIB:Python异步IrcBot框架

在扩真我们的Python3代码的时候有很多令人兴奋的事情要做。我们越来越依赖于AsyncIO,这个Python3.4加入的特性。从Python2迁移而来我们见证了巨大的性能提升。我们希望贡献更多提高性能的特性和修复给Python社区。

英文原文:https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/

译者:诗书塞外

如果你也想入门高薪Python人工智能行业,欢迎你来到达内学习。

现在人工智能爆发,Python是一门脚本语言,它更适合去做人工智能这个领域,在人工智能上使用Python比其他编程语言有更大的优势。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190124B0H2B000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券