Como usamos o Airflow no Jusbrasil

João Henrique Vasconcelos
Jusbrasil Tech
Published in
5 min readApr 27, 2022

No Jusbrasil nós temos uma série de workflows periódicos que nos ajudam a servir nossas pessoas usuárias e a entender o nosso negócio. Em geral todos eles envolvem a coleta de dados de algum lugar, o seu pré-processamento e subsequente carga em algum outro lugar, os conhecidos ETLs (do inglês extract transform and load).

A princípio isso era feito com cron jobs, porém, conforme a quantidade e complexidade desses workflows foram aumentando, tivemos que procurar uma alternativa.

No cron a sincronização era feita com base no tempo entre os jobs — via as cron schedule expressions. Isso causava overlap e erros de sincronização entre eles. Além disso, a dependência entre os jobs era obscura e a criação deles era difícil.

Assim, ao buscar uma novo framework, nossos requerimentos demandavam que a ferramenta:

  • Lidasse com a dependência entre workflows;
  • Provesse uma interface para criadores de workflows na qual estes pudessem: Criar workflows, monitorar alertas e analizar os tempos de execução;
  • Provesse features básicas de segurança (proteger credenciais de bancos, tokens, etc);

Após uma análise das ferramentas disponíveis escolhemos o Apache Airflow.

O que é o Airflow

O Airflow é uma plataforma para criar, agendar e monitorar de forma programática workflows.

O Airflow foi criado em 2014 no Airbnb para lidar exatamente com esse tipo de problema. O projeto já começou open source e em 2019 foi adotado pela Apache. Hoje ele é padrão na indústria, sendo usado por gigantes dentro e fora do Brasil, como o Lyft, Walmart e, claro, o Airbnb.

O projeto usa Python como sua linguagem de definição de workflows, buscando funcionar como um orquestrador destes. Assim, o Airflow torna muito mais simples as tarefas de criação, monitoramento e iteração dos workflows.

Para entender como o Airflow nos ajuda com isso, vale introduzir alguns conceitos essenciais.

Directed Acyclic Graph (DAG)

Um grafo acíclico direcionado (DAG) é um conjunto de vértices e arestas no qual as arestas direcionam um vértice a outro, sem nunca formar um laço fechado. Ou seja os workflows seguem sempre para frente, nunca retornam nem fazem loops. No Airflow seus workflows são descritos como DAGs. Na prática, as DAGs são um arquivo Python que descrevem um conjunto ordenado de passos ou tasks.

Exemplo de DAG

Task

A Task é sua unidade mínima de computação. Elas são os vértices das DAGs e as dependências entre elas conectam esses vértices e formam o grafo.

Exemplo de DAG no Airflow

Existem três tipos básicos de Task:

  • Operadores (operators), modelos de tarefas predefinidos que você pode agrupar rapidamente para criar a maior parte das suas DAGs.
  • Sensores (hooks), uma subclasse especial de Operadores que dependem que um evento externo aconteça.
  • Funções genéricas, uma função qualquer em Python decorada com @task.

Airflow no GCP

No Jusbrasil nós usamos o GCP (Google Cloud Platform) como nossa cloud e, felizmente, o Google provê uma versão gerida do Airflow chamada Cloud Composer. O principal ponto positivo desse produto é diminuir o tempo gasto pelo time na manutenção do Airflow. Com ele, evitamos todas as dores de cabeça relacionadas a manter um Airflow em produção.

No GCP o Airflow roda em um cluster do GKE (Google Kubernetes Engine) o que torna o escalamento do Airflow uma tarefa simples.

Arquitetura do composer no GCP

DAGs e Containers

Os três tipos de tasks já funciona muito bem pra DAGs e Tasks simples mas e se você quiser usar uma versão diferente de Python, ou até implementar sua task em Java? A solução é usar containers para rodar as tasks, deixando o Kubernetes executá-los. Para isso, faz sentido pensar numa arquitetura que utiliza o Airflow como um orquestrador de Pods.

Nesta arquitetura as tasks devem disparar Pods no GKE, usando o GKEStartPodOperator, e o Airflow deve monitor o sucesso, ou falha, dessas tasks.

Arquitetura do Airflow como Orquestrador do Kubernetes

Deste modo, cada Pod roda um container e executa sua task em um ambiente isolado. Com isso, conseguimos rodar a versão de Python que quisermos e até algumas DAGs em Scala :)

Exemplo de uma DAG com o GKEStartPodOperator

Integração com o Github

Com toda essa aplicabilidade do Airflow tivemos vários times criando DAGs o que demandou a criação um workflow pra criação e deploy de workflows 😅.

Nossas DAGs ficam hospedadas no Github e nós usamos o Github Actions para fazer o CI/CD delas para o Composer. Com isso, alterações, criações e remoções de DAGs ocorrem automaticamente quando houver alteração na branch main.

Nosso CI/CD no Github Actions

Alertas no Slack

Além disso também criamos uma biblioteca interna para disparar alertas no Slack em caso de falha das tasks. A lib marca os owners da DAG e também traz o log da task que falhou.

Alerta no nosso canal de monitoramento das DAGs

Conclusão

Hoje temos mais de 100 DAGs em produção no Jusbrasil e o Airflow impacta a maioria dos nossos times. Usamos ele em diversas partes do nosso produto, desde a resolução de entidades até a criação de recomendações para nossos usuários.

O Airflow tem nos ajudado muito e foi, sem dúvida, uma grande melhoria ao nosso dia a dia. Dito isso, buscamos sempre aprimorar nosso data-stack e grandes coisas estão por vir — então segue o blog 😉.

--

--