Como a Hotmart utiliza CDC para ingerir dados de maneira escalável no seu data lake

Abdias Montalvão
Troopers-Legacy
Published in
8 min readApr 13, 2023
Para todos verem: Uma imagem de uma nuvem iluminada de azul e duas setinhas: uma apontando de fora para dentro da nuvem e outra apontando de dentro para fora. Ao fundo da imagem algumas linhas de rede.

Motivação

Assim como a quantidade de V’s do Big Data, algo que não para de crescer e está relacionado a esse tema é a exigência das organizações para que suas fontes de dados analíticas sejam cada vez mais abrangentes, contendo assim, o máximo de informações disponíveis do negócio.

Brincadeiras à parte, companhias em geral, principalmente as data driven, têm concentrado esforços constantes para integrar novos dados à sua camada analítica, e na Hotmart não é diferente.

Quando falamos sobre fonte de dados analíticos, é comum esperarmos alguma solução que seja capaz de lidar com um grande volume de dados, e atualmente, uma das abordagens mais comuns para armazenar e disponibilizar esses grandes volumes de maneira centralizada nas empresas é o uso de data lakes. Contudo, apesar de não ser a única abordagem existente, a sua escolha tem sido altamente considerada, mas não apenas devido a sua popularidade ou hype. Um data lake tem a capacidade de lidar com grandes volumes de dados de maneira mais eficiente.

Diferente do tradicional data warehouse, o data lake surgiu com a proposta de ser mais flexível, barato e tem a capacidade de armazenar dados de qualquer natureza ou formato, dispensando transformações e modelagens pré definidas para todos os dados, o que além de limitar as possibilidades, pode ocasionar custos adicionais.

Entretanto, assim como no data warehouse, a integração de dados do data lake, popularmente chamada de “ingestão”, também pode ser feita através de processos de ETL (Extract, Transform, Load), mas não se limita a esse meio. Aqui na Hotmart, utilizamos das mais diversas formas de ingestão de dados, sendo as mais utilizadas: Envio direto de eventos das aplicações para o data lake, CDC (Change Data Capture) e ETL.

E por falar em CDC, nesse post iremos abordar sobre como o seu uso tem ajudado a Hotmart a ampliar a cobertura de dados na sua camada analítica com maior velocidade e com um menor custo operacional.

O que é CDC?

CDC, ou traduzindo para o português: Captura de Alteração dos Dados, é um conjunto de padrões ou técnicas para integração de dados onde determinadas alterações realizadas em um banco de dados são capturadas e disponibilizadas de maneira que possam ser integrados aos mais diversos destinos.

Por que CDC?

De maneira geral, integrações de dados exigem um esforço considerável de um time, muitas vezes multidisciplinar, principalmente em grandes companhias. Tal time, pode ser integrado por papéis que vão desde um Product Owner, e por intermédio de Analistas/Cientistas/Engenheiros de Dados, chegar até os Desenvolvedores que fazem parte da área do negócio que detém o domínio desses dados.

Logo você pode imaginar, o quão difícil pode ser priorizar esse tipo de demanda. Por esta razão, aqui na Hotmart, além de educar os nossos Troopers, como os nossos colaboradores são chamados, sobre a importância e o dever deles em promover os dados para a empresa utilizando as nossas ferramentas, também buscamos ampliar o nosso leque de opções para os ajudar a decidir o melhor caminho para entregar esses dados.

Imagine um cenário onde os dados que interessam a sua empresa são gerados através de centenas de aplicações diferentes, das mais diversas stacks, parece complexo integrar todos esses dados para você? Agora adicione um grau de complexidade extra, leve em conta também, a necessidade de integrar dados oriundos de M&A (Mergers and Acquisitions). Esse é exatamente um dos cenários que temos aqui na Hotmart atualmente.

Dito isto, por característica, os benefícios do CDC podem ajudar a romper essas barreiras que dificultam a entrega desses dados.

Principais benefícios do CDC:

  • Facilita a implementação de uma arquitetura altamente escalável para a entrega dos dados;
  • Viabiliza a entrega dos dados near real time;
  • Não onera o banco de dados de origem, como um ETL;
  • Implantação não intrusiva, dispensando a necessidade de customizações e novas implementações nas aplicações que geram esses dados;
  • Existência de serviços e documentações amplas que dão suporte a sua implantação para a maior parte das engines de bancos de dados existentes.

Hotmart CDC

Hotmart CDC Architecture

Mesmo com tantos benefícios e menor custo operacional, a implantação de um CDC requer conhecimentos avançados e específicos, sobre o tema e sobre o serviço que será utilizado para fazer essa captura e transmissão desses dados, seja ele auto gerenciado ou open source.

Sendo assim, como a Hotmart escala a implantação de novos CDC’s?

Para resolver esse problema, criamos um produto interno, um módulo para Terraform que automatiza novas implantações utilizando de serviços auto gerenciados da AWS, e que abstrai toda a complexidade de configuração de infra-estrutura, do controle de acessos e da configuração do serviço que faz essa transmissão e armazenamento desses dados, o Hotmart CDC.

Baseado no AWS DMS (Data Migration Service), o nosso módulo, desde que foi disponibilizado para nossos clientes internos, tem nos ajudado a ampliar consideravelmente a abrangência do nosso lake. Possibilitando a disponibilização de dados que eram requisitados a muito tempo por diversas áreas de negócio da Hotmart, como dados de aplicações internas, dados de M&A e até mesmo dados de aplicações de terceiros onde temos acesso ao banco de dados. Tudo isso com um menor custo operacional em comparação ao método mais comum utilizado pela Hotmart, sendo ele o envio de eventos para o data lake diretamente das aplicações, o que exige que implementações sejam feitas nas aplicações ou exige até mesmo a criação de jobs que lêem do banco de dados e envia as alterações como evento de maneira manual.

