Como a Netflix usa Python



Como muitos de nós estamos nos preparando para a conferência PyCon, queríamos falar um pouco sobre como o Python é usado no Netflix. Usamos o Python durante todo o ciclo de vida: desde decidir quais séries financiar e terminar com o trabalho da CDN para enviar vídeos para 148 milhões de usuários. Estamos contribuindo para muitos pacotes Python de código aberto, alguns dos quais são mencionados abaixo. Se algo lhe interessar, consulte nosso site de vagas ou procure-nos no PyCon.

Conexão aberta


O Open Connect é a rede de entrega de conteúdo da Netflix (CDN). Uma maneira simples, embora imprecisa, de apresentar a infraestrutura da Netflix é a seguinte: tudo o que acontece antes de você pressionar o botão Reproduzir no controle remoto (por exemplo, fazer login, determinar um plano tarifário, sistema de recomendação, selecionar filmes) funciona no Amazon Web Services (AWS) , e tudo o que acontece depois (por exemplo, streaming de vídeo) funciona por meio do Open Connect. O conteúdo é hospedado na rede do servidor Open Connect CDN o mais próximo possível do usuário final, a fim de melhorar a qualidade da visualização para os clientes e reduzir os custos para a Netflix e nossos parceiros, provedores de Internet.

São necessários vários sistemas de software para projetar, desenvolver e operar CDNs, e muitos deles são escritos em Python. Os dispositivos de rede baseados em CDN são controlados principalmente por aplicativos Python. Esses aplicativos monitoram o status dos equipamentos de rede: quais dispositivos são usados, quais modelos, com quais componentes de hardware, onde estão localizados. A configuração desses dispositivos é controlada por vários outros sistemas, incluindo a "fonte da verdade", aplicativos de configuração de dispositivos e backups. A interação de dispositivos para coletar dados de integridade e outros dados operacionais é outro aplicativo Python. O Python há muito tempo é uma linguagem de programação popular na Web porque é uma linguagem intuitiva que permite resolver rapidamente problemas de rede. Muitas bibliotecas úteis foram desenvolvidas para tornar o idioma ainda mais adequado para aprendizado e uso.

Engenharia de demanda


A Demand Engineering é responsável por lidar com falhas regionais , distribuição de tráfego, operações de largura de banda e desempenho do servidor na nuvem Netflix. Podemos dizer com orgulho que nossas ferramentas são construídas principalmente no Python. O serviço de failover usa numpy e scipy para análise numérica, boto3 para fazer alterações na infraestrutura da AWS, rq para executar cargas de trabalho assíncronas, tudo envolto em uma fina camada da API do Flask. A capacidade de sair com falha no shell bpython e improvisar mais de uma vez salvou a situação.

Utilizamos ativamente os Jupyter Notebooks e o nteract para analisar dados operacionais e protótipo de ferramentas de visualização para detectar regressões de capacidade.

NÚCLEO


A equipe do CORE usa o Python para analisar estatísticas e emitir alertas. Contamos com muitas bibliotecas estatísticas e matemáticas (numpy, scipy, rupturas, pandas) para automatizar a análise de 1000 sinais relacionados quando os sistemas de aviso indicam problemas. Desenvolvemos um sistema de correlação de séries temporais usado dentro e fora da equipe e um sistema de trabalho distribuído para paralelizar uma grande quantidade de trabalho analítico para obter resultados rápidos.

Também costumamos usar o Python para tarefas de automação, pesquisa e filtragem de dados e como uma ferramenta de visualização conveniente.

Monitoramento, alerta e recuperação automática


A equipe da Insight Engineering é responsável pelo desenvolvimento e operação de ferramentas para o rápido reconhecimento de problemas, alertas, diagnósticos e correções automáticas. Com a crescente popularidade do Python, a equipe agora oferece suporte a clientes Python para a maioria de seus serviços. Um exemplo é a biblioteca do cliente Spectator para código que registra métricas dimensionais de séries temporais. Criamos bibliotecas Python para interagir com outros serviços na plataforma Netflix. Além das bibliotecas, os produtos Winston e Bolt são criados usando estruturas Python (Gunicorn + Flask + Flask-RESTPlus).

Segurança da informação


A equipe de segurança da informação usa o Python para várias tarefas importantes, incluindo automação de segurança, classificação de riscos, identificação e correção automática de vulnerabilidades. Publicamos o código fonte de vários produtos de sucesso, incluindo o Security Monkey (nosso projeto de código aberto mais ativo). Python é usado para proteger nossos recursos SSH com o Bless . A equipe de segurança da infraestrutura usa o Python para configurar permissões do IAM usando o Repokid . Os scripts Python ajudam a gerar certificados TLS no Lemur .

Alguns de nossos projetos recentes incluem o Prism: uma estrutura em lote que ajuda os engenheiros de segurança a analisar o estado da infraestrutura e a identificar fatores de risco e vulnerabilidades no código-fonte. Atualmente, fornecemos bibliotecas Python e Ruby para o Prism. A ferramenta forense do Diffy (forense do computador) é completamente escrita em Python. Também usamos o Python para descobrir dados confidenciais usando o Lanius.

Algoritmos de personalização


Fazemos amplo uso do Python na estrutura de aprendizado de máquina para personalização . Alguns modelos são ensinados aqui que fornecem aspectos principais da funcionalidade Netflix: de algoritmos de recomendação a abranger algoritmos de seleção e marketing . Por exemplo, alguns algoritmos usam TensorFlow, Keras e PyTorch para aprender redes neurais profundas, XGBoost e LightGBM para aprender árvores de decisão com aumento de gradiente ou uma pilha Python mais ampla (por exemplo, bibliotecas numpy, scipy, sklearn, matplotlib, pandas, cvxpy). Como estamos constantemente tentando novas abordagens, em muitos experimentos usamos os notebooks Jupyter. Também desenvolvemos várias bibliotecas de nível superior para integrar notebooks com o restante de nosso ecossistema (por exemplo, acesso a dados, registro de fatos e extração de atributos, avaliação de modelos e publicação).

