NetflixがPythonを使用する方法





私たちの多くがPyCon会議の準備をしているので、NetflixでPythonがどのように使用されているかについて少し話したいと思いました。 私たちはライフサイクル全体を通してPythonを使用しています。どのシリーズを資金調達するかを決定し、CDNで終了してビデオを1億4800万人のユーザーに出荷します。 私たちは多くのオープンソースPythonパッケージに貢献しています。そのうちのいくつかを以下に示します。 何か興味があれば、 空室サイトをご覧になるか、PyConで私たちを探してください。



オープン接続



Open Connectは、Netflixコンテンツ配信ネットワーク(CDN)です。 Netflixインフラストラクチャを表示するための単純で不正確な方法は次のとおりです。リモートコントロールの[再生]ボタンを押す(ログイン、料金プランの決定、レコメンデーションシステム、映画の選択など)の前に発生するすべてがAmazon Web Services(AWS)で機能します、その後発生するすべてのこと(つまり、ストリーミングビデオ)はOpen Connectを通じて機能します。 コンテンツは、お客様の視聴体験を改善し、Netflixおよび当社のパートナーであるインターネットプロバイダーのコストを削減するために、可能な限りエンドユーザーに近いOpen Connect CDNサーバーネットワークでホストされます。



CDNの設計、開発、および操作にはさまざまなソフトウェアシステムが必要であり、それらの多くはPythonで記述されています。 CDNベースのネットワークデバイスは、主にPythonアプリケーションによって制御されます。 このようなアプリケーションは、ネットワーク機器のステータスを監視します。どのデバイスが使用されているか、どのモデル、どのハードウェアコンポーネント、どこにあるかなどです。 これらのデバイスの構成は、「真実の源」、デバイス構成アプリケーション、バックアップなど、いくつかの他のシステムによって制御されます。 健康データやその他の運用データを収集するためのデバイスの相互作用は、別のPythonアプリケーションです。 Pythonは、ネットワークの問題をすばやく解決できる直感的な言語であるため、長い間Webで人気のあるプログラミング言語です。 言語を学習と使用にさらに適したものにする多くの便利なライブラリが開発されています。



デマンドエンジニアリング



デマンドエンジニアリングは、Netflixクラウドでの地域の障害 、トラフィックの分散、帯域幅操作、サーバーパフォーマンスの処理を担当します。 私たちのツールは主にPythonで構築されていると誇らしげに言うことができます。 フェールオーバーサービスは、数値分析にnumpyとscipyを使用し、AWSインフラストラクチャに変更を加えるためにboto3を使用し、非同期ワークロードを実行するためにrqを使用します。これらはすべて薄いFlask APIレイヤーにラップされます。 bpythonシェルで障害が発生した場合に脱退し、複数回即興で演奏することで状況を保存しました。



Jupyterノートブックとnteractを積極的に使用して、運用データを分析し、 視覚化ツールのプロトタイプを作成して容量の低下を検出します。



コア



COREチームはPythonを使用して統計を分析し、アラートを発行します。 警告システムが問題を示している場合、1000の関連信号の分析を自動化するために、多くの統計および数学ライブラリ(numpy、scipy、ruptures、pandas)に依存しています。 チーム内外で使用される時系列相関システムと、大量の分析作業を並列化して迅速な結果を得るための分散作業システムを開発しました。



また、一般的にPythonを自動化、研究、データフィルタリングタスクに使用し、便利な視覚化ツールとして使用します。



監視、警告、自動回復



Insight Engineeringチームは、問題、アラート、診断、および自動修正を迅速に認識するためのツールの開発と運用を担当しています。 Pythonの人気が高まるにつれて、チームは現在、ほとんどのサービスでPythonクライアントをサポートしています。 1つの例は、次元の時系列メトリックを記録するコードのSpectatorクライアントライブラリです。 Netflixプラットフォーム上の他のサービスとやり取りするPythonライブラリを作成します。 ライブラリに加えて、 WinstonおよびBolt製品はPythonフレームワーク(Gunicorn + Flask + Flask-RESTPlus)を使用して構築されます。



