DEV Community

Cover image for [PT-BR] Shoryuken Vs Sidekiq
Marcelo Junior
Marcelo Junior

Posted on

[PT-BR] Shoryuken Vs Sidekiq

Quando pensamos em processamento em background no mundo Ruby, levamos em conta atualmente com algumas Gems que fazem esse trabalho. Atualmente as que mais se destacam é a Shoryuken e a Sidekiq, e nesse post vamos ver quais são suas diferenças e quando usar cada uma delas.

(Esse artigo leva em conta apenas o Sidekiq em sua versão gratuita)

Sidekiq

Visto que a Gem mais velha é a Sidekiq, é importante olharmos para ela primeiro e entender qual é a função que ela desempenha.

Diferente da Resque, a Sidekiq veio com a ideia de processar os jobs de forma concorrente usando threads. Antes era necessário aumentar o número de processos, para conseguir processar mais jobs, de forma que era usado mais memória.

Image description

Mas também há semelhanças com o Resque, uma delas é o uso do Redis para armazenar e processar os jobs. Por ser um banco in-memory, tanto a escrita como sua leitura são bem rápidas, já que essas operações serão feitas apenas sobre a memória RAM.

Levando em conta esses pontos, porque usar o Shoryuken? O que ele entrega, que o Sidekiq não entrega (pelo menos na versão Free)?

Shoryuken

A principal diferença entre o Shoryuken e o Sidekiq está no armazenamento e processamento dos jobs. O Shoryuken usa o serviço SQS da AWS, ou seja, não temos que configurar e manter uma instancia do Redis, todo esse trabalho fica a cargo da AWS.

Por que usar o SQS?

Segundo a própria AWS os beneficios de se usar o SQS são:

  • Segurança: você controla quem pode enviar e receber mensagens em uma fila do Amazon SQS. Você pode optar pela transmissão de dados sigilosos protegendo o conteúdo das mensagens em filas por meio da criptografia do lado do servidor (SSE) gerenciada pelo Amazon SQS ou das chaves de SSE gerenciadas no AWS Key Management Service (AWS KMS).

  • Durabilidade: para garantir a segurança de suas mensagens, o Amazon SQS as armazena em vários servidores. As filas comuns são compatíveis com a entrega de mensagens pelo menos uma vez, e as filas FIFO são compatíveis com o processamento de mensagens exatamente uma vez e com o modo de alto throughput.

  • Disponibilidade: o Amazon SQS usa infraestrutura redundante para fornecer acesso altamente simultâneo às mensagens, além de alta disponibilidade para produzir e consumir mensagens.

  • Escalabilidade: o Amazon SQS pode processar cada solicitação em buffer de forma independente, escalando de forma transparente para lidar com qualquer aumento ou pico de carga sem nenhuma instrução de provisionamento.

  • Confiabilidade: o Amazon SQS bloqueia suas mensagens durante o processamento, para que vários produtores possam enviar, e vários consumidores possam receber, mensagens ao mesmo tempo.

  • Personalização: suas filas não precisam ser exatamente iguais. Você pode definir um atraso padrão em uma fila, por exemplo. Você pode armazenar o conteúdo de mensagens maiores que 256 KB usando o Amazon Simple Storage Service (Amazon S3) ou o Amazon DynamoDB, com o Amazon SQS mantendo um ponteiro no objeto do Amazon S3, ou pode dividir uma mensagem grande em mensagens menores.

E o melhor, temos 1 milhão de requests grátis para cada mês de uso!

Desempenho

Assim como o Sidekiq, o Shoryuken também utiliza de threads para processar suas mensagens. Há um benchmarking de um artigo que li, mostrando que há um pequena vantagem do Sidekiq sobre o Shoryuken, porém não acredito ser um ponto tão importante quando vamos escolher entre um dos dois.

Armazenamento

Quando usamos o Redis para armazenar os nossos jobs, precisamos ter em mente que esse banco de dados PODE estar apenas na memória RAM. Falo "PODE", porque existe algumas features do Redis que é possivel configurar-lo para que armazene o que está na RAM para o disco rígido. Caso aconteça da instância que está rodando o Redis morra, podemos perder jobs importantes que não foram processados.

Já para o SQS não temos que nos preocupar com isso, poís é garantido pela AWS que não iremos perder de forma alguma nossas mensagens.

Escalabilidade

Outro ponto que temos que levar em conta é a escalabilidade.

Se houver um pico de usuário que não foi planejado anteriormente, o seu sistema está pronto para continuar atuando da mesma maneira em relação ao processamento em background?

Quando usamos o Redis para guardar nossos jobs, temos que nos preocupar com isso.
Já quando usamos o SQS não é necessário, pois de novo, a AWS garante que irá atender todos os produtores e consumidores da fila, mesmo quando houver picos de acesso.

Conclusão

A decisão entre Shoryuken e Sidekiq está mais atrelada a Redis e SQS.

Para decidir qual das duas GEMs usar, deve-se levar em conta o quão importante é não perder o job que será enfileirado e processado.
Além de também levar em conta de há hoje um time que irá conseguir dar manutenção necessária, para que no caso do Redis, não tenha grandes problemas.

Referencias

Top comments (0)