写点什么

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

2019 年 5 月 07 日

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 年 5 月 07 日 15:564727
用户头像

发布了 338 篇内容, 共 129.3 次阅读, 收获喜欢 853 次。

关注

评论

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

令数字起舞,让自然微笑:TECH4ALL的2020启示录

脑极体

如何使用mock应对测试所需随机数据

华为云开发者社区

测试 数据 Mock

分享一个普通程序员的“沪漂”六年的历程以及感想

程序员老猫

回忆录 经历 年终总结 沪漂 上海买房

测开之函数进阶· 第6篇《闭包》

清菡

测试开发

RPC Demo(二) 基于 Zookeeper 的服务发现

Java zookeeper RPC 服务发现

通达同城快递设计方案

garlic

架构师训练营第 1 期

送你一份迷你书,全面了解如何做好大促技术备战

京东科技开发者

DevOps

软件测试——网络协议知识(二)

测试人生路

软件测试 网络通信协议

云挖矿APP系统开发|云挖矿软件开发

开發I852946OIIO

系统开发

重新发现科技与人文的互动

脑极体

实用流程工具,浅析LR.NET配置型工作流引擎

雯雯写代码

.net 工作流

北京一咖啡店启动数字人民币应用场景测试 店员:目前处于内测阶段

CECBC区块链专委会

数字人民币

Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?

华为云开发者社区

学习 rust 语言

技术干货 | 六分钟学会使用 HBuilder 引入构建 mPaaS 小程序

蚂蚁集团移动开发平台 mPaaS

小程序 uni-app mPaaS

写出一手烂代码的19条准则

Java架构师迁哥

Java中的常量

cdhqyj

Java

华为18级大牛手撸七百多页MySQL数据库性能调优、架构设计手册!

Java成神之路

Java 程序员 架构 面试 编程语言

ClickHouse利器—如何提高留存计算速度

行者AI

数据库

LeetCode题解:239. 滑动窗口最大值,二叉堆,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

跨年巨作!13万字!腾讯高工纯手写“JDK源码笔记”直接带你飙向实战

比伯

Java 编程 架构 面试 计算机

差距不止一点点!Github星标51K的性能优化文档也太香了

程序员小毕

Java 程序员 性能优化 JVM 设计模式

近些年有哪些口碑炸裂的项目管理工具?各具特色的项目管理工具我们该如何选择?

PingCode

项目管理 程序人生

Linux基本操作命令

行者AI

Linux

IPFS分布式存储矿机系统APP软件开发

开發I852946OIIO

系统开发

Flink Forward Asia 2020 -- Keynote 总结

Apache Flink

flink

百度京Fun生活节 双旦福利HIGH 翻全城

DT极客

爆赞!P8架构师总结29篇多线程与高并发+设计模式核心笔记

Java架构追梦

Java 学习 架构 面试 多线程高并发

程序员:我非常熟练多线程!面试官:你熟悉个屁!

Java成神之路

Java 程序员 架构 面试 编程语言

爆赞!GitHub上收获Star数排名前10的Java项目爆赞!

Java成神之路

Java 程序员 架构 面试 编程语言

第一张区块链完税证明在深圳开出,区块链政务应用再获突破

CECBC区块链专委会

区块链 电子证明

破除数据垄断,数据上链或是关键

CECBC区块链专委会

区块链 大数据

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