Como manter sistemas sincronizados através de técnicas de CDC

Nos dias de hoje, os dados gerados pelas aplicações, quando utilizados do jeito certo, podem agregar muito valor ao negócio. Com dados sendo gerados a todo o instante, podemos conhecer nossos clientes de forma mais profunda e construir artefatos em torno destes para proporcionar uma melhor experiência, recomendações, sugestões ou até mesmo a oferta de novos produtos e soluções.

Empresas que passam por transformações digitais precisam também, como nunca, ter um entendimento mais profundo de como esse grande volume de dados pode trazer mais valor ao negócio. A modernização de sistemas legados e a adoção de novas tecnologias requer que os dados estejam sincronizados e consistentes entre diferentes sistemas. A velocidade e confiabilidade que estes dados são sincronizados pode trazer grandes vantagens competitivas, principalmente em empresas que dependem fortemente dos dados (data-driven) para conduzir suas operações e decisões de negócio.

Atualmente, técnicas de CDC (Change Data Capture) vêm sendo utilizadas com bastante frequência para sincronização de dados entre sistemas. Essa técnica consiste em observar todas as alterações realizadas em um banco de dados com o objetivo de replicar estes dados para outros sistemas. As alterações são capturadas no momento em que elas acontecem (real-time), ficando disponível para consumidores downstream consumirem essa nova informação, podendo ser integradas em outros sistemas de forma rápida e confiável.

Arquiteturas baseadas em microsserviços e sistemas legados que estão sendo modernizados através da técnica de estrangulamento do monólito também podem se beneficiar do CDC, uma vez que a natureza destes cenários precisam que os dados estejam sincronizados e disponíveis em outros serviços ou sistemas.

Por exemplo, podemos utilizar o CDC para capturar as alterações realizadas em um banco SQL Server para geração de métricas de negócio atualizadas em real-time, ou até mesmo indexar estes dados em ferramentas otimizadas para busca (ElasticSearch). Uma vez o CDC configurado, um snapshot inicial é realizado contendo todos os dados já persistidos, sendo possível integrar não apenas alterações e inserções novas, mas dados já existentes também.

Formas de realizar o CDC

As três formas mais comuns de realizar o CDC são:

Trigger Based: Toda alteração realizada é capturada e inserida em uma nova tabela através de um trigger criado no banco de dados. As alterações são capturadas no momento em que são persistidas (Realtime). Esta opção se torna interessante em casos onde os dados da tabela origem não precisam ser exportados para sistemas externos ou outros bancos de dados.

Apesar de ser a forma mais simples, rápida e barata, vemos que poucas empresas adotam essa abordagem pelo fato de criar uma sobrecarga sobre o banco, que na maior parte das vezes já sofre deste problema.

Query Based: Nesta abordagem, as alterações são capturadas através de um SQL definido onde são usadas algumas colunas na tabela de origem para manter a rastreabilidade do que foi alterado e inserido desde a última sincronização. Quando utilizada uma coluna de identificador (ID) para a detecção de novos registros, essa coluna precisa ser sequencial e auto-incremental. Para a identificação de atualizações, utiliza-se colunas de timestamp, por exemplo, LastUpdatedAt.

Diferentemente da abordagem Trigger Based, as alterações não são capturadas no momento em que elas ocorrem. É necessário configurar um tempo de polling, geralmente em segundos, no qual o SQL configurado será executado sobre a tabela de interesse. Sendo assim, da mesma forma que o Trigger Based, essa abordagem pode gerar uma sobrecarga no banco de dados, principalmente se o tempo de polling for configurado em uma escala de milissegundos.

Log Based: Essa abordagem consiste em capturar as alterações analisando o arquivo de logs do banco. As alterações são capturadas em real-time, ou seja, são capturadas no momento em que elas acontecem, similar como é feito na abordagem Trigger Based. Porém, esta abordagem não consome nenhum tipo de recurso do banco de dados, atuando exclusivamente sobre os logs. Entretanto, não é possível utilizar essa abordagem em todos os bancos de dados, algumas versões mais antigas não dão suporte a este tipo de CDC.

Como implementar o CDC

As alterações capturadas via CDC são, na maior parte das vezes, representadas através de um evento. Nesse evento, temos informações de qual operação foi realizada (insert, update, delete), timestamp e o payload representando o dado. Naturalmente, estamos mais inclinados a adotar soluções de streaming de eventos para trafegar essas alterações com o objetivo de obter uma menor latência e desacoplar o sistema no qual o dado se originou do sistema que o dado vai ser integrado.

