Escalando o Joomla com divisão de leitura e gravação de banco de dados

9

Eu tenho um servidor mysql na América do Norte (usando o Amazon RDS) e uma réplica de leitura. Eu também tenho uma réplica de leitura para uma nova região - a Austrália.

O servidor australiano é brutalmente lento devido à natureza dinâmica do Joomla, lendo o servidor de banco de dados principal na América do Norte. Eu tentei usar o proxy mysql para dividir a leitura / gravação, mas essa não é uma solução a longo prazo. O proxy Mysql parece estar efetivamente morto.

Que outras opções eu tenho?

Tom
fonte

Respostas:

2

O Joomla (e outros CMSs similares) foram desenvolvidos para uma arquitetura LAMP, com a hospedagem comum em mente. Por exemplo, baixa latência entre o servidor da Web e o banco de dados.

O Amazon RDS foi projetado para dimensionar um banco de dados relacional na nuvem. Portanto, como a distribuição regional e a redundância são importantes, são esperadas lantências mais altas.

Se você tiver requisitos específicos solicitando o Amazon RDS, poderá configurar:

  • Joomla com um MySQL local para gerenciamento geral de sites (ativos estáticos, fáceis de replicar)
  • Conexão Amazon RDS, uma conexão específica do aplicativo para o seu desenvolvimento

Extensões de terceiros, desenvolvidas com baixa latência em mente, não funcionarão com o Amazon RDS.

Anibal
fonte
Não tenho certeza se entendi seus dois pontos? Continuarei a usar o RDS, então você está sugerindo um Master RDS na Austrália? Também posso usar uma conexão RDS com a réplica de leitura com meus componentes personalizados, mas não com o núcleo do Joomla. Portanto, não tenha certeza do que você entende por uma conexão específica do aplicativo. Você pode por favor elaborar?
Tom
2

Se você está usando uma versão decentemente recente do PHP, provavelmente está usando o driver php mysqlnd. http://us3.php.net/manual/en/book.mysqlnd.php

O Mysqlnd possui uma API de plug-in personalizado e pode funcionar da mesma maneira que o proxy mysql - por exemplo, http://pecl.php.net/package/mysqlnd_ms é um plug-in que divide leituras e gravações e teve um release oficial recente 9/2013

Lembre-se também, o Joomla sempre grava na tabela de sessões. Usar memcache ou apc apenas armazena os dados da sessão no cache - não os metadados da sessão.

Você pode obter o mesmo aumento de desempenho descartando sua tabela #_sessions e recriá-la usando o mecanismo de dados de memória em vez de innodb ou myisam.

garyamort
fonte
1

Toda página gerada pelo Joomla precisará gravar na tabela de sessões.

Então, sugiro usar o memcache ou o apc para gerenciamento de sessões. Isso deve ajudá-lo a obter gravação zero no banco de dados; portanto, a réplica de leitura será suficiente para a maioria das páginas.

Shyam
fonte
Esse é um ponto excelente. Isso ajudará nas gravações, mas o que é realmente importante é como eu uso a réplica de leitura no núcleo do Joomla? No momento, vejo apenas o proxy mysql ou hackeando o núcleo como opções. Suponho que o HAproxy também seja uma opção, mas isso não é tão claro.
Tom
1. AWS próprio suporte a replicação ( aws.amazon.com/rds/faqs/#replication ) 2. outra opção é mysql embutidos replicação
Shyam
Eu acho que você está entendendo mal. Eu já estou usando replicação com RDS. Minha pergunta é como posso dividir as operações de leitura do Joomla nessa réplica de leitura.
Tom
0

Outra opção de melhoria de velocidade seria colocar o Nginx na frente dele como um proxy reverso. Isso reduziria muito o acesso ao banco de dados, pois as páginas comuns nunca iriam ao joomla e o mysql não consegue encontrar a configuração do proxy, mas essa é a configuração básica

http://docs.joomla.org/Nginx

http://www.nginxtips.com/nginx-joomla-friendly-url/

/programming/23960359/how-to-get-nginx-proxy-caching-to-work-with-dynamic-content

https://stackoverflow.com/a/2655023/6096

tristanbailey
fonte