Steps |
---|
Conceitos |
Expondo ferramentas envolvidas |
Criando um cenário |
Resolvendo o cenário |
Referências |
Minhas Redes sociais |
- O que é redis?
R: É um projeto open source que tem como objetivo fornecer uma storage para armazenamento de dados que pode ser utilizado como cache ou message broker. Nele podemos armazenar em geral: Strings, conjunto de dados(Array,List) e etc.
- O que é .NetCore?
R: É um framework desenvolvido pela Microsoft que tem como base linguística: C#, F# por exemplo, além de poder ser utilizados nos sistemas operacionais: Windows, MacOS e distribuições Linux.
- Qual o papel de um "CACHE"?
R: Visa armazenar um conjunto de informações que são frequentemente utilizados afim de recuperá-los de forma mais rápida.
- O que o Docker vai ajudar?
R: A fornecer um conjunto de produtos de plataforma como serviços de forma isolada uns dos outros, trazendo transparência e facilidade na hora de rodar aplicação.
- Como funciona o Cache distribuído?
R: Ele é armazenado em um conjunto de servidores(clusters), no qual tem como objetivo principal de melhorar o desempenho, escalabilidade e resiliência das informações.
Imaginemos que temos uma aplicação que tem como finalidade monitorar o tempo da sua localidade e ele possui uma api rest construida com .Net Core que está passando por grandes instabilidades devido à demora de receber os conteudos de um endpoint X. Esse mesmo endpoint é muito solicitado, conhecido como "CÓDIGO QUENTE", pois a cada 10 ms(milésimo de segundo) é feito um request, tornando o processo de monitoria inválido. Então a equipe chamou o grande "Developer Marcus" pra resolver HAHAH e assim foi feito! Vamos analisar o seguintes passos para entender como ele resolveu?
-
Primeira etapa: - Vamos realizar uma bateria de testes para entender como está a saúde desse nosso endpoint , para isso iremos utilizar uma ferramenta muito boa, porém pouco conhecida que é o Runner do Postman, ideal para realizarmos o teste de requisição em massa no tempo informado lá em cima que é de "10ms". - Já ia esquecendo, antes de rodar o runner, vamos configurar nosso endpoint lá no Postman. - Analisando a imagem acima podemos perceber que nosso endpoint é [https://localhost:32784/weatherforecast] e alguns scripts de testes que fazem alguns checks que serão explicados nos próximos passos. - Vamos startar a aplicação utilizando o comando
docker-compose up -d
e magicamente utilizando o docker e docker compose subirá a aplicação .NetCore + Redis - Rode ocomando docker container ls
, ele irá listar os serviços/produtos rodando dentro dos containers. Deve aparecer algo parecido com isso: - Como falei anteriormente, tinha criado três checks- Response Time: Valida o tempo aceitavel pelo endpoint
- Body: Verifica se está retornando conteúdo no corpo do response.
- Status: Verifica se está retornando 200.
- Vamos abrir nosso runner e preencher os campos iterations com 100 e Delay 10, ou seja ocorrerá 1 requisição no intervalo de 10ms até chegar 100.
- Resultado dessa primeira etapa foi: das 100 solicitações foram reprovadas 100% no check de "response time", porque a taxa de retorno é > 100ms, conforme escrito no teste que é a taxa aceitável pela empresa.
-
Etapa 2:
- Bom agora que sabemos que o ofensor de fato é a nossa latência, vamos aplicar nosso cache distribuido com redis.
- Para isso criei algumas classes:
Nome | Funcionalidade | Endereço |
---|---|---|
ResponseCacheRedis | Responsável por abstrair as funcionalidades de salvar e resgatar o cache | link |
IResponseCacheRedis | Interface que define os contratos a serem respeitados pelo ResponseCacheRedis | link |
Cached | Um atributo/filter de action assíncrono, na qual será responsável por interceptar o request e identificar se tem algo em cache ou não, assim reduzindo drasticamente o tempo de resposta. | link |
Redis | Responsável por aplicar as configurações base do redis: Connection String, Interface, Serviço. | link |
- Etapa 3:
- Agora basta colocar dentro da nossa controller nosso atributo chamado "Cached" especial para ver a mágica acontecer!
- Vamos ver o o resultado:
- WOW o resultado foi fantástico, dos nossos 100 checks de response time , tivemos apenas 7 erros ou seja uma melhoria de 93% de comparado com o resultado anterior. Agora nosso serviço de monitoramento poderá trabalhar de forma muita mais tranquila, pois o tempo de resposta saiu de 1000ms média para 35ms.
- O cache é uma ferramenta muito poderosa e que deve ser utilizada de forma estratégica nas nossas aplicações, afim de resolver alguns cenários de performance.
- Nem todo cenário precisa de cache.
- Existem outros métodos para melhorar performance, como por exemplo: Alocação no GC[Garbage Collection].
Copyright (c) 2020-present, Marcus V.S. Silva [Lowpoc]