Escalando Joomla con división de lectura y escritura de la base de datos


9

Tengo un servidor mysql en América del Norte (usando Amazon RDS) y una réplica de lectura. También tengo una réplica de lectura para una nueva región: Australia.

El servidor australiano es brutalmente lento debido a la naturaleza dinámica de Joomla que lee el servidor DB principal en América del Norte. Intenté usar el proxy mysql para esto para dividir la lectura / escritura, pero esa no es una solución a largo plazo. El proxy Mysql parece estar efectivamente muerto.

¿Qué otras opciones tengo?

Respuestas:


2

Joomla (y otros CMS similares) se han desarrollado para una arquitectura LAMP, teniendo en cuenta el alojamiento común. Por ejemplo, baja latencia entre el servidor web y la base de datos.

Amazon RDS está diseñado para escalar una base de datos relacional en la nube. Por lo tanto, dado que la distribución regional y la redundancia son importantes, se esperan mayores frecuencias

Si tiene requisitos específicos para Amazon RDS, puede configurar:

  • Joomla con un MySQL local para la gestión general del sitio (activos estáticos, fáciles de replicar)
  • Conexión de Amazon RDS, una conexión específica de la aplicación para su desarrollo

Las extensiones de terceros, desarrolladas teniendo en cuenta la baja latencia, no funcionarán con Amazon RDS.


¿No estás seguro de entender tus dos puntos? Continuaré usando RDS, entonces, ¿estás sugiriendo un Master RDS en Australia? También puedo aprovechar una conexión RDS con la réplica de lectura con mis componentes personalizados, pero no con el núcleo de Joomla. Por lo tanto, no estoy seguro de lo que quiere decir con una conexión específica de la aplicación. ¿Puedes por favor elaborar?
Tom

2

Si está utilizando una versión decentemente reciente de PHP, entonces probablemente esté utilizando el controlador php mysqlnd. http://us3.php.net/manual/en/book.mysqlnd.php

Mysqlnd tiene un complemento API personalizado y puede funcionar de la misma manera que el proxy mysql; por ejemplo, http://pecl.php.net/package/mysqlnd_ms es un complemento que divide lecturas y escrituras y tuvo un lanzamiento oficial reciente 9/2013

También tenga en cuenta que Joomla siempre escribe en la tabla de la sesión. Usar memcache o apc solo almacena los datos de la sesión en la memoria caché, no los metadatos de la sesión.

Puede obtener el mismo aumento de rendimiento soltando su tabla #_sessions y recreándola usando el motor de datos de memoria en lugar de innodb o myisam.


1

Cada página generada por Joomla deberá escribir en la tabla de sesión.

Por lo tanto, sugeriría usar memcache o apc para la administración de la sesión. Eso debería ayudarlo a lograr una escritura cero en la base de datos, por lo tanto, la réplica de lectura será suficiente para la mayoría de las páginas.


Ese es un excelente punto. Eso ayudará con las escrituras, pero lo que es realmente importante es ¿cómo uso la réplica de lectura para el núcleo de Joomla? En este momento solo veo proxy mysql o piratear el núcleo como opciones. Supongo que HAproxy también es una opción, pero eso no está tan claro.
Tom

1. AWS admite la replicación ( aws.amazon.com/rds/faqs/#replication ) 2. Otra opción es la replicación incorporada de mysql
Shyam,

Creo que estás malentendido. Ya estoy usando la replicación con RDS. Mi pregunta es cómo puedo dividir las operaciones de lectura de Joomla en esa réplica de lectura.
Tom

0

Otra opción de mejora de la velocidad sería poner a Nginx frente a él como un proxy inverso. Esto reduciría mucho el acceso a la base de datos ya que las páginas comunes nunca irían a joomla y mysql no puede encontrar la configuración del proxy, pero esta es la configuración base

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.