导读: Netflix (官方中文名称:网飞)是全球最大的视频流媒体平台,在除中国大陆地区之外的所有国家和地区都提供视频点播服务。全球的观众都在追棒 Netflix,而如此成功的 Netflix,其内部主要使用的又是什么编程语言呢?那就是今年成为语言流行指数榜单冠军 的 Python!让我们一起来看看 Python 在 Netflix 是如何应用的。
由于我们团队中有很多成员准备参加 PyCon,因此我们想分享一些经验,介绍 Python 在 Netflix 中是如何应用的。我们在整个内容生命周期中使用 Python,从决定为哪些内容提供资金,到运营为 1.48 亿会员提供视频服务的 CDN。我们使用并贡献了许多开源 Python 包,其中的一些包将在本文中提到。
Open Connect(开放连接)
Open Connect 是 Netflix 的内容分发网络(content delivery network,CDN)。考虑 Netflix 基础设施的运作的一种简单但不精确的方法是,参照在你按下遥控器上的“播放”按键之前发生的所有事情(例如,你是否已经登录?你有何计划?你看过什么电影?这样我们就可以给你推荐新电影,你想看什么?)都是发生在亚马逊网络服务中(Amazon Web Services,AWS),而之后发生的所有事情(即视频流)都是发生在 Open Connect 网络中。内容放在 Open Connect CDN 中的服务器网络上,尽可能靠近终端用户,为我们的客户改善流媒体体验,并降低 Netflix 和我们的互联网服务供应商(Internet Service Provider,ISP)合作伙伴的成本。
设计、构建和运营这个 CDN 基础设置需要各种软件系统,其中很多都是用 Python 编写的。构成 CDN 大部分的网络设备主要是由 Python 应用程序管理。这样的应用程序跟踪我们网络设备的库存:都有哪些设备、哪些型号,用什么硬件组件,都位于什么位置。这些设备的配置由几个其他系统控制,包括数据源、设备配置的应用和备份。用于收集运行状况和其他运营数据的设备交互是另一个 Python 应用程序。长期以来,Python 一直是网络领域中流行的编程语言,因为它是一种直观语言,允许工程师能够快速解决网络问题。随后,人们开发了许多有用的库,使得 Python 更为容易学习和使用。
Demand Engineering(需求工程)
Demand Engineering 负责 Netflix 云计算的区域故障转移、流量分配、容量运营和集群效率。我们可以很自豪地说,我们团队的工具主要是由 Python 构建的。编排故障转移的服务使用 numpy 和 scipy 来执行数值分析,boto3 对 AWS 基础设施进行更改,rq 用于运行异步工作负载,我们将其打包在一个 Flask API 的薄层中。放入 bpython shell 并进行临时制作的能力已经不止一次挽救了局面。
我们是 Jupyter Notebook 和 nteract 的重度用户,可以分析运营数据和原型可视化工具,以帮助我们检测容量回归(capacity regressions)。
CORE(核心)
CORE 团队在我们的警报和统计分析工作中使用 Python。在警报系统显示问题时,我们依靠许多统计和数学库(如 numpy、scipy、ruptures、pandas)来帮助自动分析 1000 多个相关信号。我们开发了一个用于团队内外的时间序列相关系统,以及分布式工作系统,用于并行化大量的分析工作,以快速交付结果。
Python 也是我们通常用来自动化任务、数据挖掘和清理的工具,也是可视化工作的便携来源。
监控、警报和自动修复
Insight Engineering 团队负责构建和操作用于运营洞察力、警报、诊断和自动修复的工具。随着 Python 越来越受欢迎,该团队现在支持 Python 客户端的大多数服务。一个例子就是 Spectator Python 客户端库,这是一种用于检测代码以记录维度时间序列度量的库。我们构建了 Python 库来与其他 Netflix 平台级服务进行交互。除了库之外,Winston 和 Bolt 产品也使用了 Python 框架(Gunicorn + Flask + Flask-RESTPlus)来构建。
信息安全
信息安全团队使用 Python 为 Netflix 实现了许多高层次目标:安全自动化、风险分类、自动修复和漏洞识别等等。我们有许多成功的 Python 开源项目,包括 Security Monkey(我们团队最活跃的开源项目)。我们利用 Python 来保护使用 Bless 的 SSH 资源。基础设施安全团队利用 Python 帮助使用 Repokid 进行 IAM 权限调整。我们使用 Python 来帮助使用 Lemur 生成 TLS 证书。
我们最近的一些项目包括 Prism:一种批处理框架,用于帮助安全工程师测量平整道路采用、风险因素,并识别源代码中的漏洞。我们目前为 Prism 提供了 Python 和 Ruby 库。Diffy 取证分类工具完全使用 Python 编写。我们还使用 Python 来检测使用 Lanius 的敏感数据。
个性化算法
我们在更广泛的个性化机器学习基础设施中,广泛使用 Python 来训练一些 Netflix 体验关键方面的机器学习模型:从我们的推荐算法到图片个性化,再到营销算法。例如,一些算法使用 TensorFlow、Keras 和 PyTorch 来学习深度神经网络,XGBoost 和 LightGBM 来学习梯度提升决策树,或者 Python 中更广泛的科学堆栈(numpy、scipy、sklearn、matplotlib、pandas、cvxpy 等等)。由于我们不断尝试新的方法,我们使用 Jupyter Notebook 来驱动我们的许多实验。我们还开发了一些更高级别的库,以帮助将这些库与我们的其他生态系统集成(如数据访问、事实记录和特征提取、模型评估和发布)。
机器学习基础设施
除了个性化之外,Netflix 还将机器学习应用于整个公司的数百个用例中。其中有许多应用程序都是 Metaflow 提供支持的,这是一个 Python 框架,可以使从原型阶段到生产阶段执行机器项目变得很容易。
Metafolw 提升了 Python 的极限:我们利用良好的并行化和优化的 Python 代码来获取 10Gbps 的数据,处理内存中数亿个数据点,并协调数万个 CPU 内核的计算。
Notebook
我们是 Netflix 的 Jupyter Notebook 的拥趸,我们之前已经写过这项投资的原因和性质,请参阅《Beyond Interactive: Notebook Innovation at Netflix》。
但是,在我们如何提供这些服务方面,Python 发挥着重要的作用。当我们需要开发、调试、探索和原型化与 Jupyter 生态系统的不同交互时,Python 是一种主要语言。我们使用 Python 为 Jupyter 服务器构建自定义扩展,允许我们代表用户管理日志记录、归档、发布和克隆笔记本等任务。我们通过不同的 Jupyter 内核为用户提供了多种风格的 Python,并使用 Python 管理这些内核规范的部署。
编排
大数据编排团队(The Big Data Orchestration team)负责提供所有服务和工具来安排和执行 ETL 和 Ad hoc 管道。
编排服务的许多组件都是用 Python 编写的。从我们的调度程序开始,它使用 Jupyter Notebook 和 papermill 来提供模板化的作业类型(如 Spark、Presto 等等)。这使得我们的用户能够以标准化的、简单的方式来表达需要执行的工作。要想知道有关这一主题的更多详情,请参阅《Part2:Scheduling Noteebooks at Netflix》:
在需要人工干预的情况下,我们一直使用 notebook 作为真正的运行手册。即:重新启动过去一小时内所有失败的事情。
在内部,我们还构建了一个完全用 Python 编写的事件驱动平台。我们已经创建了来自多个系统的事件流,这些系统将统一到一个工具中。这允许我们能够定义过滤事件的条件,以及响应或路由事件的动作。因此,我们能够解耦微服务,并能够了解数据平台上发生的所有事情。
我们的团队还构建了 pygenie 客户端,它与 genie(一种联合作业执行服务)接口。在内部,我们对这个库进行了额外的扩展,可应用业务约定并与 Netflix 平台集成。这些库是用户以变成方式与大数据平台中的工作进行交互的主要方式。
最后,我们团队致力于为 papermill 和 scrapbook 开源项目做出贡献。我们为此进行的工作既适用于我们自己的用例,也适用于外部用例。我们的这些努力在开源社区获得了很大吸引力,我们很高兴能够为这些共享项目做出贡献。
实验平台
用于实验的科学计算团队正在为科学家和工程师创建一个分析 AB 测试和其他实验的平台。科学家和工程师可以在数据、统计和可视化这三个方面做出新的创新。
Metrics Repo 是一个基于 PyPika 的 Python 框架,它允许贡献者编写可重用的参数化 SQL 查询。它是任何新分析的切入点。
因果模式库是一个 Python 和 R 框架,供科学家为因果推理提供新的模型。它利用了 PyArrow 和 RPy2,因此可以使用这两种语言的任何一种无缝地计算统计数据。
可视化库是基于 Plotly。因为 Plotly 是一种广泛采用的可视化规范,因此有许多工具可以让贡献者生成我们平台可以使用的输出。
合作伙伴生态系统
合作伙伴生态系统小组正在扩展 Python 在设备上测试 Netflix 应用程序的使用范围。Python 正在形成一个新的 CI 基础架构的核心,包括控制我们的编排服务器、控制 Spinnaker、测试用例查询和过滤,以及在设备和容器上调度测试运行。使用 TensorFlow 在 Python 中进行额外的运行后分析,以确定哪些测试最有可能显示哪些设备上的问题。
视频编码与媒体云工程
我们的团队负责对 Netflix 目录进行编码(和重新编码),并利用机器学习来深入了解该目录。我们将 Python 用于大约 50 个项目,如 vmaf 和 mezzfs,我们使用名为 Archer 的媒体映射化简平台( media map-reduce platform)构建计算机视觉解决方案,并在许多内部项目中使用 Python。我们还开源了一些工具来简化 Python 项目的开发/分发,比如 setupmeta 和 pickley。
Netflix 动画与 NVFX
Python 是我们用于创建动画和 VFX 内容的所有主要应用程序的行业标准,毫无疑问,我们正在大量使用它。我们与 Maya 和 Nuke 的所有集成都是用 Python 实现的,而我们的 Shotgun 工具的大部分也是用 Python 实现的。我们刚刚开始在云端中使用我们的工具,并与其部署我们自己的许多定制的 Python AMI / 容器。
内容机器学习、科学与分析
内容机器学习团队广泛使用 Python 来开发机器学习模型,这些模型是预测所有内容的受众规模、收视率和其他需求指标的核心。
文中涉及到的部分项目、库的官方地址:
Open Connect:https://openconnect.netflix.com/en/
bpython:https://bpython-interpreter.org/
nteract:https://nteract.io/
visualization tools:https://github.com/nteract/nteract/tree/master/packages/data-explorer
Spectator:https://github.com/Netflix/spectator-py
Security Monkey:https://github.com/Netflix/security_monkey
Bless:https://github.com/Netflix/bless
Repokid:https://github.com/Netflix/repokid
Lemur:https://github.com/Netflix/lemur
papermill:https://papermill.readthedocs.io/en/latest/
pygenie:https://github.com/Netflix/pygenie
scrapbook:https://nteract-scrapbook.readthedocs.io/en/latest/
PyPika:https://pypika.readthedocs.io/en/latest/
PyArrow:https://arrow.apache.org/docs/python/
RPy2:https://rpy2.readthedocs.io/en/version_2.8.x/
Plotly:https://plot.ly/
vmaf:https://github.com/Netflix/vmaf/blob/master/resource/doc/references.md
setupmeta:https://pypi.org/project/setupmeta/
pickley:https://pypi.org/project/pickley/
原文链接:
https://medium.com/netflix-techblog/python-at-netflix-bba45dae649e
评论