智能体刷屏的背后,是 AI 应用拐点的来临?AICon 北京站议程重磅公布,50+ 硬核分享不容错过 了解详情
写点什么

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:565777
用户头像

发布了 376 篇内容, 共 199.1 次阅读, 收获喜欢 948 次。

关注

评论

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

Spring Boot 分离配置文件的 N 种方式

江南一点雨

Java spring springboot

NFTScan 正式推出「NFTScan as a Service」NaaS 服务

NFT Research

NFT 数据基础设施

代码质量与安全 | “吃狗粮”能够影响到代码质量?来了解一下!

龙智—DevSecOps解决方案

代码质量 代码安全 静态代码安全

现在啥软件都有开源,BI 呢?

陈橘又青

数据库

Fruity Loops Studio2023最新版水果编曲软件下载

茶色酒

Fruity Loops Studio

智慧屏也常用常新,华为智慧屏V98等6款设备可升级HarmonyOS 3正式版

极客天地

再见 Fred Brooks

Journeyman

IT 新闻

火山引擎DataTester背后,抖音的名字原来是AB测试来的

字节跳动数据平台

大数据 AB testing实战

java的这些多线程面试专题,你都知道吗?

钟奕礼

Java 程序员 java面试 java编程

100+款AI产品薅羊毛攻略(中)——1年节省大几百万

夏夜许游

AI 视觉智能 阿里云视觉智能开放平台 薅羊毛

BI工具中哪一种使用体验更好?

夏日星河

JAVA面试基础经典百问,拿下大厂offer

钟奕礼

Java java程序员 java面试 java编程

即时通讯技术文集(第6期):移动端弱网优化文章汇总 [共13篇]

JackJiang

网络编程 即时通讯IM

toB应用私有化交付发展历程、技术对比和选型

北京好雨科技有限公司

用户文章 | 原来Steam和Perforce有这种关系?!

龙智—DevSecOps解决方案

版本控制 版本管理工具 版本管理

云图说|移动应用安全服务—App的体检中心,全面检测,安全上路!

华为云开发者联盟

华为云 移动应用安全 VSS

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

Serverless Devs

云计算 Serverless Serverless Devs

【Git实战】协同开发,如何紧急修复线上bug?

王中阳Go

git 高效工作 学习方法 git 学习 11月月更

阿里云存储负责人吴结生:重新定义下一代云存储

云布道师

云存储 云栖大会

CleanMyMac2023体验版苹果电脑管家

茶色酒

CleanMyMac CleanMyMac2023

想搞懂持续交付理论和实践,你只差这三个问题

华为云开发者联盟

云计算 云原生 华为云 代码托管

云时代下,医药行业管理居然这么简单

华为云开发者联盟

数据库 华为云 SaaS医药管理系统

分布式流处理组件-理论篇:Kafka与安装配置

谢先生F

架构 kafka 3.X 11月月更

深度学习框架新手快速上手指南

MegEngineBot

深度学习 开源 教程 MegEngine 新手入门

Nacos 中的配置文件如何实现加密传输

小小怪下士

Java 程序员 微服务 SpringCloud

云原生安全系列2:提升镜像安全的10条建议

HummerCloud

云原生 镜像安全 云原生安全

国内Quick BI为何可以入选魔力象限?

小偏执o

React 中的重新渲染

阿里巴巴终端技术

前端 React

ITSM | 企业如何管理变更、响应事件以及创立知识库——专访龙智技术专家与顾问

龙智—DevSecOps解决方案

本地开发完成的 Fiori Elements 应用,部署到远端 ABAP 服务器上的详细步骤

汪子熙

web开发 abap Fiori SAP UI5 11月月更

静态WEB容器镜像最小化实践

mengzyou

DevOps Web Docker 镜像

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