Infraestrutura de Machine Learning


Além da personalização, a Netflix aplica o aprendizado de máquina a centenas de outras tarefas em toda a empresa. Muitos desses aplicativos são executados no Metaflow, a plataforma Python que facilita a execução de projetos de ML e os executa do estágio de protótipo à produção.

O Metaflow ultrapassa os limites do Python: usamos código Python otimizado e paralelizado para extrair dados a 10 Gb / s, processar centenas de milhões de pontos de dados na memória e organizar cálculos em dezenas de milhares de núcleos de CPU.

Blocos de notas


Nós da Netflix somos usuários ávidos de notebooks Jupyter e já escrevemos sobre as razões e a natureza desses investimentos .

Mas o Python desempenha um papel enorme na forma como esses serviços são fornecidos. É o idioma principal para o desenvolvimento, depuração, pesquisa e criação de protótipos de várias interações com o ecossistema Jupyter. Usamos o Python para criar extensões personalizadas para o servidor Jupyter, o que nos permite gerenciar tarefas como registro, arquivamento, publicação e clonagem de blocos de anotações em nome dos usuários. Fornecemos aos nossos usuários muitas opções no Python através de vários kernels Jupyter e controlamos a implantação dessas especificações do kernel usando o Python também.

Orquestração


A equipe de orquestração do Big Data é responsável por fornecer todos os serviços e ferramentas para planejar e executar os pipelines ETL e Adhoc.

Muitos componentes de orquestração são escritos em Python. Começando com um planejador que usa os blocos de notas Jupyter e papermill para tipos de trabalho de modelo (Spark, Presto ...). Isso fornece aos usuários uma maneira fácil e padronizada de expressar o trabalho que precisa ser realizado. Aqui você pode ler mais sobre isso. Usamos notebooks como listas reais de operações em produção (“runbooks”) em situações em que é necessária intervenção humana, por exemplo, reiniciando tudo o que caiu na última hora.

Para uso interno, criamos uma plataforma orientada a eventos totalmente escrita em Python. Ele recebe fluxos de eventos de vários sistemas combinados em uma única ferramenta. Isso permite determinar as condições para filtrar eventos, responder a eles ou rotear. Como resultado, conseguimos isolar microsserviços e garantir transparência em tudo o que acontece na plataforma de dados.

Nossa equipe também desenvolveu o cliente pygenie , que interage com o serviço de conclusão de trabalho federado da Genie . Internamente, temos extensões adicionais a essa biblioteca que aplicam contratos comerciais e são integradas à plataforma Netflix. Essas bibliotecas são a principal maneira de os usuários interagirem programaticamente com a plataforma de big data.

Por fim, nossa equipe contribuiu para os projetos de código aberto papermill e scrapbook : adicionamos código para nossos próprios casos de uso e externos. Nossos esforços são bem recebidos na comunidade de código aberto, pela qual estamos muito felizes.

Plataforma experimental


A equipe de cálculos científicos cria uma plataforma para experimentos: testes AB e outros. Cientistas e engenheiros podem experimentar a inovação em três áreas: dados, estatísticas e visualização.

Nosso repositório de métricas é uma plataforma Python baseada em PyPika que permite escrever consultas SQL parametrizadas reutilizáveis. Este é o ponto de entrada para qualquer nova análise.

A biblioteca de modelos causais de modelos causais é baseada em Python e R: aqui, os cientistas têm a oportunidade de explorar novos modelos causais. Ele usa PyArrow e RPy2, para que as estatísticas sejam facilmente calculadas em qualquer idioma.

A biblioteca de visualização é baseada em Plotly . Como Plotly é uma especificação comum para visualizações, existem muitas ferramentas de saída que acessam nossas plataformas.

Ecossistema de afiliados


A equipe do ecossistema de parceiros usa o Python para testar aplicativos da Netflix em dispositivos. O Python é o núcleo da nova infraestrutura de integração contínua, incluindo o gerenciamento de nossos servidores de orquestração, o Spinnaker, as solicitações e filtros do conjunto de testes e o planejamento de execuções de teste em dispositivos e contêineres. Análises pós-lançamento adicionais são realizadas no Python usando o TensorFlow para determinar quais testes têm maior probabilidade de causar problemas em quais dispositivos.

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


Nossa equipe cuida da codificação (e transcodificação) do catálogo da Netflix e também usa o aprendizado de máquina para analisar esse catálogo.

Usamos o Python em cerca de 50 projetos, como vmaf e mezzfs , criamos soluções de visão computacional usando a plataforma de redução de mapas chamada Archer e usamos o Python para muitos projetos internos.

Também abrimos várias ferramentas para facilitar o desenvolvimento / distribuição de projetos Python, como setupmeta e pickley .

Animação Netflix e NVFX


O Python é um padrão do setor para todos os principais aplicativos que usamos para criar conteúdo animado e VFX; portanto, é óbvio que o usamos intensivamente. Todas as nossas integrações com o Maya e o Nuke são feitas em Python e a maior parte de nossas ferramentas Shotgun também. Acabamos de começar a criar ferramentas na nuvem e vamos implantar muitos containers / AMI / Python personalizados lá.

Aprendizado de máquina em conteúdo, ciência e análise


A equipe de aprendizado de máquina no conteúdo faz uso extensivo do Python para desenvolver modelos de aprendizado de máquina que são essenciais para prever o tamanho do público, visualizações e outras métricas para todo o conteúdo.

Source: https://habr.com/ru/post/pt450870/


All Articles