| Data de elaboração | 11/05/2021 |
| 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) | https://documentos.sistemas.ro.gov.br/books/govdoc; https://aws.amazon.com/pt/redis/; http://desenvolvedor.ninja/redis-o-que-e-e-para-que-serve/; https://inside.contabilizei.com.br/conhecimentos-necessários-antes-de-adotar-micro-serviços-parte-2-8f8a429ffdd; https://www.zappts.com/blog/arquitetura-monolitica-e-microsservicos/; https://www.redhat.com/pt-br/topics/microservices/what-are-microservices; https://blog.geekhunter.com.br/apache-kafka/. |
| 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
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:
[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ários-antes-de-adotar-micro-serviços-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.