打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python在Facebook的大量应用

在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社区。

了解野狗,请点击阅读原文

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
谁是2020年最强Python库?年度Top10出炉
try-一个易于使用的cli工具,用于试用Python软件包
llama2.mojo比llama2.c快20%,最年轻的语言Mojo惊艳开发者社区
LLVM&Swift之父宣布全新AI开发编程语言'Mojo',兼容Python,且快35000倍
DevOps
我们为什么用 Go 编写机器学习架构,却不用 Python?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服