Desta forma, o Apache Kafka se torna uma opção bem interessante. Além de ser uma plataforma de streaming de eventos distribuído, apresenta características como alta disponibilidade, tolerância a falhas, escalabilidade e baixa latência, que são atributos indispensáveis para não se tornar um ponto único de falha no ecossistema e inviabilizar todo o processo de CDC.

Além disso, existem diversos plugins disponíveis para o Kafka-Connect que facilitam a extração e ingestão de dados para o Kafka. Os plugins são divididos em duas categorias: source e sink. Plugins source são responsáveis por extrair os dados de uma fonte de dados e publicar eles como eventos para Kafka. Plugins sink publicam estes eventos do Kafka para outros sistemas ou até diretamente para banco de dados (SQL e NoSQL). O plugin JDBC Connector é uma opção bem interessante para realizar o CDC via Query Based.

Para o CDC Log Based, podemos utilizar o Debezium, que oferece plugins para uma variedade de banco de dados, como MySQL, PostgreSQL, MongoDB e outros. Essa ferramenta observa os logs do banco e envia toda alteração capturada em forma de evento para o Kafka. Comparado ao Kafka-Connect, os eventos publicados pelo Debezium são mais completos, pois contém o schema do evento e qual operação originou o mesmo, facilitando a integração desse dado em um banco de dados SQL.

Assim, pode-se concluir que, técnicas de CDC, quando aplicadas do jeito certo, podem nos auxiliar a manter sistemas sincronizados de forma rápida e confiável. Cada forma apresentada de realizar o CDC tem seus prós e contras, sendo que cada uma delas fará mais sentido dependendo do contexto e suas limitações. É importante também que a escolha da ferramenta que servirá como “ponte” para os sistemas a serem sincronizados seja uma ferramenta confiável e que apresenta os atributos necessários para que o processo de CDC seja executado de forma rápida, escalável e não traga dores de cabeça desnecessárias.

Compartilhe este insight:

Comentários

Participe deixando seu comentário sobre este artigo a seguir:

Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments

AUTOR

Bruno Joaquim
Desenvolvedor .NET/NodeJs e especialista em Kafka com experiência em startups e grandes empresas

INSIGHTS EXIMIACO

Arquitetura de Software

Evolução e modernização de aplicações para suportar mudanças de escala.

Manual do Arquiteto de Software

Discutindo conceitos, técnicas, tecnologias, padrões e procedimentos para a boa prática de arquitetura de software.
Tech Trusted Advisor, Fundador e CEO da EximiaCo

NOVOS HORIZONTES PARA O SEU NEGÓCIO

Nosso time está preparado para superar junto com você grandes desafios tecnológicos.

Entre em contato e vamos juntos utilizar a tecnologia do jeito certo para gerar mais resultados.

Insights EximiaCo

Confira os conteúdos de negócios e tecnologia desenvolvidos pelos nossos consultores:

Arquitetura de Software

Consciência Situacional: O Sucesso do Software em Constante Evolução

Arquiteto de Software com experiência executiva em Tecnologia
Arquitetura de Software

Automação de Processos de Negócio: A Chave para Operações Eficientes e Lucrativas

Arquiteto de software e solução com larga experiência corporativa
Arquitetura de Software

A Evolução da Arquitetura de Software para Produtos Digitais Escaláveis

Arquiteto de Software com experiência executiva em Tecnologia
0
Queremos saber a sua opinião, deixe seu comentáriox
Oferta de pré-venda!

Mentoria em
Arquitetura de Software

Práticas, padrões & técnicas para Arquitetura de Software, de maneira efetiva, com base em cenários reais para profissionais envolvidos no projeto e implantação de software.

Muito obrigado!

Deu tudo certo com seu envio!
Logo entraremos em contato

Como manter sistemas sincronizados através de técnicas de CDC

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Como manter sistemas sincronizados através de técnicas de CDC

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Condição especial de pré-venda: R$ 14.000,00 - contratando a mentoria até até 31/01/2023 e R$ 15.000,00 - contratando a mentoria a partir de 01/02/2023, em até 12x com taxas.

Tenho interesse nessa capacitação

Para solicitar mais informações sobre essa capacitação para a sua empresa, preencha o formulário a seguir:

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

O seu insight foi excluído com sucesso!

O seu insight foi excluído e não está mais disponível.

O seu insight foi salvo com sucesso!

Ele está na fila de espera, aguardando ser revisado para ter sua publicação programada.

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse nessa solução

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse neste serviço

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

× Precisa de ajuda?