Cache (memcache / redis) e vários servidores - melhor estratégia

2

Estamos considerando a melhor estratégia para usar o cache ( memcache ou redis based) em nosso aplicativo ( Symfony2 ). Ele será implantado em várias máquinas separadas (até o momento 3) com balanceamento de carga e bancos de dados replicados separados + um armazenamento compartilhado comum. Há também o quarto servidor, usado principalmente para crons e enviando mensagens em massa. Por favor, note que o cache será freqüentemente usado não só, mas também atualizado devido a mudanças frequentes de dados.

Até agora, temos três tentativas:

  1. colocamos o cache único na quarta máquina e o compartilhamos pelo domínio. O lado ruim é que, quando essa máquina falha, tudo falha.

  2. colocamos caches separados em várias máquinas, cada um com seu próprio cache. A desvantagem é que temos que reservar mais poder de computação para executar tarefas redundantes.

  3. uma máquina reconstrói o cache e, em seguida, o propaga para máquinas separadas (abaixo do mesmo no primeiro caso).

Qual é a melhor opção para lidar com isso?

    
por ex3v 18.04.2014 / 11:27

1 resposta

1

Se eu ler bem as informações publicadas, memcache suportará a replicação de dados em vários servidores por meio de um daemon chamado repcached . Eu devo adicionar eu nunca usei memcache embora.

Eu usei redis e sei que ele suporta configurações Master-Slave.

Em ambos os casos, você pode querer instalar seu daemon em todas as máquinas e ter dados replicados de uma maneira mestre-escravo. Você ajustaria o atraso de atualização para ter uma réplica consistente para sua configuração.

Os motivos incluem:

  • não é necessário configurar o mecanismo de replicação dedicado, seu daemon lidará com a tarefa
  • qualquer uma das máquinas falhará, a configuração continuará funcionando sem problemas, outras máquinas perderão a conectividade com a falha e compartilharão a carga. Você poderia então alternar qualquer um dos três nós restantes para master por enquanto

No lado do aplicativo, talvez você queira se conectar a uma única instância do daemon para leitura e gravação (geralmente a única principal) e fazer com que os escravos replicem dados de maneira preguiçosa.

Isso permitiria obter o melhor desempenho, porque o cache sempre pode acessar dados diretamente diretamente. Esta configuração também manterá uma disponibilidade decente (permitindo tempo X de "dados perdidos" devido a falhas, onde você pode configurar o X como quiser). Você também pode querer balancear a entrada do cache dns, para que as instâncias de seu aplicativo sempre encontrem um cache disponível.

Se você escolher redis , certifique-se de ativar os dois modos de persistência de dados (RDB e AOF).

    
por 18.04.2014 / 13:08