情報セキュリティ



情報セキュリティチームは、セキュリティの自動化、リスクの分類、脆弱性の特定と自動修正など、多くの重要なタスクにPythonを使用しています。 Security Monkey (最もアクティブなオープンソースプロジェクト)など、いくつかの成功した製品のソースコードを公開しました。 PythonはBlessで SSHリソースを保護するために使用されます。 インフラストラクチャセキュリティチームはPythonを使用して、 Repokidを使用してIAMアクセス許可を構成します。 Pythonスクリプトは、 Lemurで TLS証明書を生成するのに役立ちます。



最近のプロジェクトの一部には、セキュリティエンジニアがインフラストラクチャの状態を分析し、ソースコードのリスク要因と脆弱性を特定するのに役立つバッチフレームワークであるPrismが含まれます。 現在、Prism用のPythonおよびRubyライブラリを提供しています。 Diffy Forensics(コンピューターフォレンジック) ツールは 、Pythonで完全に記述されています。 また、Pythonを使用して、Laniusを使用して機密データを検出します。



パーソナライズアルゴリズム



パーソナライズのための機械学習フレームワークでPythonを広範囲に使用しています。 ここでは、 推奨アルゴリズムから選択 アルゴリズムマーケティングアルゴリズムまで、Netflix機能の重要な側面を提供するモデルをいくつか紹介します 。 たとえば、一部のアルゴリズムは、ディープニューラルネットワークの学習にTensorFlow、KerasおよびPyTorchを使用し、勾配ブースティングまたはより広いPythonスタック(numpy、scipy、sklearnライブラリ、matplotlib、pandas、cvxpyライブラリなど)を使用した決定木の学習にXGBoostおよびLightGBMを使用します。 私たちは常に新しいアプローチを試みているため、多くの実験ではJupyterノートブックを使用しています。 また、ノートブックを他のエコシステムと統合するための多くの高レベルのライブラリを開発しました(データへのアクセス、ファクトの登録、属性の抽出、モデルの評価、公開など)。



機械学習インフラストラクチャ



Netflixは、パーソナライズに加えて、機械学習を会社全体の他の何百ものタスクに適用します。 これらのアプリケーションの多くは、MLプロジェクトの実行とプロトタイプ段階から実稼働までを簡単に実行できるPythonプラットフォームであるMetaflowで実行されます。



MetaflowはPythonの境界を押し広げます:並列化および最適化されたPythonコードを使用して10 Gb / sでデータを抽出し、メモリ内の数億のデータポイントを処理し、数万のCPUコアで計算を編成します。



メモ帳



Netflixの私たちはJupyterノートブックの熱心なユーザーであり、すでにこれらの投資の理由と性質について書いています。



しかし、Pythonはこれらのサービスの提供方法に大きな役割を果たします。 これは、Jupyterエコシステムとのさまざまな相互作用を開発、デバッグ、調査、およびプロトタイプ化するための主要言語です。 Pythonを使用してJupyterサーバーのカスタム拡張機能を作成します。これにより、ユーザーに代わって、ノートブックのログ、アーカイブ、公開、複製などのタスクを管理できます。 さまざまなJupyterカーネルを通じてPythonの多くのオプションをユーザーに提供し、Pythonを使用してこれらのカーネル仕様の展開も制御します。



オーケストレーション



ビッグデータオーケストレーションチームは、ETLおよびアドホックパイプラインを計画および実行するためのすべてのサービスとツールを提供する責任があります。



