速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

Netflix 实践:1.48 亿用户观看电影,Python 在幕后提供全生命周期支持

  • 2019-05-07
  • 本文字数:4490 字

    阅读完需:约 15 分钟

Netflix实践:1.48亿用户观看电影,Python在幕后提供全生命周期支持

导读: 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


mezzfs:https://medium.com/netflix-techblog/mezzfs-mounting-object-storage-in-netflixs-media-processing-platform-cda01c446ba


setupmeta:https://pypi.org/project/setupmeta/


pickley:https://pypi.org/project/pickley/




原文链接:


https://medium.com/netflix-techblog/python-at-netflix-bba45dae649e


2019-05-07 15:565510
用户头像

发布了 375 篇内容, 共 188.7 次阅读, 收获喜欢 945 次。

关注

评论

发布
暂无评论
发现更多内容

Nginx+IIS做站点访问负载均衡

为自己带盐

nginx dotnet 28天写作 12月日更

Linux中如何设置SSH密钥提升登陆安全性

恒生LIGHT云社区

Linux SSH

2021年终总结

hasWhere

Python代码阅读(第73篇):字符串字节数

Felix

Python 编程 字符串 阅读代码 Python初学者

2021百度AI开发者大会在元宇宙举办

百度大脑

人工智能

当 Redis 发生高延迟时,到底发生了什么

程序员历小冰

redis 延迟 28天写作 12月日更

基于kali的域控环境搭建——黑盒测试环境搭建

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

【网络安全】针对 HTTP/2 协议的HTTP Desync攻击

H

网络安全 信息安全 漏洞

华为与湖北三所高校共建首批鲲鹏&昇腾产教融合育人基地

科技热闻

研究了一圈React学习资料,发现最好用的React教程还是这个

sai

项目开发架手架规划

hasWhere

AI风起荆楚,人工智能中国体系即刻启航

脑极体

语音信号处理14:语音信号的特征应用

轻口味

28天写作 12月日更

模型黑盒|机器学习模型的“可解释性”研究

索信达控股

神经网络 机器学习 神经网络模型

云原生促进基础设施变革,百度“磐玉”蜂巢服务器正式发布

科技热闻

Hoo虎符研究院 | 币圈后浪——Swivel Finance

区块链前沿News

Hoo虎符 虎符交易所 虎符研究院

Hadoop学习过程中遇到的错误及解决方法

阿丞

hadoop hdfs mapreduce YARN

11月云短信报告出炉,腾讯云再次蝉联到达率冠军

博睿数据

个推漫话知识图谱:《女心理师》中的智能语音识别系统如何实现?

个推

机器学习 nlp 知识图谱

高性能队列Disruptor在测试中应用

FunTester

Disruptor 测试 性能测试 高性能队列 FunTester

Spring框架基础知识(01)

海拥(haiyong.site)

28天写作 12月日更

百度CTO王海峰:AI大生产平台再升级 助力中国科技自立自强

百度大脑

人工智能

实现一个javaagent需要几步?

BUG侦探

Java javaagent IAST

世界女性科技群落(四):技术与流行文化顶格发展,日韩女性的科技暗面

脑极体

资产租赁管理系统解决方案

低代码小观

资产管理 CRM 企业管理系统 融资租赁 CRM系统

设计消息队列存储消息数据的 MySQL 表格

奔奔

信通院首批AIOps系统和工具评估,博睿数据获评异常检测模块“全面级”

博睿数据

一文带你了解数据库设计基础

坚果

数据库 28天写作 12月日更

Java 必看的 Spring 知识汇总!

CRMEB

忆父亲

wood

28天写作 父亲

年底了,聊聊述职

CatTalk

职场

Netflix实践:1.48亿用户观看电影,Python在幕后提供全生命周期支持_编程语言_Netflix技术博客_InfoQ精选文章