4 pontos por GN⁺ 2024-07-24 | 1 comentários | Compartilhar no WhatsApp
  • Maestro: o orquestrador de workflows da Netflix

  • TL;DR

    • A Netflix tornou público o código-fonte do Maestro
    • É possível começar pelo repositório no GitHub e, se achar útil, o pedido é para deixar uma estrela
  • O que é o Maestro

    • O Maestro é um orquestrador de workflows de uso geral, escalável horizontalmente, projetado para gerenciar workflows em larga escala
    • Ele gerencia todo o ciclo de vida de workflows como pipelines de dados e pipelines de treinamento de modelos de machine learning
    • Os usuários podem empacotar a lógica de negócio em vários formatos, como imagens Docker, notebooks, scripts bash, SQL e Python
    • Diferentemente de orquestradores de workflow tradicionais que suportam apenas DAGs (Directed Acyclic Graphs), o Maestro suporta tanto workflows acíclicos quanto cíclicos e inclui vários padrões reutilizáveis, como loops foreach, subworkflows e ramificações condicionais
  • A jornada com o Maestro

    • Centenas de milhares de workflows foram migrados com sucesso com interrupção mínima para os usuários
    • No último ano, os jobs executados aumentaram 87,5%, e a plataforma está executando em média 500 mil jobs por dia
  • Escalabilidade e versatilidade

    • O Maestro é um orquestrador de workflows totalmente gerenciado que fornece Workflow-as-a-Service para milhares de usuários finais, aplicações e serviços da Netflix
    • Ele suporta diversos casos de uso de workflow, como pipelines de ETL, workflows de ML e pipelines de testes A/B
    • A crença é que, como as tabelas de dados da Netflix estão em um único data warehouse, um único orquestrador deve dar conta disso
  • Apresentando o Maestro

    • Ele usa definições de workflow definidas em formato JSON
    • Combina campos fornecidos pelo usuário com campos gerenciados pelo Maestro para formar uma definição de orquestração flexível e poderosa
    • As definições de workflow são compostas por propriedades e workflows versionados
    • As propriedades incluem informações de autor e proprietário, configurações de execução e mais
    • Os workflows versionados incluem identificador único, nome, descrição, tags, configurações de timeout e nível de prioridade
  • Estratégias de execução de workflow

    • Estratégia de execução sequencial: executa os workflows um a um em ordem FIFO
    • Estratégia de execução sequencial estrita: bloqueia a execução quando há um erro bloqueante e exige resolução manual
    • Estratégia de executar apenas o primeiro: remove novas instâncias de workflow da fila até que o workflow atualmente em execução seja concluído
    • Estratégia de executar apenas o último: executa apenas o workflow acionado mais recentemente e interrompe instâncias já em execução
    • Estratégia de execução paralela com limite de concorrência: executa várias instâncias de workflow em paralelo de acordo com um limite de concorrência predefinido
  • Suporte a parâmetros e linguagem de expressão

    • Suporta parâmetros dinâmicos e injeção de código, aumentando bastante a flexibilidade e o dinamismo dos workflows
    • Para lidar com problemas de segurança e proteção, foi desenvolvido um parser próprio de linguagem de expressão customizada
    • Simple and Safe Expression Language (SEL): uma linguagem de expressão simples e segura, desenvolvida para lidar com os riscos relacionados à injeção de código
    • Parâmetros de saída: é possível retornar parâmetros de saída das execuções do usuário para o sistema
    • Workflows parametrizados: são inicializados passo a passo em tempo de execução com base em parâmetros definidos pelo usuário
  • Padrões de execução de workflow

    • Suporte a foreach: usado para repetir a execução da mesma tarefa com parâmetros diferentes
    • Suporte a ramificação condicional: executa etapas subsequentes apenas quando determinadas condições são atendidas
    • Suporte a subworkflow: permite compartilhar funcionalidades comuns entre vários workflows
  • Runtime de etapas e parâmetros de etapa

    • Interface de runtime de etapa: interface que descreve um job em tempo de execução
    • Mesclagem de parâmetros de etapa: injeta parâmetros de runtime e tags antes da execução da etapa para controlar dinamicamente o comportamento da etapa
  • Dependências de etapa e sinais

    • As dependências de etapa podem ser usadas para expressar dependências de execução
    • Sinais são fragmentos de mensagem que transmitem informações, incluindo valores de parâmetros
  • Breakpoints

    • É possível definir breakpoints em etapas do workflow para funcionar de forma semelhante a breakpoints em nível de código
    • Ao atingir um breakpoint, a etapa entra em estado de "pausado" e o progresso do grafo do workflow é interrompido até que o usuário retome manualmente
  • Timeline

    • Captura todos os eventos importantes, incluindo a timeline de execução das etapas
    • É útil para depuração e fornece visibilidade sobre o estado das etapas
  • Política de retry

    • Suporta políticas de retry para etapas que chegaram a um estado terminal devido a falha
    • Diferencia retries por erro de plataforma e por condições definidas pelo usuário
  • Visão agregada

    • É possível ver o estado agregado de todas as etapas de uma instância de workflow
    • O estado agregado é calculado combinando os dados de runtime da execução atual com a agregação base
  • Rollup

    • Fornece um resumo de alto nível da instância de workflow
    • Detalha o estado de cada etapa e a quantidade de etapas em cada estado
  • Publicação de eventos do Maestro

    • Gera eventos e os publica em sistemas externos quando uma definição de workflow, instância de workflow ou instância de etapa é alterada
    • Os eventos são divididos em internos e externos
  • Começando com o Maestro

    • Ele foi amplamente usado na Netflix e agora teve seu código-fonte aberto ao público
    • O código pode ser encontrado no repositório do GitHub, e o pedido é para abrir uma issue no GitHub caso haja dúvidas ou comentários
  • Agradecimentos

    • Agradecimentos aos membros da equipe que contribuíram para o projeto Maestro e aos colegas da Netflix

