Ir para o conteúdo principal

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

Data:

11/05/

Autores:

    Data de elaboração23/04/21

    Responsável pelo estudo
    • Alan da Silva Souza - (Assessor)Acessor)
    • Gabriel Santi Binda - (Assessor)Acessor)
    • João Vitor Paulino Nobre - (Assessor)Acessor)
    • Raissa de Sousa Stolduski - (Assessor)Acessora)
    • Taillon Miguel Gonçalves - (Assessor)Acessor)
    Equipe do estudoTambaqui
    AlvoGov.Doc
    Origem
    • Melhoria: melhorar alguma implementação já feita.
    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

    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

    2.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.

    3.2. Desenvolvimento
    3.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.

    3.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

    3.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

    3.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

    3.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

    3.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.

    4.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.

    5.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.

    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