Como o memcached distribuído deve aumentar o desempenho se estiver fazendo chamadas de rede?

3

link

Saudações, adoro o memcached, mas até agora só o usei em configurações de máquina única como um cache local. Li extensivamente sobre a natureza distribuída do memcached e como os clientes determinam em uma lista de servidores de memcached para gravar e ler. Pelo que entendi, escolhendo um algoritmo de hashing determinístico, podemos garantir que os dados sejam sempre gravados e lidos no servidor correto, apesar de a origem da solicitação ter sido feita.

Então, minha pergunta é, considere a seguinte situação:

Servidor A em Nova York, Servidor B em Los Angeles. Ambos são espelhos um do outro. Ambos estão executando bancos de dados mysql com replicação. Não importa realmente no caso de somente leitura, mas digamos que A é o mestre e B é o escravo. Ambos estão executando o memcached e seus clientes têm uma lista dos servidores do memcached (Servidores A e B, neste caso).

Um determinado dado, digamos, o corpo de uma postagem do blog, é lido do banco de dados no Servidor A e, consequentemente, é armazenado no memcached de A. Um usuário diferente em uma parte diferente do país acessa o Servidor B e solicita a mesma postagem no blog. O cliente memcached do Servidor B verifica e vê que, de fato, esses dados foram armazenados em cache, de modo que eles alcançam OVER THE NETWORK para capturar os dados do memcached do Servidor A.

Agora, em primeiro lugar, o meu entendimento está correto até agora? Por favor, aponte quaisquer erros ou suposições incorretas que fiz :).

Então, minha pergunta é: como isso deve melhorar o desempenho? Parece que um plano melhor nesse caso seria apenas ter o Servidor A e o Servidor B executando suas próprias instâncias de memcached separadas como um cache local (a figura superior em link ), mas isso vai contra toda a ideia do design distribuído. Então, qual é a vantagem de ser distribuído? Uma operação de rede do Servidor B para o Servidor A é muito mais lenta do que a leitura do Servidor B a partir de seu próprio banco de dados local.

Por favor me ajude a entender. Eu sinto que há algo que eu estou faltando aqui sobre como funciona o memcached.

Obrigado! K

    
por K J 09.04.2011 / 09:48

1 resposta

6

A resposta curta para a sua pergunta é: não é.

O memcached distribuído faz sentido onde o sistema é capaz de recuperar respostas válidas do cache, em vez de fazer consultas / cálculos dispendiosos para obter a resposta correta.

No caso do memcached, falando através da internet com latências de talvez 60-100ms ou mais, não há realmente nada a ganhar. É provável que o seu sistema consiga pesquisar / calcular respostas corretas muito mais rápido do que encontrar a resposta correta em um cache na metade da Internet.

Você precisa de uma rede gigabit (ou mais rápida) entre os nós memcached para obter quaisquer benefícios de desempenho. Sua configuração foi projetada para desempenho baseado em failover e geográfico. Se seus servidores A e B fossem realmente A1, A2 e B1, o memcached B2 poderia ser para você.

    
por 09.04.2011 / 20:03

Tags