Resumo do GN⁺

  • O Maestro é um orquestrador projetado para gerenciar workflows em larga escala na Netflix, com suporte a lógica de negócio em diversos formatos
  • Parâmetros dinâmicos e injeção de código aumentam bastante sua flexibilidade e dinamismo
  • Ele oferece várias estratégias e padrões de execução para definir e gerenciar workflows complexos com facilidade
  • É adequado para lidar com uma fonte única de dados, como o data warehouse da Netflix
  • Outros orquestradores com funcionalidades semelhantes incluem Apache Airflow e Prefect

1 comentários

 
GN⁺ 2024-07-24
Comentários do Hacker News
  • Fiquei impressionado com blogs técnicos corporativos e sistemas internos, mas agora percebo que código é dívida

    • Prefiro usar código aberto, embora ele exija manutenção e adição de funcionalidades
    • Tudo que não é código importante para o negócio é desperdício de recursos
  • Pergunta-se quantas iterações são necessárias até que engenheiros fiquem satisfeitos com uma solução de workflow

    • Netflix, Uber e Amazon todas construíram várias soluções
    • Engenheiros parecem se interessar em criar motores de workflow
  • Opinião do fundador da Windmill.dev

    • Maestro e Windmill têm muitas semelhanças
    • Principais diferenças:
      • Windmill é escrito em Rust
      • Maestro usa CockroachDB, enquanto Windmill usa seu próprio algoritmo de sharding
      • Diferença de licença: Maestro é Apache 2.0, Windmill é AGPL
      • Comparada ao Maestro, apoiado pela Netflix, a Windmill é uma empresa pequena
      • O Maestro carece de documentação para self-hosting e de UI
  • Compartilhamento de experiência com Activebatch

    • O Activebatch oferece um ambiente de automação poderoso com uma instalação simples de banco MS SQL e GUI do Windows
    • Airflow e outros concorrentes de código aberto são complexos
    • É uma pena que o Activebatch não tenha sido amplamente adotado por causa do modelo de vendas enterprise
  • Confusão sobre o uso de Netflix/Conductor

    • O projeto parece usar Netflix/Conductor, mas está usando uma versão arquivada
    • Não usa Orkes Conductor
  • Opinião sobre orquestradores

    • Código aberto e desenvolvimento público são ótimos, mas já existem muitos orquestradores
    • É improvável que uma nova opção venha a ser usada comercialmente
  • Comparação com Temporal

    • Maestro é escrito em Java, e Temporal é escrito em Go
  • Avaliação positiva do projeto

    • Eu queria criar algo parecido em projetos de ML e engenharia de dados
    • Estou ansioso para testar
  • Pergunta sobre as diferenças em relação ao Conductor

    • Muitas semelhanças foram encontradas no código
    • Usa JSON como linguagem de definição de workflow
  • Crítica ao conteúdo do artigo

    • Parece ter sido escrito por IA
    • São necessários workflows de exemplo com casos de uso reais