-
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
Comentários do Hacker News
Fiquei impressionado com blogs técnicos corporativos e sistemas internos, mas agora percebo que código é dívida
Pergunta-se quantas iterações são necessárias até que engenheiros fiquem satisfeitos com uma solução de workflow
Opinião do fundador da Windmill.dev
Compartilhamento de experiência com Activebatch
Confusão sobre o uso de Netflix/Conductor
Opinião sobre orquestradores
Comparação com Temporal
Avaliação positiva do projeto
Pergunta sobre as diferenças em relação ao Conductor
Crítica ao conteúdo do artigo