Construindo e dimensionando a linhagem de dados na Netflix para melhorar a confiabilidade e a eficiência da infraestrutura de dados

Blog da Tecnologia Netflix em Netflix TechBlog Segue 25 de março · 8 min ler

Por: Di Lin , Girish Lingappa , Jitender Aswani

Imagine- se no papel de um tomador de decisões inspirado em dados, olhando para uma métrica em um painel prestes a tomar uma decisão crítica, mas fazendo uma pergunta: "Posso fazer um teste para entender quais dados estão por trás dessa métrica?"

Agora, imagine-se no papel de um engenheiro de software responsável por um micro-serviço que publica dados consumidos por poucos serviços críticos voltados ao cliente (por exemplo, faturamento). Você está prestes a fazer alterações estruturais nos dados e deseja saber quem e o que será enviado a seu serviço.

Finalmente, imagine-se no papel de um engenheiro de confiabilidade de plataforma de dados encarregado de fornecer lead time avançado para proprietários de pipeline de dados (ETL), identificando proativamente os problemas de upstream para suas tarefas de ETL. Você está projetando um sistema de aprendizado para prever violações do Acordo de Nível de Serviço (SLA) e gostaria de incluir todas as dependências upstream e estados históricos correspondentes.

Na Netflix, as histórias de usuários centradas no entendimento das dependências de dados compartilhadas acima e inúmeras outras nas áreas de assunto Detecção e Limpeza de Dados, Retenção e Eficiência de Dados, Integridade de Dados, Atribuição de Custos e Confiabilidade de Plataforma inspiraram a Engenharia de Dados e Infraestrutura (DEI) a vislumbrar um abrangente sistema de linhagem de dados e embarcar em uma jornada de desenvolvimento há alguns anos. Adotamos a seguinte declaração de missão para orientar nossos investimentos:

“Fornecer um sistema de linhagem de dados completo e preciso, permitindo que os tomadores de decisão ganhem momentos de verdade.”

No restante deste blog, a) abordaremos a complexidade do cenário de nuvem do Netflix, b) discutiremos os objetivos de design de linhagem, a arquitetura de ingestão e o modelo de dados correspondente, c) compartilharemos os desafios enfrentados e os aprendizados que aprendemos ao longo do way, ed) encerre com "o que vem a seguir" nesta jornada.

Paisagem de dados do Netflix

Liberdade e Responsabilidade (F & R) é o eixo central da cultura da Netflix, capacitando as equipes a agir rapidamente para entregar inovação e operar com liberdade para satisfazer sua missão. Equipes centrais de engenharia fornecem caminhos pavimentados (opções seguras, aprovadas e com suporte) e trilhos de proteção para ajudar a reduzir a variação nas opções disponíveis para ferramentas e tecnologias para suportar o desenvolvimento de arquiteturas técnicas escalonáveis. No entanto, o cenário de dados do Netflix (veja abaixo) é complexo e muitas equipes colaboram de forma eficaz para compartilhar a responsabilidade do nosso gerenciamento do sistema de dados. Portanto, construir um sistema de linhagem de dados completo e preciso para mapear todos os artefatos de dados (incluindo repositórios de dados em movimento e em repouso, tópicos, aplicativos, relatórios e painéis do Kafka, consultas de análise interativas e ad-hoc, ML e experimentação modelos) é uma tarefa monumental e requer uma arquitetura escalável, design robusto, uma forte equipe de engenharia e, acima de tudo, incrível colaboração interfuncional.

Paisagem de dados

Objetivos de Design

No estágio inicial do projeto, definimos um conjunto de metas de design para ajudar a orientar a arquitetura e o trabalho de desenvolvimento da linhagem de dados a fim de oferecer um mapeamento de sistema de linhagem completo, preciso, confiável e escalável para o diversificado panorama de dados da Netflix. Vamos rever alguns desses princípios:

  • Garantir a integridade dos dados – Capture com precisão o relacionamento em dados de fontes de dados distintas para estabelecer confiança com os usuários, porque sem dados de linhagem de confiança absoluta pode fazer mais mal do que bem.
  • Habilite a integração contínua – Projete o sistema para integração com uma lista crescente de ferramentas e plataformas de dados, incluindo aquelas que não possuem a instrumentação de metadados incorporada para derivar a linhagem de dados.
  • Projetar um modelo de dados flexível – Representa uma ampla gama de artefatos de dados e relacionamentos entre eles usando um modelo de dados genérico para permitir uma ampla variedade de casos de uso de negócios.

