8 minutos de leitura
Neste artigo, você irá conhecer um pouco sobre o que é e do que se trata a ferramenta que permite automatizar a execução de tarefas agendadas (scheduled tasks) de maneira inteligente e baseada em grafos acíclicos dirigidos (Directed Acyclic Graph, DAG).
Apesar de ser incrivelmente eficaz, o Airflow pode se tornar relativamente confuso para iniciantes (e algumas vezes até mesmo para usuários avançados) devido ao seu grande número de configurações e ampla versatilidade, que, consequentemente, acabam trazendo uma carga de complexidade a mais para o projeto. Por essas razões, este artigo tem como objetivo trazer um pouco de luz às definições iniciais do que a ferramenta é – e o que ela não é –, permitindo ao usuário compreender melhor quando este orquestrador lhe renderá uma bela sinfonia, e quando é melhor deixá-lo de lado.
O Apache Airflow é uma ferramenta de código aberto, escrita em python e desenvolvida pela Apache Foundation, seu objetivo é orquestrar pipelines de tarefas agendadas por meio de arquivos python com instruções de sequenciamento definidas, chamados DAGs. Pense nele como um versátil maestro, capaz de orquestrar diferentes músicas, de diversos tempos e com diferentes instrumentos de maneira igualmente ótima.
Para seu funcionamento, o Airflow conta com alguns elementos chave que permitem a existência da sinergia necessária entre tarefas, eventos, estados e filas, todos funcionando de maneira sincronizada e de acordo com configurações definidas pelo usuário. A Figura abaixo representa, de maneira relativamente simplificada e em uma mesma máquina (visto que é possível configurar o Airflow de maneira escalonável) a estrutura de uma instância da ferramenta:
Sendo assim, descrevendo de maneira também simplificada a funcionalidade e comportamento de cada elemento apresentado na Figura anterior:
Com a integração de todos esses componentes, o usuário é capaz então de escrever e programar a execução de diferentes conjuntos de tarefas acíclicas com uma imensa variedade de possibilidades para a execução de cada tarefa, que vão desde interpretadores Python, containers Docker e até mesmo comandos bash.
Após as definições dos componentes que integram o Airflow, é possível que o leitor esteja imaginando diferentes tipos de fluxo de trabalho, com inúmeras aplicações e a possibilidade de processar dados quase que de forma irrestrita. Este capítulo se faz ainda mais importante para este caso, visto que uma limitação extremamente importante foi apresentada indiretamente no capítulo anterior mas que pode ter passado despercebida: o Airflow não é um processador de dados e não pode ser utilizado para sequências indefinidamente cíclicas de tarefas. Trazendo ao leitor novamente a analogia musical, seu maestro até pode ser um grande multi-instrumentista, mas acaba sendo impossível orquestrar a música e efetivamente tocar seus instrumentos simultaneamente.
O problema de processamento de dados nesta ferramenta pode ser mais facilmente compreendido através da explicação mais minuciosa do funcionamento da transferência de dados entre tarefas. A transferência de dados entre tarefas é feita através de um componente chamado Xcom, que nada mais é do que a abstração de acesso, leitura e escrita de dados no banco de dados do Airflow. Ou seja, para cada leitura/escrita desse banco de dados, é necessário fazer uma conexão e executar uma nova operação no banco, que, para grandes quantidades de dados, pode acabar resultando em problemas de consulta para outras DAGs ou tarefas que estejam sendo executadas simultaneamente. Por esse motivo, é indicado que o processamento de dados seja feito externamente ao Airflow, utilizando Xcoms apenas para a troca de pequenas informações entre tarefas, como metadados.
Já o problema de execução de tarefas indefinidamente cíclicas se dá pela maneira que os diferentes componentes e sub-sistemas dentro do Airflow se comunicam. É esperado que um bloco de tarefas (DAG) tenha um início bem definido e programado temporalmente, que em seguida irá executar suas tarefas de forma sequencial ou paralela até que chegue a um fim determinado, atualizando assim o estado da execução desse conjunto de tarefas com a condição final do mesmo (sucesso ou falha). Por esse motivo, e para evitar que usuários tentem executar tarefas indefinidamente, o Airflow utiliza e deixa tão claro o conceito de grafos acíclicos dirigidos.
Após essas descrições, espera-se que o leitor tenha conseguido esclarecer um pouco mais os conceitos que constituem essa poderosa ferramenta de automação de tarefas nominada Airflow. Ao mesmo tempo, espera-se também que tenha surgido o interesse em experimentar a utilização desta ferramenta e começar a escrever suas próprias “sinfonias”, ao ponto de que o leitor esteja se perguntando em como fazê-lo. Como demonstrado, o Airflow pode ser relativamente complexo para utilização, e não seria diferente para sua instalação e configuração, portanto, não deixe de conferir os próximos artigos se tiver interesse em se aprofundar no uso deste incrível orquestrador, começando por este: Organizando o palco: instalando e configurando o Apache Airflow localmente.