Luigi, Airflow, Pinball e Chronos: Comparando Sistemas de Gerenciamento de Fluxo de Trabalho
A construção de sistemas de grande escala que lidam com uma quantidade considerável de dados geralmente requer vários trabalhos de ETL e diferentes mecanismos de processamento.
Em nosso caso, por exemplo, o processo ETL consiste em muitas transformações, como normalização, agregação, desduplicação e enriquecimento de milhões de registros de dados do carro.
Esses tipos de processos geralmente começam executando fluxos manuais, mas chega um momento em que precisamos começar a automatizar essas tarefas. Para isso, precisaríamos de um Sistema de Gerenciamento de Fluxo de Trabalho. Esta postagem do blog irá comparar quatro deles: Luigi, Airflow, Pinball e Chronos.
Vamos começar!
Por que usar um sistema de gerenciamento de fluxo de trabalho?
Gerenciar fluxos de trabalho complexos e programá-los pode parecer fácil, então você pode cair na armadilha de criá-los sozinho. No entanto, esta provavelmente não é a melhor ideia, porque é provável que você encontre desafios que podem ser facilmente superados pela automação.
Por exemplo, ao tentar executar tarefas periódicas. Nesse caso, você pode precisar escrever um algoritmo que pega a saída de um trabalho e o usa como entrada para outro trabalho.
Esta tarefa depende de trabalhos anteriores para serem concluídos com sucesso, porque eles devem ser executados em ordem cronológica. Se a primeira tarefa não for executada corretamente, pode criar erros mais tarde. Seu planejador deve ser capaz de lidar com esses tipos de situações, sem exigir que você esteja constantemente à procura de bugs e erros enquanto penetra profundamente em seu código e suas dependências.
A mesma coisa aconteceu conosco aqui na Intelekts. Criamos um Spark Job sobre um cluster gerenciado do Hadoop que converte um determinado conjunto de dados em um formato padronizado. Em seguida, ele grava e salva esses novos arquivos em um local particionado otimizado.
Como recebemos grandes quantidades de dados regularmente e esporadicamente, decidimos realizar essa ação uma vez por hora, garantindo que não perdemos dados importantes.
Então, após a conversão ter ocorrido e os novos arquivos serem gravados, agregamos os dados das últimas 12 horas e oferecemos relatórios resumidos das descobertas. Este processo parece muito simples, mas se uma etapa falhar (ou seja, se uma hora de dados estiver faltando), o resultado dos dados agregados e resumidos será impreciso e falso.
Portanto, precisamos garantir que a tarefa de procedimento seja disparada apenas quando nossa tarefa de conversão for executada e bem-sucedida. Se não tivesse sucesso, uma tarefa diferente seria acionada.
Em outras palavras, precisávamos de um mecanismo que apoiasse a ideia de jobs sendo acionados pela conclusão de outros jobs. Foi quando decidimos que precisávamos de uma estrutura de fluxo de trabalho ETL, com um agendador que acionaria as tarefas apropriadas para as quais foi programado.
Comparando Sistemas de Gerenciamento de Fluxo de Trabalho
Aproximadamente 18 meses atrás, examinamos quatro projetos principais de código aberto que consideramos úteis para longas cadeias de dependência:
Luigi
Luigi é um projeto de código aberto bastante popular criado pelo Spotify. Tem muitas análises excelentes online e a interface do usuário para criar fluxos de trabalho é muito fácil de usar. No entanto, o Luigi não tem um mecanismo de gatilho e, como mencionado antes, precisávamos de um agendador que fosse capaz de encontrar e acionar novas tarefas implantadas. Além disso, Luigi não atribui tarefas aos trabalhadores e não é altamente capaz de monitorar cronogramas.
Airflow
Airflow é um projeto de código aberto desenvolvido pela AirBnB. Ele é apoiado por uma grande comunidade de engenheiros de software e pode ser utilizado com várias estruturas diferentes, incluindo AWS. O nível de maturidade deste projeto é alto, mas está atualmente em processo de estabilização, pois está sendo incubado pela Apache.
Pinball
Pinball é um projeto de código aberto desenvolvido pelo Pinterest. Atualmente é executado em Python 2, então eles estão um pouco atrasados em termos de novos recursos (usamos Python 3). A interface do usuário para Pinball não era amigável e um tanto desafiadora de descobrir. Também parecia não ter manutenção, então deixamos para trás.
Chronos
Chronos é outro projeto de código aberto criado pelo AirBnB que roda no Mesos. Mesos é um mecanismo de distribuição que gerencia recursos de computação, permitindo assim que aplicativos elásticos sejam construídos e criados facilmente.
Usar o Chronos exigiria que construíssemos e mantivéssemos um ambiente Mesos, o que não vale a pena fazer apenas para recursos de programação. Se não fôssemos uma plataforma nativa em nuvem, teríamos considerado o uso de DC / OS (da Mesosphere) e então o Chronos seríamos uma opção muito mais atraente.
Escolhendo o melhor sistema de gerenciamento de fluxo de trabalho para nós
Nosso foco principal ao fazer a pesquisa foi encontrar uma estrutura que seja mantida, tenha um programador integrado e possa ser executado facilmente na nuvem AWS. Como pode ser visto na tabela acima, o Airflow e o Luigi são bem mantidos, mas devido à falta de um programador integrado no Luigi, o Airflow tinha mais a oferecer.
Nesse momento, optamos pelo Airflow. Acreditamos que é a melhor opção para orquestração de trabalho em nossa empresa, especialmente porque trabalhamos em um ambiente baseado em nuvem de Big Data.
O próprio Airflow usa DAGs (Directed Acyclic Graphs) que são compostos de tarefas, com dependências entre elas. Eles podem ser programados para serem executados periodicamente ou disparados a partir da conclusão de outra tarefa.
Ele usa um banco de dados SQL para armazenar o estado dos DAGs e pode ser escalonado usando Celery para permitir que tarefas sejam executadas em trabalhadores remotos. Executamos o Airflow em contêineres Docker no ECS, usando Celery para distribuir a carga das tarefas em vários contêineres.
Qual sistema de gerenciamento de fluxo de trabalho você usa e por quê? Conte-nos na seção de comentários. Forte abraço!