Ingestão em escala

A movimentação de dados na Netflix não segue necessariamente um único caminho pavimentado, pois os engenheiros têm a liberdade de escolher (e a responsabilidade de gerenciar) as melhores ferramentas e plataformas de dados disponíveis para atingir suas metas de negócios. Como resultado, não existe uma única fonte de verdade consolidada e centralizada que possa ser aproveitada para derivar a verdade da linhagem de dados. Portanto, a abordagem de ingestão para linhagem de dados foi projetada para funcionar com muitas fontes de dados diferentes.

Nossa abordagem de ingestão de dados, em poucas palavras, é classificada de maneira geral em dois grupos: push ou pull. Hoje, estamos operando usando um modelo de tração pesada. Neste modelo, varremos os logs e metadados do sistema gerados por vários mecanismos de computação para coletar dados de linhagem correspondentes. Por exemplo, podemos alavancar inviso para listar trabalhos de porco e batom para buscar tabelas e colunas de esses scripts de porco. Para o mecanismo de cálculo de ignição, aproveitamos as informações do plano de ignição e, para o Snowflake, as tabelas administrativas capturam as mesmas informações. Além disso, derivamos informações de linhagem de tarefas de ETL agendadas, extraindo definições de fluxo de trabalho e metadados de tempo de execução usando APIs do Agendador do Meson .

No paradigma do modelo push, várias ferramentas de plataforma, como camada de transporte de dados, ferramentas de relatório e Presto, publicarão eventos de linhagem em um conjunto de tópicos relacionados à linhagem Kafka, tornando a data de ingestão relativamente fácil de escalar, melhorando a escalabilidade do sistema de linhagem de dados. .

Enriquecimento de dados

Os dados de linhagem, quando enriquecidos com metadados de entidade e relacionamentos associados, tornam-se mais valiosos para entregar um rico conjunto de casos de negócios. Utilizamos os dados do Metacat , nosso armazenamento e serviço de metadados internos, para enriquecer os dados de linhagem com metadados de tabela adicionais. Também aproveitamos metadados de outra ferramenta interna, Genie , trabalho interno e gerenciador de recursos, para adicionar metadados de trabalho (como proprietário do trabalho, cluster, metadados do agendador) nos dados de linhagem. Os pipelines de ingestão (ETL) transformam conjuntos de dados enriquecidos em um modelo de dados comum (design baseado em uma estrutura de gráfico armazenada como vértices e arestas) para atender casos de uso de linhagem. Os dados de linhagem, juntamente com as informações enriquecidas, são acessados por meio de várias interfaces, usando o SQL no warehouse e no Gremlin, e um Serviço de Linhagem REST em um banco de dados gráfico preenchido a partir dos dados de linhagem discutidos anteriormente neste parágrafo.

Desafios

Nós enfrentamos um conjunto diversificado de desafios espalhados por várias camadas no sistema. A diversidade de dados da Netflix tornou difícil capturar todos os dados corretos e adequá-los a um modelo de dados comum. Além disso, a camada de processamento foi projetada para abordar vários padrões de ingestão adicionados à complexidade operacional. O Spark é o principal mecanismo de computação de grandes volumes de dados da Netflix e, com praticamente todas as atualizações do Spark, o plano de ignição mudou, gerando surpresas contínuas e inesperadas para nós.

Definimos um modelo de dados genérico para armazenar informações de linhagem e agora conformamos a entidade e os relacionamentos associados de várias origens de dados a esse modelo de dados. Estamos carregando os dados de linhagem em um banco de dados gráfico para permitir a integração perfeita com um serviço de linhagem de dados REST para tratar dos casos de uso de negócios. Para melhorar a precisão dos dados, decidimos aproveitar os logs de acesso do AWS S3 para identificar relacionamentos de entidades que não foram capturados pelo nosso processo tradicional de processamento.

Continuamos a abordar os desafios de ingestão adotando uma abordagem de instrumentação de nível de sistema para faíscas, outros mecanismos de computação e ferramentas de transporte de dados. Estamos projetando uma camada CRUD e expondo-a como APIs REST para facilitar a publicação de dados de linhagem em nossos pipelines.