A escolha do DMS

Devido a grande adoção de serviços da AWS para compor nossas outras soluções, o suporte e o conhecimento do time sobre a AWS, avaliamos o seu serviço para replicação de dados, o DMS, e constatamos que ele suporta todos os tipos de bancos de dados com os quais trabalhamos nas nossas aplicações. Esses sem dúvidas foram os fatores determinantes que fizeram optarmos por utilizar esse serviço para esse propósito.

Atualmente contamos com diversos CDC's que foram implantados utilizando o DMS e que contam com bancos de origens de diferentes tipos, como: MySQL, PostgreSQL, SQL Server e MongoDB.

Ainda sobre o DMS, além da replicação do tipo CDC, ele também oferece suporte à replicação completa entre tipos de bancos de dados diferentes, o que pode ajudar a realizar migração entre bancos diferentes de maneira automatizada. Caso tenha interesse em saber mais sobre o DMS, clique aqui.

Como o Hotmart CDC é estruturado

A solução está dividida em três módulos Terraform, onde cada um dos módulos, é responsável por configurar a infraestrutura necessária, tão como as permissões de acesso. A seguir você pode conferir quais são esses módulos e quais são as suas responsabilidades:

  • Módulo cdc_source_endpoint:
    Responsável por criar o recurso do tipo endpoint de entrada no DMS, onde através de parâmetros de conexão do banco, seja optando por preencher manualmente no console posteriormente ou utilizando o ARN (Amazon Resource Name) de um secret do Secrets Manager, o módulo cria esse recurso e configura o IAM Role que o mesmo precisa para funcionar. Além de definir alguns parâmetros padrões que consideramos ideais para o nosso negócio.
  • Módulo cdc_main:
    Responsável por criar criar a instância de replicação do DMS, configurar o subnet group, security group, definir configurações de tipo de instância, armazenamento e versão do DMS. Além disso, também cria o endpoint de destino, as tarefas de migração do DMS, alarmes pré definidos via CloudWatch e configura as roles necessárias para o funcionamento desses recursos.
  • Módulo cdc_target:
    Responsável por criar o bucket do S3 onde os arquivos serão entregues, Glue Crawler para inferir os tipos desses dados e adicionar as tabelas ao nosso catálogo de dados, IAM Roles e bucket policy necessários para o funcionamento do CDC.

Como vocês podem perceber, desde a parte de captura dos dados até a entrega e disponibilização, utilizamos de serviços auto gerenciados pela AWS. Por isso uma ferramenta de IAC, como o Terraform consegue nos ajudar nesse papel com tamanha completude.

Um ponto interessante do desacoplamento do código em módulos, é que isso possibilita que você tenha um fluxo de CDC cross account, entre contas distintas da AWS. Aqui na Hotmart por exemplo, costumamos deixar o custo de processamento e envio do CDC (módulos source e main) na conta do time responsável pelo envio dos dados e o custo de armazenamento e catalogação (módulo target) para o time de dados.

Monitoramento

Quem já lidou com CDC's sabe o quão sensível esse tipo de replicação costuma ser com falhas, como esse tipo de processo obtém as informações através do log de transações que o banco de dados armazena temporariamente, quando uma replicação é interrompida, o ideal é que a mesma seja retomada o quanto antes ou dentro do período de retenção desse log para evitar perdas de dados.

Por isso, além de provisionar toda a infraestrutura necessária para a implantação de CDC's, o nosso módulo também automatiza a integração dos alarmes pré definidos citados anteriormente com o PagerDuty, a ferramenta para gerenciamento de incidentes de tecnologia utilizada pela Hotmart.

Condições necessárias para que os alarmes sejam acionados:

  • Alto uso de CPU;
  • Pouca memória disponível;
  • Pouco espaço livre no disco;
  • Alto uso de swap;
  • Alto delay na replicação;
  • Nenhum uso de CPU por alguma tarefa de migração, indica que a tarefa foi interrompida.

É importante ressaltar que, para garantir que os alertas pré definidos atendam à todos os cenários de maneira correta, os thresholds que são baseados em valores absolutos e que devem variar de acordo cada cenário devem ser ajustados através dos parâmetros disponíveis no nosso módulo.

Graças a integração com o PagerDuty, conseguimos garantir que cada tipo de alarme será tratado de acordo a sua criticidade para o negócio pelos responsáveis. E isso é essencial para garantir a confiabilidade da solução e prevenção de problemas.

Conclusão

A ferramenta desenvolvida pela Hotmart para escalar a implantação de novos CDC's, faz parte de um leque de soluções que o time de DCP (Data Cloud Platform) mantém para atender as necessidades de dados de toda a companhia. Como dito anteriormente, o CDC é uma das opções que temos e utilizamos, mas não é a única. Para o envio de eventos diretamente das aplicações para o lake, utilizamos uma outra ferramenta própria, que apesar de requerer um maior custo operacional e implementações adicionais em muitos casos, continua sendo a que mais provém benefícios e funcionalidades para os times, de modo geral.

É importante frisar que, ao invés seguir o caminho de ter uma única solução para todos os casos, entendemos que o melhor é prover de diversos meios e apoiar nossos clientes educando e oferecendo suporte para qual solução melhor se adequa em cada cenário. Para nós, está cada vez mais claro que, a melhor solução é aquela que atende o negócio da melhor forma, sem abrir mão da qualidade e confiabilidade do que está sendo entregue.

Já que você chegou até aqui, espero que tenha gostado do post :)

Até o próximo!

--

--