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

发布了 370 篇内容, 共 171.1 次阅读, 收获喜欢 939 次。

关注

评论

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

喜大普奔!焱融科技正式推出 SaaS 数据服务平台

焱融科技

云计算 高性能 公有云 文件存储 分布式,

雾霾模糊?图像增强教你如何去雾

华为云开发者联盟

计算机视觉 图像处理 图像增强 预处理 图像去雾算法

和12岁小同志搞创客开发:如何驱动LED点阵模块?

不脱发的程序猿

少儿编程 创客开发 LED点阵模块

Kubernetes 中的应用参数配置案例详析

Zilliz

数据库 Kuber k8s Helm

Vue进阶(幺叁肆):npm查看包版本信息

No Silver Bullet

Vue 表单校验 10月月更

直播分发选低延迟 RTC 还是 CDN?

融云 RongCloud

CDN 直播 RTC

火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性

字节跳动终端技术

ios android 大前端 MARS-APMPlus

为什么要进行代码评审?

爱数技术范儿

代码评审

律所管理系统能解决律师事务所存在的这些问题

低代码小观

公司管理 企业 企业管理 管理工具 律所

教育机构这一大堆问题都是由教育管理系统解决的

低代码小观

公司管理 教育 企业管理 CRM 管理工具

【Flutter 专题】30 图解自定义底部状态栏 ACEBottomNavigationBar (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

015云原生之大数据技术

穿过生命散发芬芳

云原生 10月月更

技术分享| RTC通讯中常用的图像格式

anyRTC开发者

音视频 RTC 图像格式 rgb yuv

从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶

收到请回复

Java 程序员 面试

惊!HUAWEI高工熬夜赶出这本20W字的图解计算机操作系统指南手册,竟被我偶然发现!

Java 架构 面试 程序人生 编程语言

keytool生成keystore、truststore、证书

黄敏

青岛敏捷之旅,来了!

禅道项目管理

敏捷 敏捷教练 青岛

【ShardingSphere技术专题】「ShardingJDBC」(1)带你一同认识一下ShardingJDBC是什么?(高手勿入)

洛神灬殇

ShardingJDBC ShardingSphere 算法学习笔记指南 10月月更

《沸腾新十年》背后的N重空间

博文视点Broadview

深入思考软件工程,开启 DevOps 之旅

BoCloud博云

DevOps cicd 云原生 CI/CD 敏捷交付

第 16 章 -《Linux 一学就会》- Linux计划任务与日志的管理

学神来啦

Linux linux运维 linux学习 linux一学就会

OceanBase 存储层代码解读(二)微块存储格式

OceanBase 数据库

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

收到请回复

Java 程序员 面试 微服务 大厂Offer

极客架构营2期模块5作业

Ping

面试巨作!13万字!腾讯高工手写JDK源码笔记 带你飙向实战

收到请回复

Java jdk 面试 后端

快速配置浏览器 https 访问 Kibana(qbit)

qbit

elasticsearch TLS Kibana ssl

智能运维之日志语义异常检测

云智慧AIOps社区

日志 数据处理 异常检测 智能运维 算法实践

小知识系列:查询数据库数据的元信息

程序那些事

Java 数据库 元数据 程序那些事

云栖大会|感受万物数字化,体验千行视频化

阿里云视频云

云计算 阿里云 AI 音视频 视频云

高性能、免运维,博云开源云原生本地存储方案:Carina

BoCloud博云

数据库 云原生 中间件 本地存储

汇纳科技数据科学团队研究商场活动效果并优化的论文被ISR期刊接收

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