Como Gerenciar e Integrar Dados em Microsserviços?

A tarefa de integrar dados em microsserviços é uma das principais preocupações de quem opta por adotar essa arquitetura de desenvolvimento. Em microsserviços, os bancos de dados devem funcionar de forma independente, mas consistente.

Por isso, gerenciar dados em microsserviços de forma eficiente é a única maneira de garantir a consistência dos dados e assegurar que todos os serviços funcionem em sua eficiência máxima. Entenda mais sobre o assunto!

Os desafios de integrar dados em microsserviços

O armazenamento separado de dados para cada serviço é uma premissa dos microsserviços e faz parte de um dos principais objetivos ligados à adoção desse tipo de arquitetura: a garantia de independência dos serviços.

Se diversos serviços usarem o mesmo banco de dados, podem surgir problemas como a interferência de desempenho entre os serviços, falta de escalabilidade e a impossibilidade de usar formato de dados que são mais adequados para cada serviço.

Ou seja, o compartilhamento de banco de dados geralmente é descartado quando os microsserviços são usados.

No entanto, essa abordagem leva a desafios como a redundância de dados, que podem ficar duplicados e levar a problemas de consistência.

Se um dado é atualizado, essa atualização será replicada para todos os serviços?

Nesse contexto, o principal objetivo de gerenciar dados em microsserviços é garantir que os bancos de dados de cada microsserviço continuem funcionando de forma independente um do outro, mas que ainda exista consistência e integração entre eles.

Como gerenciar dados em microsserviços

Ao migrar da arquitetura monolítica para os microsserviços, é preciso ter uma estratégia para extrair os dados do bloco único e levá-los para cada microsserviço.

Geralmente, isso é feito seguindo quatro passos:

  1. Criação do serviço e delimitação dos dados a serem utilizados por ele;
  2. Desacoplamento das aplicações da arquitetura monolítica migrando-as para o microsserviço recém-criado;
  3. Movimentação dos dados do banco compartilhado para um novo banco de dados privado;
  4. Repetição desse processo até que todas as aplicações sejam levadas do monolítico para os microsserviços.

Uma vez separados, é preciso adotar medidas para integrar dados e garantir a persistência e a consistência deles. A missão de integrar dados pode ser realizada por meio de um banco de dados relacional.

Para isso, podem ser utilizados diferentes modelos de consistência de dados.

A seguir, você vai conhecer alguns conceitos ligados a eles.

Consistência Forte versus Consistência Eventual

Consistência forte significa que uma variável que aparece em diferentes partes do sistema só é atualizada quando todos os nós concordam com o novo valor.

Se a variável é alterada em apenas um nó, nenhuma mudança é visível para o cliente. Esse tipo de semântica é usada, por exemplo, em transações.

A consistência eventual permite mais flexibilidade aos microsserviços.

Pode ocorrer, em um sistema distribuído, que um nó seja atualizado e o novo valor exibido, mesmo que os demais nós ainda estejam exibindo um valor desatualizado. Ou seja, a consistência eventual permite que exista um delay entre os nós do sistema. Dessa forma, os dados exibidos não estão incorretos, mas desatualizados.

CRUD versus CQRS

CRUD é o acrônimo para Create, Read, Update and Delete e representa as 4 operações básicas de um banco de dados que são criar, ler, atualizar e apagar.

Usar a arquitetura de CRUD significa que todas as quatro operações são realizadas utilizando o mesmo modelo de banco de dados.

Em contrapartida, com o CQRS (Command Query Responsibility Segregation) a responsabilidade de escrita e de leitura são separadas. Dentro do banco de dados, são utilizadas diferentes classes ou tabelas para a gravação e para a leitura.

Por exemplo, você pode gravar uma tabela completa com todos os dados do cliente.

Para a leitura, você pode criar um modelo de dados diferente para cada transação que contenha apenas os dados necessários para aquela operação.

Ferramentas de ETL

Ferramentas de ETL (Extract, Transformation, Load ou em português extração, transformação e carregamento) são usadas para acessar dados de diferentes fontes.

Os dados extraídos de diferentes bancos são transformados de acordo com as regras predefinidas e, em seguida, são carregados nos seus destinos.

Algumas características das ferramentas de ETL são:

  • a atualização depende de um gatilho externo, que pode ser on demand ou um timer;
  • podem ser integrados dados provenientes de diversos modelos de bancos de dados;
  • a consistência nas ferramentas de ETL é eventual;
  • as ferramentas de ETL permitem integrar dados somente para leitura e não para gravação.

Quer mais informações sobre microsserviços, baixe agora um e-book gratuito e confira nossas dicas sobre como resolver problemas de integrações!