多くのオーケストレーションコンポーネントはPythonで記述されています。 テンプレートジョブタイプ(Spark、Prestoなど)にJupyter製紙工場のメモ帳を使用するスケジューラーから開始します。 これにより、ユーザーは標準化された簡単な方法で、実行する必要がある作業を表現できます。 ここで詳細を読むことができます。 たとえば、過去1時間に落ちたものすべてを再起動するなど、人間の介入が必要な状況では、実稼働環境の実際のリスト(「ランブック」)としてノートブックを使用しました。



内部使用のために、完全にPythonで記述されたイベント駆動型プラットフォームを構築しました。 単一のツールに結合された多数のシステムからイベントストリームを受け取ります。 これにより、イベントのフィルタリング、それらへの応答、またはルーティングの条件を決定できます。 その結果、マイクロサービスを分離し、データプラットフォームで発生するすべてのことの透明性を確保することができました。



私たちのチームは、 Genieフェデレーションジョブ完了サービスとやり取りするpygenieクライアントも開発しました 。 内部的には、ビジネス契約を適用し、Netflixプラットフォームと統合されているこのライブラリに追加の拡張機能があります。 これらのライブラリは、ユーザーがプログラムでビッグデータプラットフォームと対話するための主要な方法です。



最後に、私たちのチームは、オープンソースプロジェクトpapermillscrapbookに貢献しました。私たちは、私たち自身と外部の両方のユースケースのコードを追加しました。 私たちの努力はオープンソースコミュニティで高く評価されており、とても喜んでいます。



実験プラットフォーム



科学計算チームは、実験のためのプラットフォームを作成します:ABテストなど。 科学者とエンジニアは、データ、統計、視覚化の3つの分野でイノベーションを試すことができます。



メトリックリポジトリは、 PyPikaベースのPythonプラットフォームであり、再利用可能なパラメーター化されたSQLクエリを作成できます。 これは、新しい分析のエントリポイントです。



因果モデルの因果モデルライブラリはPythonとRに基づいています。ここで、科学者は新しい因果モデルを探索する機会を得ます。 PyArrowとRPy2を使用するため、どの言語でも統計を簡単に計算できます。



視覚化ライブラリはPlotlyに基づいています 。 Plotlyは視覚化の一般的な仕様であるため、プラットフォームに対応する多くの出力ツールがあります。



アフィリエイトエコシステム



パートナーエコシステムチームはPythonを使用して、デバイス上のNetflixアプリケーションをテストします。 Pythonは、オーケストレーションサーバーの管理、Spinnakerの管理、テストスイートのクエリとフィルター処理、デバイスおよびコンテナーでのテスト実行の計画など、新しい継続的統合インフラストラクチャの中核を形成します。 TensorFlowを使用してPythonで追加の起動後分析を実行し、どのテストがどのデバイスで問題を引き起こす可能性が最も高いかを判断します。



ビデオコーディングとメディアクラウド開発



私たちのチームは、Netflixカタログのコーディング(およびトランスコーディング)を担当し、機械学習を使用してこのカタログを分析します。



vmafmezzfsなどの約50のプロジェクトでPythonを使用し、 Archerと呼ばれるmap-reduceプラットフォームを使用してコンピュータービジョンソリューションを作成し、多くの内部プロジェクトでPythonを使用しています。



また、 setupmetapickleyなど、Pythonプロジェクトの開発/配布を容易にするいくつかのツールを開きました



NetflixおよびNVFXアニメーション



Pythonは、アニメーションコンテンツやVFXコンテンツを作成するために使用するすべての主要なアプリケーションの業界標準であるため、頻繁に使用することは言うまでもありません。 MayaおよびNukeとの統合はすべてPythonで行われ、Shotgunツールの大部分も同様です。 クラウドでツールの構築を開始したばかりで、そこに多くのカスタムPython AMI /コンテナをデプロイします。



コンテンツ、科学、分析の機械学習



コンテンツの機械学習チームは、Pythonを広範に使用して、すべてのコンテンツの視聴者の規模、ビュー、およびその他のメトリックを予測する中核となる機械学習モデルを開発します。



All Articles