AI 前線導讀:Netflix (官方中文名稱:網(wǎng)飛)是全球最大的視頻流媒體平臺,在除中國大陸地區(qū)之外的所有國家和地區(qū)都提供視頻點播服務,。全球的觀眾都在追棒 Netflix,,而如此成功的 Netflix,其內(nèi)部主要使用的又是什么編程語言呢,?那就是今年成為語言流行指數(shù)榜單冠軍的 Python,!
更多優(yōu)質(zhì)內(nèi)容請關注微信公眾號“AI 前線”(ID:ai-front)由于我們團隊中有很多成員準備參加 PyCon,因此我們想在這篇文章中分享一些經(jīng)驗,,介紹 Python 在 Netflix 是如何應用于方方面面的,。在 Netflix 的整個內(nèi)容生命周期中都會使用 Python,從決定為哪些內(nèi)容提供資金,,到運營為 1.48 億會員提供視頻服務的 CDN,。我們使用并貢獻了許多開源 Python 包,其中的一些包將在本文中提到,。如果你對此感興趣的話,,可以訪問 Netflix 的招聘網(wǎng)站,或參加 PyCon 來與我們交流,。
AI 前線注:
招聘網(wǎng)站:https://jobs./search?q=python
Open Connect 是 Netflix 的內(nèi)容分發(fā)網(wǎng)絡(content delivery network,,CDN)。考慮 Netflix 基礎設施的運作的一種簡單但不精確的方法是,,參照在你按下遙控器上的“播放”按鍵之前發(fā)生的所有事情(例如,,你是否已經(jīng)登錄?你有何計劃,?你看過什么電影?這樣我們就可以給你推薦新電影,,你想看什么,?)都是發(fā)生在亞馬遜網(wǎng)絡服務中(Amazon Web Services,AWS),,而之后發(fā)生的所有事情(即視頻流)都是發(fā)生在 Open Connect 網(wǎng)絡中,。內(nèi)容放在 Open Connect CDN 中的服務器網(wǎng)絡上,盡可能靠近終端用戶,,為我們的客戶改善流媒體體驗,,并降低 Netflix 和我們的互聯(lián)網(wǎng)服務供應商(Internet Service Provider,ISP)合作伙伴的成本,。
AI 前線注:內(nèi)容分發(fā)網(wǎng)絡(Content delivery network 或 Content distribution network,,縮寫:CDN)是指一種通過互聯(lián)網(wǎng)互相連接的計算機網(wǎng)絡系統(tǒng),利用最靠近每位用戶的服務器,,更快,、更可靠地將音樂、圖片,、影片,、應用程序及其他文件發(fā)送給用戶,來提供高性能,、可擴展性及低成本的網(wǎng)絡內(nèi)容分發(fā)給用戶,。
設計、構建和運營這個 CDN 基礎設置需要各種軟件系統(tǒng),,其中很多都是用 Python 編寫的,。構成 CDN 大部分的網(wǎng)絡設備主要是由 Python 應用程序管理。這樣的應用程序跟蹤我們網(wǎng)絡設備的庫存:都有哪些設備,、哪些型號,,用什么硬件組件,都位于什么位置,。這些設備的配置由幾個其他系統(tǒng)控制,,包括數(shù)據(jù)源、設備配置的應用和備份,。用于收集運行狀況和其他運營數(shù)據(jù)的設備交互是另一個 Python 應用程序,。長期以來,Python 一直是網(wǎng)絡領域中流行的編程語言,因為它是一種直觀語言,,允許工程師能夠快速解決網(wǎng)絡問題,。隨后,人們開發(fā)了許多有用的庫,,使得 Python 更為容易學習和使用,。
Demand Engineering 負責 Netflix 云計算的區(qū)域故障轉(zhuǎn)移、流量分配,、容量運營和集群效率,。我們可以很自豪地說,我們團隊的工具主要是由 Python 構建的,。編排故障轉(zhuǎn)移的服務使用 numpy 和 scipy 來執(zhí)行數(shù)值分析,,boto3 對 AWS 基礎設施進行更改,rq 用于運行異步工作負載,,我們將其打包在一個 Flask API 的薄層中,。放入 bpython shell 并進行臨時制作的能力已經(jīng)不止一次挽救了局面。
AI 前線注:有關 Demand Engineering 可參閱《What is Demand Engineering?》:https://www.linkedin.com/pulse/what-demand-engineering-aaron-blohowiak/
我們是 Jupyter Notebook 和 nteract 的重度用戶,,可以分析運營數(shù)據(jù)和原型可視化工具,,以幫助我們檢測容量回歸(capacity regressions)。
CORE 團隊在我們的警報和統(tǒng)計分析工作中使用 Python,。在警報系統(tǒng)顯示問題時,,我們依靠許多統(tǒng)計和數(shù)學庫(如 numpy、scipy,、ruptures,、pandas)來幫助自動分析 1000 多個相關信號。我們開發(fā)了一個用于團隊內(nèi)外的時間序列相關系統(tǒng),,以及分布式工作系統(tǒng),,用于并行化大量的分析工作,以快速交付結果,。
Python 也是我們通常用來自動化任務,、數(shù)據(jù)挖掘和清理的工具,也是可視化工作的便攜來源,。
Insight Engineering 團隊負責構建和操作用于運營洞察力、警報,、診斷和自動修復的工具,。隨著 Python 越來越受歡迎,該團隊現(xiàn)在支持 Python 客戶端的大多數(shù)服務,。一個例子就是 Spectator Python 客戶端庫,,這是一種用于檢測代碼以記錄維度時間序列度量的庫,。我們構建了 Python 庫來與其他 Netflix 平臺級服務進行交互。除了庫之外,,Winston 和 Bolt 產(chǎn)品也使用了 Python 框架(Gunicorn + Flask + Flask-RESTPlus)來構建,。
信息安全團隊使用 Python 為 Netflix 實現(xiàn)了許多高層次目標:安全自動化、風險分類,、自動修復和漏洞識別等等,。我們有許多成功的 Python 開源項目,包括 Security Monkey(我們團隊最活躍的開源項目),。我們利用 Python 來保護使用 Bless 的 SSH 資源,。基礎設施安全團隊利用 Python 幫助使用 Repokid 進行 IAM 權限調(diào)整,。我們使用 Python 來幫助使用 Lemur 生成 TLS 證書,。
我們最近的一些項目包括 Prism:一種批處理框架,,用于幫助安全工程師測量平整道路采用,、風險因素,并識別源代碼中的漏洞,。我們目前為 Prism 提供了 Python 和 Ruby 庫,。Diffy 取證分類工具完全使用 Python 編寫。我們還使用 Python 來檢測使用 Lanius 的敏感數(shù)據(jù),。
我們在更廣泛的個性化機器學習基礎設施中,,廣泛使用 Python 來訓練一些 Netflix 體驗關鍵方面的機器學習模型:從我們的推薦算法到圖片個性化,再到營銷算法,。例如,,一些算法使用 TensorFlow、Keras 和 PyTorch 來學習深度神經(jīng)網(wǎng)絡,,XGBoost 和 LightGBM 來學習梯度提升決策樹,,或者 Python 中更廣泛的科學堆棧(numpy、scipy,、sklearn,、matplotlib、pandas,、cvxpy 等等),。由于我們不斷嘗試新的方法,我們使用 Jupyter Notebook 來驅(qū)動我們的許多實驗,。我們還開發(fā)了一些更高級別的庫,,以幫助將這些庫與我們的其他生態(tài)系統(tǒng)集成(如數(shù)據(jù)訪問、事實記錄和特征提取,、模型評估和發(fā)布),。
除了個性化之外,Netflix 還將機器學習應用于整個公司的數(shù)百個用例中。其中有許多應用程序都是 Metaflow 提供支持的,,這是一個 Python 框架,,可以使從原型階段到生產(chǎn)階段執(zhí)行機器項目變得很容易。
Metafolw 提升了 Python 的極限:我們利用良好的并行化和優(yōu)化的 Python 代碼來獲取 10Gbps 的數(shù)據(jù),,處理內(nèi)存中數(shù)億個數(shù)據(jù)點,,并協(xié)調(diào)數(shù)萬個 CPU 內(nèi)核的計算。
我們是 Netflix 的 Jupyter Notebook 的擁躉,,我們之前已經(jīng)寫過這項投資的原因和性質(zhì),,請參閱《Beyond Interactive: Notebook Innovation at Netflix》:
https:///netflix-techblog/notebook-innovation-591ee3221233
但是,在我們?nèi)绾翁峁┻@些服務方面,,Python 發(fā)揮著重要的作用,。當我們需要開發(fā)、調(diào)試,、探索和原型化與 Jupyter 生態(tài)系統(tǒng)的不同交互時,,Python 是一種主要語言。我們使用 Python 為 Jupyter 服務器構建自定義擴展,,允許我們代表用戶管理日志記錄,、歸檔、發(fā)布和克隆筆記本等任務,。我們通過不同的 Jupyter 內(nèi)核為用戶提供了多種風格的 Python,,并使用 Python 管理這些內(nèi)核規(guī)范的部署。
大數(shù)據(jù)編排團隊(The Big Data Orchestration team)負責提供所有服務和工具來安排和執(zhí)行 ETL 和 Ad hoc 管道,。
AI 前線注:Ad hoc 的意思是“特設的,、特定目的的(地)、即席的,、臨時的,、將就的、專案的”,。這個短語通常用來形容一些特殊的,、不能用于其它方面的的,為一個特定的問題,、任務而專門設定的解決方案,。
編排服務的許多組件都是用 Python 編寫的。從我們的調(diào)度程序開始,,它使用 Jupyter Notebook 和 papermill 來提供模板化的作業(yè)類型(如 Spark,、Presto 等等)。這使得我們的用戶能夠以標準化的,、簡單的方式來表達需要執(zhí)行的工作,。要想知道有關這一主題的更多詳情,,請參閱《Part2:Scheduling Noteebooks at Netflix》:
https:///netflix-techblog/scheduling-notebooks-348e6c14cfd6
在需要人工干預的情況下,我們一直使用 notebook 作為真正的運行手冊,。即:重新啟動過去一小時內(nèi)所有失敗的事情,。
在內(nèi)部,我們還構建了一個完全用 Python 編寫的事件驅(qū)動平臺,。我們已經(jīng)創(chuàng)建了來自多個系統(tǒng)的事件流,,這些系統(tǒng)將統(tǒng)一到一個工具中。這允許我們能夠定義過濾事件的條件,,以及響應或路由事件的動作,。因此,我們能夠解耦微服務,,并能夠了解數(shù)據(jù)平臺上發(fā)生的所有事情,。
我們的團隊還構建了 pygenie 客戶端,它與 genie(一種聯(lián)合作業(yè)執(zhí)行服務)接口,。在內(nèi)部,,我們對這個庫進行了額外的擴展,可應用業(yè)務約定并與 Netflix 平臺集成,。這些庫是用戶以變成方式與大數(shù)據(jù)平臺中的工作進行交互的主要方式,。
最后,,我們團隊致力于為 papermill 和 scrapbook 開源項目做出貢獻,。我們?yōu)榇诉M行的工作既適用于我們自己的用例,也適用于外部用例,。我們的這些努力在開源社區(qū)獲得了很大吸引力,,我們很高興能夠為這些共享項目做出貢獻。
用于實驗的科學計算團隊正在為科學家和工程師創(chuàng)建一個分析 AB 測試和其他實驗的平臺,??茖W家和工程師可以在數(shù)據(jù)、統(tǒng)計和可視化這三個方面做出新的創(chuàng)新,。
Metrics Repo 是一個基于 PyPika 的 Python 框架,,它允許貢獻者編寫可重用的參數(shù)化 SQL 查詢。它是任何新分析的切入點,。
因果模式庫是一個 Python 和 R 框架,,供科學家為因果推理提供新的模型。它利用了 PyArrow 和 RPy2,,因此可以使用這兩種語言的任何一種無縫地計算統(tǒng)計數(shù)據(jù),。
可視化庫是基于 Plotly。因為 Plotly 是一種廣泛采用的可視化規(guī)范,,因此有許多工具可以讓貢獻者生成我們平臺可以使用的輸出,。
合作伙伴生態(tài)系統(tǒng)小組正在擴展 Python 在設備上測試 Netflix 應用程序的使用范圍,。Python 正在形成一個新的 CI 基礎架構的核心,包括控制我們的編排服務器,、控制 Spinnaker,、測試用例查詢和過濾,以及在設備和容器上調(diào)度測試運行,。使用 TensorFlow 在 Python 中進行額外的運行后分析,,以確定哪些測試最有可能顯示哪些設備上的問題。
我們的團隊負責對 Netflix 目錄進行編碼(和重新編碼),,并利用機器學習來深入了解該目錄,。我們將 Python 用于大約 50 個項目,如 vmaf 和 mezzfs,,我們使用名為 Archer 的媒體映射化簡平臺( media map-reduce platform)構建計算機視覺解決方案,,并在許多內(nèi)部項目中使用 Python,。我們還開源了一些工具來簡化 Python 項目的開發(fā) / 分發(fā),,比如 setupmeta 和 pickley,。
Python 是我們用于創(chuàng)建動畫和 VFX 內(nèi)容的所有主要應用程序的行業(yè)標準,,毫無疑問,,我們正在大量使用它,。我們與 Maya 和 Nuke 的所有集成都是用 Python 實現(xiàn)的,,而我們的 Shotgun 工具的大部分也是用 Python 實現(xiàn)的,。我們剛剛開始在云端中使用我們的工具,,并與其部署我們自己的許多定制的 Python AMI / 容器,。
內(nèi)容機器學習團隊廣泛使用 Python 來開發(fā)機器學習模型,,這些模型是預測所有內(nèi)容的受眾規(guī)模,、收視率和其他需求指標的核心。
Open Connect:https://openconnect./en/
bpython:https:///
nteract:https:///
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./en/latest/
pygenie:https://github.com/Netflix/pygenie
scrapbook:https://nteract-scrapbook./en/latest/
PyPika:https://pypika./en/latest/
PyArrow:https://arrow./docs/python/
RPy2:https://rpy2./en/version_2.8.x/
Plotly:https:///
vmaf:https://github.com/Netflix/vmaf/blob/master/resource/doc/references.md
mezzfs:https:///netflix-techblog/mezzfs-mounting-object-storage-in-netflixs-media-processing-platform-cda01c446ba
setupmeta:https:///project/setupmeta/
pickley:https:///project/pickley/
原文鏈接:
https:///netflix-techblog/python-at-netflix-bba45dae649e