Ir para o conteúdo principal

[Gov.Doc] Utilização de microsserviços

Data de elaboração 11/05/21
Responsável pelo estudo
  • Alan da Silva Souza - (Acessor)
  • Gabriel Santi Binda - (Acessor)
  • João Vitor Paulino Nobre - (Acessor)
  • Raissa de Sousa Stolduski - (Acessora)
  • Taillon Miguel Gonçalves - (Acessor)
Equipe do estudo Tambaqui
Alvo Gov.Doc
Origem
  • Melhoria: melhorar alguma implementação já feita.
Objetivo O objetivo desse estudo é abordar a análise da utilização de microsserviços no sistema Gov.Doc que atualmente é monolítico, quais as alterações devem ser realizadas e com quais tecnologias.
Documentação correlata (opcional)
Observações
Glossário

Cache - Área de memória onde é mantida uma cópia temporária de dados armazenados.
Container -
É um ambiente isolado onde o software é executado.
HTTP - Protocolo de comunicação utilizado para sistemas de informação.
Kafka - É um sistema de mensagens usado para criar aplicações com fluxo de dados contínuo.
Openshift -
Gerenciamento de softwares baseados em contêineres.
RabbitMQ - É um servidor de mensageria de código aberto.
Producer - É a aplicação que envia mensagens no Kafka.
Consumer - É aplicação que recebe as mensagens do Kafka

1. Introdução

O Gov.Doc nasceu com um grande potencial de crescimento, e para que futuramente não haja problemas de expansão e manutenção, mas também, para que melhore no desempenho, escalabilidade e publicação, foi idealizada pelo time a mudança de arquitetura monolítica para a de microsserviços, sendo implantada com o tempo, aproveitando que o sistema ainda não é muito grande, facilitando sua migração para microsserviços.

2. Desenvolvimento
2.1 Arquiteturas de aplicações

Uma arquitetura de aplicação indica como o projeto é construído e integrado, geralmente para aplicações web são utilizados os seguintes padrões de arquitetura, sistemas com arquitetura Monolítica ou sistemas com arquitetura de Microsserviços.

2.2 Arquitetura Monolítica

Um sistema que segue essa arquitetura, é um sistema único e não dividido, concentrado e interligado apenas em um projeto e rodando apenas em um único processo, porém, possuindo suas vantagens e desvantagens.

monolithic-vs-microservices.pngFigura 1: Representação de um sistema Monolítico

2.3 Arquitetura de Microsserviços

A arquitetura de microsserviços consiste em estruturar seu sistema através de uma coleção de serviços independentes se comunicando e cada um com sua responsabilidade, melhorando a escalabilidade, implementação, publicação e manutenção.

monolithic-vs-microservices - Copia2.pngFigura 2: Representação de um sistema em Microsserviços

2.4 Separação de serviços do Gov.Doc

Para iniciar a migração de arquitetura no Gov.Doc, foram analisados e escolhidos alguns serviços que potencialmente podem se tornar microsserviços, sendo eles o serviço de Log do sistema e o serviço de envio de E-mail. Para executar essa separação, serão criados dois projetos separados cada um com sua responsabilidade e executados em contêineres no openshift.

image-1620756476161.pngFigura 3: Representação de um exemplo de separação para microsserviços

2.5 Comunicação entre microsserviços

A comunicação entre os microsserviços e da aplicação web pode ser feita com de requisições HTTP (REST) através de mensagens em filas como RabbitMQ ou Kafka, onde atualmente, existe um projeto de implantação. O funcionamento é relativamente simples, um microserviço publica uma mensagem na fila (Producer), essa mensagem pode ser uma requisição para outro microserviço, que está consumindo a fila (Consumer), que recebe essa mensagem e trata a requisição. O Conceito de filas é indicado para microsserviços, para que não haja nenhuma condição de corrida ou inconsistência no banco, para coordenar os microsserviços e para aumentar a escalabilidade, confiabilidade e desempenho.

image-1620752480475.pngFigura 4: Representação de filas de mensagens KAFKA

2.6 Banco de Dados em microsserviços

Outra grande questão no ambiente de microsserviços é o banco de dados, que com o aumento de requisições e separação para a arquitetura de microsserviços, deverá ser gerenciado de outra maneira. Foram levantadas várias formas de se tratar o banco de dados nos microsserviços, uma delas é o Caching.

image-1620754565684.pngFigura 5: Representação de caching do banco de dados

O caching atua como uma camada de acesso a dados (cache em memória) adjacente ao seu banco de dados, que os seus aplicativos podem utilizar para melhorar o desempenho, permitindo aumentar a taxa de transferência e diminuir a latência de recuperação dos dados. Uma tecnologia que implementa o cache é o Redis que além de armazenar o banco em cache, também pode auxiliar em filas e mensagens de requisições.

3. Conclusão

Após todo o estudo de utilização de microsserviços, pode se entender que a implementação de microsserviços no sistema Gov.Doc terá de ser feito em várias etapas, pois existem várias tecnologias que devem ser utilizadas para que tudo funcione corretamente, alguns tópicos valem a pena serem estudados em spikes futuras, como:

- Implementação e uso de filas de mensagens Kafka;
- Comunicação entre microsserviços
- Separação do sistema Gov.Doc em microsserviços;
- Utilização de Caching de banco de dados no EF Core.

4. Referências

[1] AMAZON WEB SERVICES. Redis, Datastore de código aberto, rápido e na memória e para uso como banco de dados, cache, agente de mensagens e fila. 2020. Disponível em: https://aws.amazon.com/pt/redis/. Acesso em: 11 maio 2021.

[2] DAKAR, Romulo. Redis – o que é e para que serve? 2015. Disponível em: http://desenvolvedor.ninja/redis-o-que-e-e-para-que-serve/. Acesso em: 11 maio 2021.

[3] LENZ, Thiago Alexandre. Conhecimentos necessários antes de adotar microsserviços. 2019. Disponível em: https://inside.contabilizei.com.br/conhecimentos-necess%C3%A1rios-antes-de-adotar-micro-servi%C3%A7os-parte-2-8f8a429ffdd. Acesso em: 11 maio 2021

[4] PENNA, William. Arquitetura Monolítica e Microsserviços. Disponível em: https://www.zappts.com/blog/arquitetura-monolitica-e-microsservicos/. Acesso em: 11 maio 2021.

[5] REDHAT. O que são os microsserviços? Disponível em: https://www.redhat.com/pt-br/topics/microservices/what-are-microservices. Acesso em: 11 maio 2021.

[6] REIS, Marco. Como fazer a integração de dados com Apache Kafka. 2021. Disponível em: https://blog.geekhunter.com.br/apache-kafka/. Acesso em: 11 maio 2021.