Melhore o desempenho do Redis com escravos apenas de persistência

O Redis é uma parte essencial de nossa infraestrutura no Deal Grocer e no Taste Central e, durante uma de nossas implantações de recurso de rotina, notamos um aumento de picos de latência ocorrendo em ambos os sites.

Agora, em segundo plano, nossos servidores Redis estão sendo executados em instâncias AWS EC2 e executam instantâneos para um volume EBS.

Acontece que isso já foi observado e documentado. De http://redis.io/topics/admin :

O uso da persistência do Redis com volumes EC2 EBS não é recomendado, pois o desempenho do EBS geralmente é ruim. Use o armazenamento efêmero para persistir e, em seguida, mova seus arquivos de persistência para o EBS quando possível.
<br /> <br />
Se você estiver implantando usando uma máquina virtual que usa o hipervisor Xen, você poderá enfrentar tempos de fork () lentos. Isso pode bloquear o Redis de alguns milissegundos até alguns segundos, dependendo do tamanho do conjunto de dados. Verifique a página de latência para mais informações. Esse problema não é comum a outros hipervisores.

EC2 usa uma versão altamente personalizada do Xen. De http://redis.io/topics/latency :

Linux VM no EC2 (Xen) RSS de 6,1 GB bifurcado em 1460 milissegundos (239,3 milissegundos por GB)

Sim, realmente horrível.

A solução: mover todos os nossos instantâneos para escravos apenas de persistência. Como já tínhamos uma configuração de replicação mestre / escravo, isso foi bastante simples de fazer.

No mestre :

redis 127.0.0.1:XXXX> config set save ""
OK

E é isso. Ainda não experimentamos um pico pronunciado de latência ou recebemos umRedis::Timeout</code> from our Redis clients since making this change.