[Gov.Doc] Utilização de microsserviços
Cache - Área de memória onde é mantida uma cópia temporária de dados armazenados. 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. 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. 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. Figura 1: Representação de um sistema Monolítico 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. Figura 2: Representação de um sistema em Microsserviços 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. Figura 3: Representação de um exemplo de separação para 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. Figura 4: Representação de filas de mensagens KAFKA 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. Figura 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. 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; [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.Data:
11/05/
Data de elaboração
23/04/21
Autores:
Responsável pelo estudo
Assessor)Acessor)Assessor)Acessor)Assessor)Acessor)Assessor)Acessora)Assessor)Acessor)
Equipe do estudo
Tambaqui
Alvo
Gov.Doc
Origem
1.
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
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 Kafka2.1. Introdução3.2. Desenvolvimento3.2.1 Arquiteturas de aplicações3.2.2 Arquitetura Monolítica3.2.3 Arquitetura de Microsserviços3.2.4 Separação de serviços do Gov.Doc3.2.5 Comunicação entre microsserviços3.2.6 Banco de Dados em microsserviços4.3. Conclusão
- 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.5.4. Referências
6. 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