在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比其他编程语言有更大的优势。
领取专属 10元无门槛券
私享最新 技术干货