
当我们许多人为PyCon会议做准备时,我们想谈一谈Netflix如何使用Python。 我们在整个生命周期中都使用Python:从确定需要资助的系列,到CDN的工作结束,将视频运送给1.48亿用户。 我们为许多开源Python软件包做出了贡献,其中一些在下面提到。 如果您有兴趣,请访问我们的
空缺网站或在PyCon上寻找我们。
打开连接
Open Connect是Netflix内容交付网络(CDN)。 呈现Netflix基础架构的一种简单但不准确的方法是:在按遥控器上的“播放”按钮之前发生的所有事情(例如登录,确定费率计划,推荐系统,选择电影)都可以在Amazon Web Services(AWS)中运行,之后发生的所有事情(即流视频)都可以通过Open Connect进行。 内容托管在尽可能靠近最终用户的Open Connect CDN服务器网络上,以提高客户的观看质量并降低Netflix和我们的合作伙伴Internet提供商的成本。
设计,开发和操作CDN需要各种软件系统,其中许多都是用Python编写的。 基于CDN的网络设备主要由Python应用程序控制。 此类应用程序监视网络设备的状态:使用哪些设备,使用哪种型号,使用哪些硬件组件以及它们位于何处。 这些设备的配置由其他几个系统控制,包括“真相来源”,设备配置应用程序和备份。 用于收集健康数据和其他操作数据的设备的交互是另一个Python应用程序。 长期以来,Python一直是Web上流行的编程语言,因为它是一种直观的语言,可让您快速解决网络问题。 已经开发了许多有用的库,使该语言更加适合于学习和使用。
需求工程
Demand Engineering负责
处理 Netflix云中的
区域故障 ,流量分配,带宽操作和服务器性能。 我们可以自豪地说我们的工具主要基于Python构建。 故障转移服务使用numpy和scipy进行数值分析,使用boto3更改AWS基础设施,使用rq运行异步工作负载,所有这些都包装在一个薄Flask API层中。 在
bpython shell中失败
退出并立即完成的能力保存了该情况。
我们积极使用Jupyter Notebooks和nteract来分析运营数据和原型
可视化工具以检测产能下降。
核心
CORE团队使用Python分析统计信息并发出警报。 当警报系统表明存在问题时,我们依靠许多统计和数学库(numpy,scipy,破裂,熊猫)来自动分析1000个相关信号。 我们已经开发了在团队内部和外部都使用的时间序列相关系统,以及用于并行化大量分析工作以获得快速结果的分布式工作系统。
我们还通常将Python用于自动化,研究和数据过滤任务,并作为便捷的可视化工具。
监控,警报和自动恢复
Insight工程团队负责工具的开发和操作,以快速识别问题,警报,诊断和自动修复。 随着Python的日益普及,该团队现在为大多数服务支持Python客户端。 一个示例是
Spectator客户端库,其中包含记录维度时间序列指标的代码。 我们创建Python库来与Netflix平台上的其他服务进行交互。 除了库,
Winston和
Bolt产品还使用Python框架(Gunicorn + Flask + Flask-RESTPlus)构建。
信息安全
信息安全团队使用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笔记本。 我们还开发了许多更高级别的库,用于将笔记本与我们的
生态系统的其余部分集成在一起(例如,访问数据,记录事实和提取属性,评估模型以及发布)。
机器学习基础架构
除了个性化之外,Netflix还将机器学习应用于整个公司的数百项其他任务。 其中许多应用程序都在Python平台Metaflow上运行,该平台使执行ML项目以及从原型阶段到生产的运行变得容易。
Metaflow突破了Python的界限:我们使用并行度高且经过优化的Python代码以10 Gb / s的速度提取数据,处理内存中的数亿个数据点,并在数万个CPU内核上组织计算。
记事本
Netflix的用户是Jupyter笔记本电脑的狂热用户,我们已经写过
这些投资的
原因和性质 。
但是Python在这些服务的提供方式中起着巨大的作用。 它是与Jupyter生态系统进行各种交互的开发,调试,研究和原型设计的主要语言。 我们使用Python为Jupyter服务器创建自定义扩展,这使我们能够代表用户管理诸如日志记录,归档,发布和克隆笔记本之类的任务。 我们通过各种Jupyter内核为用户提供了许多使用Python的选项,并使用Python来控制这些内核规范的部署。
编排
大数据编排团队负责提供用于计划和执行ETL和Adhoc管道的所有服务和工具。
许多业务流程组件都是用Python编写的。 从使用
Jupyter和
Papermill 记事本作为模板作业类型(Spark,Presto ...)的调度程序开始。 这为用户提供了一种标准化且简单的方式来表达需要完成的工作。
在这里您可以阅读更多有关它的信息。 在需要人工干预的情况下,例如,重新启动过去一小时内发生的所有事情,我们将笔记本用作生产中的真实操作清单(“运行手册”)。
供内部使用,我们构建了一个完全由Python编写的事件驱动平台。 它从多个系统中接收事件流,这些事件流被组合到一个工具中。 这使您可以确定过滤事件,响应事件或路由的条件。 结果,我们能够隔离微服务,并确保数据平台上发生的所有事情的透明度。
我们的团队还开发了
pygenie客户端,该客户端与
Genie联合工作完成服务交互。 在内部,我们对此库进行了其他扩展,这些扩展应用了业务协议并与Netflix平台集成。 这些库是用户以编程方式与大数据平台进行交互的主要方式。
最后,我们的团队为开源项目
papermill和
scrapbook做出了贡献:我们为自己和外部用例添加了代码。 我们的努力得到了开源社区的一致好评,对此我们感到非常高兴。
实验平台
科学计算团队创建了一个实验平台:AB测试和其他。 科学家和工程师可以在三个领域尝试创新:数据,统计和可视化。
我们的指标存储库是基于
PyPika的Python平台,可让您编写可重用的参数化SQL查询。 这是任何新分析的切入点。
因果模型的因果模型库基于Python和R:在这里,科学家有机会探索新的因果模型。 它使用PyArrow和RPy2,因此可以轻松地以任何语言计算统计信息。
可视化库基于
Plotly 。 由于Plotly是可视化的通用规范,因此有许多输出工具可用于我们的平台。
会员生态系统
合作伙伴生态系统团队使用Python在设备上测试Netflix应用程序。 Python构成了新的持续集成基础架构的核心,包括管理我们的业务流程服务器,管理Spinnaker,测试套件请求和过滤以及计划在设备和容器上的测试运行。 使用TensorFlow在Python中执行其他启动后分析,以确定哪些测试最有可能在哪些设备上引起问题。
视频编码和媒体云开发
我们的团队负责对Netflix目录进行编码(和转码),并使用机器学习来分析此目录。
我们在大约50个项目(例如
vmaf和
mezzfs)中使用Python,使用名为
Archer的map-reduce平台创建计算机视觉解决方案,并将Python用于许多内部项目。
我们还开放了一些工具来促进Python项目的开发/分发,例如
setupmeta和
pickley 。
Netflix和NVFX动画
Python是我们用于创建动画和VFX内容的所有主要应用程序的行业标准,因此不用说我们会大量使用它。 我们与Maya和Nuke的所有集成都是使用Python和我们的Shotgun工具的大部分进行的。 我们刚刚开始在云中构建工具,并将在其中部署许多自定义Python AMI /容器。
内容,科学和分析中的机器学习
内容方面的机器学习团队广泛使用Python开发机器学习模型,这些模型是预测所有内容的受众人数,观看次数和其他指标的核心。