Dividindo memcached entre sites?

2

Se eu acabar tendo 4 ou 5 sites médios em um servidor, quero ter certeza de que cada um que requer o memcached tenha pelo menos um espaço alocado. Existe uma maneira simples de fazer isso? As únicas maneiras que vêm à mente seria ter processos separados em portas diferentes para cada um. Existe um caminho mais fácil / diferente? Eu só não quero um site ocupando todo o RAM para o memcached.

Tenho toneladas de memória RAM e digo que quero dar a um dos meus sites de magento exatamente 512mb para o memcached. Eu também quero dar a outro aplicativo personalizado exatamente 512mb para o memcached. Idéias?

    
por Matthew 20.02.2012 / 17:42

6 respostas

3

O Memcached não tem concepção de namespaces, partições ou semelhantes. Portanto, a única maneira seria executar várias instâncias do memcached. Isso não é problema, já que o memcached é ridiculamente simples de configurar (propositadamente).

Pode ser ligado a, por exemplo, 5 portas diferentes (uma para o site de alcance) ou 5 endereços IP diferentes.

Veja aqui um exemplo: link

    
por 03.03.2012 / 20:10
2

Eu concordo com o Niall aqui. Outra possibilidade é esta você pode usar o espaço IP privado. Digamos que seu servidor possa ser atribuído 4 IP 10.x.x.1 a 4. Você pode iniciar o Memcached com 4 servidores e vincular a cada IP, dando assim a todos os sites a mesma porta, mas um IP de memcache diferente.

Além disso, você pode modificar o script de inicialização do memcached para iniciar todos os 4 servidores e pará-los juntos de uma só vez. Isso pode ser usado com o IP ou o método de ligação de porta. Será muito simplesmente coisas para você.

Aqui está um exemplo dos vários servidores de uma só vez Script de inicialização /etc/init.d do servidor Memcached múltiplo que funciona? (consulte a origem do script da pergunta).

Existe uma razão pela qual o memcached requer processos separados, tem mais a ver com o gerenciamento de memória do que com o próprio memcached. Processos separados que compartilham memória não parecem ser uma boa ideia. É melhor deixar o gerenciamento de memória para o sistema.

    
por 29.02.2012 / 21:11
1

Isso não é necessário em tudo. Se você considerar que o armazenamento memcache está realmente funcionando como pilha LRU , torna-se óbvio que não é ideal dar uma porção de memória para site que é usado menos quando o site que deveria ser mais memcached terá uma porção menor de memória e os registros serão enviados mais frequentemente do que o necessário, enquanto o site que receber menos tráfego terá menos dados não utilizados armazenados naquela parte dedicada que poderia ter sido usado melhor para sites mais ativos que, em vez de usar registros do memcached, precisam acessar os dados em algum back-end do SQL.

    
por 04.03.2012 / 20:58
0

Concordo com as duas respostas aqui, mas queria acrescentar mais algumas sugestões.

Eu não acho que haja uma maneira de dividir os objetos com namespace e o uso de RAM associado em uma única instância do memcache. Assim, como as outras respostas dizem, é melhor executar várias instâncias.

Embora isso possa ser uma tarefa fácil, se isso for em grande escala, esses também podem ser bons recursos para analisar:

twemproxy

link

Permite que você configure um proxy na frente do memcache. Isso significa que todos os sites / clientes se conectam aos processos de quebra-nozes, que carregam o equilíbrio entre seus pools de memcache.

moxi

link

Outra solução de proxy para o balanceamento de carga do memcache.

Então, novamente, depende do tamanho da sua infraestrutura, mas essas podem ser ferramentas úteis para você em uma infraestrutura maior ou em crescimento. Dividir isso permitiria que você tivesse várias instâncias menores e, em vez de adicionar, digamos uma nova instância de 512 MB para cada site em que você pudesse manter-se em instâncias ainda menores, de 64 MB, e expandir a uma taxa muito menor.

    
por 01.03.2012 / 19:44
0

É extremamente improvável que o Memcache consuma mais de 32MB de RAM para uma loja Magento. Quando você considera que cada página armazenada em cache tem cerca de 4Kb, você tem um bom escopo para o conteúdo em cache.

Eu sugeriria configurar várias instâncias do Memcached usando soquetes unix (é mais rápido e seguro que o TCP / IP). Você pode iniciar o Memcached com os seguintes sinalizadores

-d
-m 32
-u myuser
-s /home/myuser/cache.sock
-a 0700    

De link

A configuração do seu memcache local.xml seria semelhante a esta, e leia isto para ver porque o slow_backend é necessário - link

<cache>
 <slow_backend>database</slow_backend>
 <fast_backend>Memcached</fast_backend>
 <fast_backend_options>
 <servers>
 <server>
 <host>unix:///home/myuser/cache.sock</host>
<port>0</port>
<persistent>0</persistent>
 </server>
 </servers>
 </fast_backend_options>
 <backend>memcached</backend>
 <memcached>
 <servers>
 <server>
 <host>unix:///home/myuser/cache.sock</host>
<port>0</port>
<persistent>0</persistent>
 </server>
 </servers>
 <compression><!--[CDATA[0]]></compression-->
 <cache_dir><!--[CDATA[]]></cache_dir-->
 <hashed_directory_level><!--[CDATA[]]></hashed_directory_level-->
 <hashed_directory_umask><!--[CDATA[]]></hashed_directory_umask-->
 <file_name_prefix><!--[CDATA[]]></file_name_prefix-->
 </file_name_prefix></hashed_directory_umask></hashed_directory_level></cache_dir></compression></memcached>
</cache>
    
por 12.03.2012 / 01:26
-1

A maneira mais fácil será, como você suspeitar, ter várias instâncias do memcached. O memcache é intencionalmente mantido tão simples quanto possível para a velocidade, de modo que não oferece formas internas de separação como o que você está procurando. Nem sequer oferece qualquer forma de autenticação pela mesma razão!

    
por 27.02.2012 / 21:26

Tags