Estamos adotando um sistema de linhagem de dados maduro e abrangente e agora ampliando sua cobertura muito além dos reinos de data warehouse tradicionais com o objetivo de construir uma linhagem de dados universal para representar todos os artefatos de dados e relacionamentos correspondentes. Estamos lidando com um monte de incógnitas conhecidas muito interessantes, com iniciativas empolgantes no campo de catálogos de dados e inventário de ativos. O mapeamento de interações de micro-serviços, entidades de infraestrutura em tempo real e infraestrutura de ML e outros armazenamentos de dados não tradicionais são poucos exemplos desse tipo.

Arquitetura de Linhagem e Modelo de Dados

Fluxo de dados

Conforme ilustrado no diagrama acima, vários sistemas possuem seu próprio processo de ingestão de dados independente, levando a muitos modelos de dados diferentes que armazenam dados de entidades e relacionamentos em granularidades variadas. Esses dados precisavam ser reunidos para descrever de forma precisa e abrangente o cenário de dados da Netflix e exigiam um conjunto de processos de conformidade antes de entregar os dados para um público mais amplo.

Durante o processo de conformidade, os dados coletados de diferentes origens são transformados para garantir que todas as entidades em nosso fluxo de dados, como tabelas, trabalhos, relatórios, etc., sejam descritas em um formato consistente e armazenadas em um modelo de dados genérico para uso.

Com base em um modelo de dados padrão no nível da entidade, criamos um modelo de relacionamento genérico que descreve as dependências entre qualquer par de entidades. Usando essa abordagem, podemos criar um modelo de dados unificado e o repositório para fornecer a alavancagem correta para permitir vários casos de uso, como descoberta de dados, serviço de SLA e eficiência de dados.

Casos de Uso Atuais

O Big Data Portal, uma interface visual para gerenciamento de dados na Netflix, tem sido o principal consumidor de dados de linhagem até o momento. Muitos recursos se beneficiam de dados de linhagem, incluindo classificação de resultados de pesquisa, uso de colunas de tabela para tarefas de recebimento de dados, derivação de dependências de fluxo de trabalho e criação de visibilidade de tarefas gravadas em tabelas de recebimento de dados.

Nosso foco mais recente tem sido fornecer (a) um serviço de linhagem de dados (baseado em REST) aproveitado pelo serviço de SLA e (b) os casos de uso de eficiência de dados (para dar suporte ao gerenciamento do ciclo de vida dos dados). O serviço de SLA depende das dependências do trabalho definidas nos fluxos de trabalho de ETL para alertar sobre potenciais falhas de SLA. Esse serviço também alerta proativamente sobre possíveis atrasos em alguns relatórios críticos, devido a atrasos ou falhas em qualquer parte do processo.

Os casos de uso de eficiência de dados aproveitam a visibilidade das entidades e seus relacionamentos para gerar ganhos de custo e atribuição, limpeza automática de dados não utilizados no warehouse.

Qual é o próximo?

Nossa jornada em estender o valor dos dados de linhagem para novas fronteiras está apenas começando e temos um longo caminho a percorrer para alcançar a meta abrangente de fornecer linhagem universal de dados representando todas as entidades e relacionamentos correspondentes para todos os dados na Netflix. A curto e médio prazo, estamos planejando integrar mais plataformas de dados e alavancar o banco de dados gráfico e um serviço REST de linhagem e interface GraphQL para permitir mais casos de uso de negócios, incluindo a melhoria da produtividade do desenvolvedor. Também planejamos aumentar nosso investimento em iniciativas de detecção de dados, integrando dados de linhagem e ferramentas de detecção para analisar com eficiência nossos dados para melhorar ainda mais a higiene dos dados.

Por favor, compartilhe sua experiência adicionando seus comentários abaixo e fique ligado para mais informações sobre a linhagem de dados na Netflix nos posts do blog. .

Créditos: Queremos agradecer sinceramente a muitos estimados colegas da plataforma de dados (parte da equipe de Engenharia de Dados e Infraestrutura) da Netflix que foram pioneiros deste tópico e que continuam a ampliar nosso pensamento sobre esse tópico com suas valiosas percepções e estão construindo muitos serviços úteis em dados de linhagem.

Estaremos no Strata San Francisco no dia 27 de março no quarto de 2001 realizando uma sessão de tecnologia sobre este tópico, junte-se a nós e compartilhe suas experiências.

Se você gostaria de fazer parte de nossa equipe pequena, impactante e colaborativa, venha se juntar a nós .