Python na Netflix

Blog da Tecnologia Netflix em Netflix TechBlog Segue Abr 29 · 8 min ler

Por Pythonistas na Netflix, coordenado por Amjith Ramanujam e editado por Ellen Livengood

Como muitos de nós nos preparamos para ir para a PyCon, queríamos compartilhar uma amostra de como o Python é usado na Netflix. Usamos o Python durante todo o ciclo de vida do conteúdo, desde a decisão do conteúdo a ser financiado até a operação do CDN que serve o vídeo final para 148 milhões de membros. Usamos e contribuímos com muitos pacotes Python de código aberto, alguns dos quais são mencionados abaixo. Se algum destes interesses lhe interessa, confira o site de empregos ou encontre-nos na PyCon. Nós doamos alguns pôsteres da Netflix Originals para o Leilão PyLadies e esperamos ver todos vocês lá.

Abrir Conectar

O Open Connect é a rede de distribuição de conteúdo (CDN) da Netflix. Uma maneira fácil, embora imprecisa, de pensar sobre a infraestrutura da Netflix é que tudo o que acontece antes de você pressionar Reproduzir no seu controle remoto (por exemplo, você está conectado? Que plano você tem ?, para que possamos recomendar novos títulos para você (o que você quer assistir?) ocorre no Amazon Web Services (AWS), enquanto tudo o que acontece depois (ou seja, streaming de vídeo) ocorre na rede do Open Connect. O conteúdo é colocado na rede de servidores no Open Connect CDN o mais próximo possível do usuário final, melhorando a experiência de streaming para nossos clientes e reduzindo os custos para a Netflix e nossos parceiros ISP (Internet Service Provider).

Vários sistemas de software são necessários para projetar, construir e operar essa infraestrutura de CDN, e um número significativo deles é escrito em Python. Os dispositivos de rede que sustentam uma grande parte do CDN são principalmente gerenciados por aplicativos Python. Esses aplicativos rastreiam o inventário de nossos equipamentos de rede: quais dispositivos, de quais modelos, com quais componentes de hardware, estão localizados em quais sites. A configuração desses dispositivos é controlada por vários outros sistemas, incluindo a fonte da verdade, a aplicação de configurações aos dispositivos e o backup. A interação de dispositivos para a coleta de dados de funcionamento e outros dados operacionais é outro aplicativo Python. Python tem sido uma linguagem de programação popular no espaço de rede porque é uma linguagem intuitiva que permite aos engenheiros resolver rapidamente os problemas de rede. Posteriormente, muitas bibliotecas úteis são desenvolvidas, tornando a linguagem ainda mais desejável de aprender e usar.

Engenharia de Demanda

A Demand Engineering é responsável por Failovers Regionais , Distribuição de Tráfego, Operações de Capacidade e Eficiência de Frota da nuvem Netflix. Temos o orgulho de dizer que as ferramentas da nossa equipe são criadas principalmente em Python. O serviço que orquestra o failover usa numpy e scipy para executar análises numéricas, boto3 para fazer alterações em nossa infraestrutura da AWS, para executar cargas de trabalho assíncronas e envolvê-las em uma camada fina de APIs do Flask. A capacidade de inserir um shell bpython e improvisar salvou o dia mais de uma vez.

Somos usuários pesados dos notebooks da Jupyter e trabalhamos para analisar dados operacionais e ferramentas de visualização de protótipos que nos ajudam a detectar regressões de capacidade.

TESTEMUNHO

A equipe do CORE usa o Python em nosso trabalho analítico de alerta e estatística. Nós nos apoiamos em muitas das bibliotecas estatísticas e matemáticas (numpy, scipy, ruptures, pandas) para ajudar a automatizar a análise de milhares de sinais relacionados quando nossos sistemas de alerta indicam problemas. Desenvolvemos um sistema de correlação de séries temporais usado dentro e fora da equipe, bem como um sistema de trabalhadores distribuídos para paralelizar grandes quantidades de trabalho analítico para fornecer resultados rapidamente.

O Python também é uma ferramenta que normalmente usamos para tarefas de automação, exploração e limpeza de dados e como uma fonte conveniente para o trabalho de visualização.

Monitoramento, alerta e correção automática

A equipe do Insight Engineering é responsável por criar e operar as ferramentas para obter informações operacionais, alertas, diagnósticos e correção automática. Com o aumento da popularidade do Python, a equipe agora oferece suporte a clientes Python para a maioria de seus serviços. Um exemplo é a biblioteca cliente do Spectator Python, uma biblioteca para instrumentar código para registrar métricas de séries temporais dimensionais. Criamos bibliotecas Python para interagir com outros serviços no nível da plataforma Netflix. Além das bibliotecas, os produtos Winston e Bolt também são construídos usando frameworks Python (Gunicorn + Flask + Flask-RESTPlus).

Segurança da Informação

A equipe de segurança da informação usa o Python para atingir uma série de metas de alta alavancagem para a Netflix: automação de segurança, classificação de risco, correção automática e identificação de vulnerabilidades, para citar alguns. Tivemos várias fontes abertas de Python bem-sucedidas, incluindo o Security Monkey (o projeto de código aberto mais ativo da nossa equipe). Aproveitamos o Python para proteger nossos recursos de SSH usando o Bless . Nossa equipe de segurança de infraestrutura aproveita o Python para ajudar no ajuste de permissão do IAM usando o Repokid . Usamos o Python para ajudar a gerar certificados TLS usando o Lemur .

Alguns de nossos projetos mais recentes incluem o Prism: uma estrutura em lote para ajudar os engenheiros de segurança a avaliar a adoção de estradas pavimentadas, fatores de risco e identificar vulnerabilidades no código-fonte. Atualmente, fornecemos bibliotecas Python e Ruby para Prism. A ferramenta de triagem forense Diffy é escrita inteiramente em Python. Também usamos o Python para detectar dados sensíveis usando o Lanius.

Algoritmos de Personalização

Usamos o Python extensivamente em nossa Infraestrutura de Aprendizado de Máquina de Personalização para treinar alguns dos modelos de Aprendizado de Máquina para aspectos-chave da experiência da Netflix: dos nossos algoritmos de recomendação à personalização de arte- final para algoritmos de marketing . Por exemplo, alguns algoritmos usam TensorFlow, Keras e PyTorch para aprender Redes Neurais Profundas, XGBoost e LightGBM para aprender Árvores de Decisão Aprimoradas por Gradiente ou a pilha científica mais ampla em Python (por exemplo, numpy, scipy, sklearn, matplotlib, pandas, cvxpy). Como estamos constantemente experimentando novas abordagens, usamos os notebooks da Jupyter para impulsionar muitos de nossos experimentos. Também desenvolvemos várias bibliotecas de nível superior para ajudar a integrá-las ao restante de nosso ecossistema (por exemplo, acesso a dados, registro de fatos e extração de recursos, avaliação de modelos e publicação).

Infraestrutura de Aprendizado de Máquina

Além da personalização, a Netflix aplica o aprendizado de máquina a centenas de casos de uso em toda a empresa. Muitos desses aplicativos são fornecidos pelo Metaflow , uma estrutura Python que facilita a execução de projetos de ML desde o estágio do protótipo até a produção.

O Metaflow supera os limites do Python: aproveitamos o código Python bem paralelizado e otimizado para buscar dados em 10 Gbps, lidar com centenas de milhões de pontos de dados na memória e orquestrar a computação em dezenas de milhares de núcleos de CPU.

Cadernos

Somos ávidos usuários de notebooks Jupyter na Netflix e já escrevemos sobre as razões e a natureza desse investimento antes.

Mas o Python desempenha um grande papel na forma como fornecemos esses serviços. O Python é uma linguagem primária quando precisamos desenvolver, depurar, explorar e prototipar diferentes interações com o ecossistema Jupyter. Usamos o Python para criar extensões personalizadas para o servidor Jupyter que nos permite gerenciar tarefas como registro, arquivamento, publicação e clonagem de notebooks em nome de nossos usuários.
Fornecemos muitos tipos de Python aos nossos usuários através de diferentes kernels Jupyter e gerenciamos a implementação dessas especificações de kernel usando Python.

Orquestração

A equipe de Big Data Orchestration é responsável por fornecer todos os serviços e ferramentas para agendar e executar pipelines ETL e Adhoc.

Muitos dos componentes do serviço de orquestração são escritos em Python. Começando com nosso agendador, que usa os notebooks Jupyter com o moinho de papel para fornecer tipos de trabalho com templates (Spark, Presto,…). Isso permite que nossos usuários tenham uma maneira padronizada e fácil de expressar o trabalho que precisa ser executado. Você pode ver alguns detalhes mais profundos sobre o assunto aqui . Temos usado notebooks como runbooks reais para situações em que a intervenção humana é necessária – por exemplo: para reiniciar tudo o que falhou na última hora.

Internamente, também construímos uma plataforma orientada a eventos que é totalmente escrita em Python. Criamos fluxos de eventos a partir de vários sistemas que são unificados em uma única ferramenta. Isso nos permite definir condições para filtrar eventos e ações para reagir ou rotea-los. Como resultado disso, conseguimos separar microsserviços e obter visibilidade de tudo o que acontece na plataforma de dados.

Nossa equipe também construiu o cliente pygenie, que faz interface com o Genie , um serviço federado de execução de tarefas. Internamente, temos extensões adicionais para essa biblioteca que aplicam convenções de negócios e integram-se à plataforma Netflix. Essas bibliotecas são a principal maneira pela qual os usuários interagem de maneira programática com o trabalho na plataforma Big Data.

Finalmente, tem sido o compromisso de nossa equipe contribuir para projetos de código aberto de papel e scrapbook . Nosso trabalho tem sido tanto para nossos casos de uso externos quanto para os nossos. Esses esforços vêm ganhando muita força na comunidade de código aberto e estamos felizes em poder contribuir para esses projetos compartilhados.

Plataforma de experimentação

A equipe de computação científica para experimentação está criando uma plataforma para cientistas e engenheiros analisarem os testes AB e outros experimentos. Cientistas e engenheiros podem contribuir com inovações em três frentes, dados, estatísticas e visualizações.

O Metrics Repo é um framework Python baseado no PyPika que permite aos colaboradores escrever consultas SQL parametrizadas e reutilizáveis. Ele serve como um ponto de entrada em qualquer nova análise.

A biblioteca Causal Models é uma estrutura Python & R para os cientistas contribuírem com novos modelos de inferência causal. Ele aproveita o PyArrow e o RPy2 para que as estatísticas possam ser calculadas sem problemas em qualquer idioma.

A biblioteca Visualizations é baseada em Plotly . Como Plotly é uma especificação de visualização amplamente adotada, há uma variedade de ferramentas que permitem aos colaboradores produzir uma saída que seja consumível por nossas plataformas.

Ecossistema de parceiros

O grupo Partner Ecosystem está expandindo seu uso do Python para testar aplicativos Netflix em dispositivos. O Python está formando o núcleo de uma nova infra-estrutura de CI, incluindo o controle de nossos servidores de orquestração, o controle de Spinnaker, a consulta e filtragem de casos de teste e o agendamento de execuções de teste em dispositivos e contêineres. Análise adicional de pós-execução está sendo feita em Python usando o TensorFlow para determinar quais testes são mais prováveis de mostrar problemas em quais dispositivos.

Codificação de vídeo e engenharia de nuvem de mídia

Nossa equipe cuida da codificação (e recodificação) do catálogo Netflix, além de alavancar o aprendizado de máquina para obter insights sobre esse catálogo.
Usamos o Python para ~ 50 projetos, como
vmaf e mezzfs , construímos soluções de visão computacional usando uma plataforma de redução de mapa de mídia chamada Archer , e usamos o Python para muitos projetos internos.
Também abrimos algumas ferramentas para facilitar o desenvolvimento / distribuição de projetos em Python, como
setupmeta e pickley .

Animação Netflix e NVFX

O Python é o padrão da indústria para todos os principais aplicativos que usamos para criar conteúdo Animado e VFX, portanto, é desnecessário dizer que o estamos usando muito intensamente. Todas as nossas integrações com Maya e Nuke estão em Python, e a maior parte de nossas ferramentas Shotgun também estão em Python. Estamos apenas começando a usar nossas ferramentas na nuvem e prevemos a implementação de muitos de nossos próprios AMIs / contêineres Python personalizados.

Aprendizagem de Máquinas de Conteúdo, Ciências e Análises

A equipe de Aprendizado de Máquina de Conteúdo usa o Python extensivamente para o desenvolvimento de modelos de aprendizado de máquina que são o núcleo da previsão do tamanho do público-alvo, visualizações e outras métricas de demanda para todo o conteúdo.