DEV Community

Cover image for Performance no REDIS com Pipelining
Jilcimar Fernandes
Jilcimar Fernandes

Posted on

Performance no REDIS com Pipelining

O que é o Redis Pipelining?

É uma técnica para melhorar o desempenho que permite enviar vários comandos de uma só vez sem esperar pela resposta de cada comando individual.

Fonte: https://redis.io/docs/manual/pipelining/

Através dessa imagem é possível ver a diferença que o pipelining faz na execução:

Performance do Redis com e sem o Pipelining

Fonte: https://kn100.me/redis-pipelining/

Quando ele é útil?

O Pipeline é muito útil em situações em que há muitas operações de leitura/escrita no Redis. Ao usar um pipeline, é possível reduzir significativamente o custo de latência associado ao tempo de ida e volta, além disso, ele melhora muito o número de operações que você pode executar por segundo.

Outro uso interessante para o Pipeline, é para implementar transações atômicas, garantindo que um conjunto de operações seja executado como uma única unidade. Isso é possível porque o Redis Pipeline permite que os comandos sejam agrupados em uma transação que só será executada quando todos os comandos no pipeline forem enviados e retornarem com sucesso.

Caso de uso

No trabalho, passei por uma situação a qual precisava melhorar a performance de uma Lambda (Python) que consumia de uma fila SQS e em seguida realizava várias operações de leitura e escrita no REDIS.

PROBLEMA
Devido a quantidade de operações realizadas a cada mensagem recebida, algumas acabavam não sendo processadas devido o timeout de 30 segundos configurado na lambda.
Gráfico de duração da Lambda
Gráfico de duração da execução (em milissegundos) da lambda antes de aplicar as técnicas de performance, chegando a picos de 27 segundos de duração:

A fila a qual a lambda consumia as mensagens, recebia cargas com até 2.500 mensagens para processar:

Dados da fila

RESULTADOS APÓS PERFORMANCE

Após aplicar o Redis pipelining, alguns dos resultados que obtivemos na Lambda:

Desempenho da Lambda

O maior pico de duração foi de 12,6 segundos.

Conclusão

O resultado foi bem positivo, tendo em vista que na maioria dos casos chegaram a reduzir pela metade o tempo de duração, além disto, em cenários de processamento com o mesmo número de mensagem não tivemos mais nenhum caso de timeout.

Após o uso do Redis Pipelining, também foram feitas algumas refatorações e mudanças na forma de processar a mensagem para melhorar ainda mais o tempo de execução da lambda.

Top comments (0)