Rails: Cómo dividir la consulta de escritura / lectura en la base de datos maestro / esclavo

Mi sitio web tiene un tráfico de lectura muy pesado. Mucho más pesado que escribir tráfico.

Para mejorar el rendimiento de mi sitio web, he pensado en ir con la configuración de la base de datos maestro / esclavo .

La octupus gem parece proporcionar lo que quiero, pero como mi aplicación es enorme, no puedo recorrer millones de líneas de código fuente para cambiar la distribución de la consulta (el envío de la consulta de lectura al servidor esclavo y la consulta de escritura al servidor maestro).

MySQL Proxy parece ser una excelente manera de resolver este problema, pero como está en versión alpha, no quiero usarlo.

Entonces, mi pregunta es ¿cuál es la mejor manera de dividir las consultas de lectura / escritura en el servidor maestro / esclavo ?

¿Es posible dividir la consulta de lectura / escritura sin usar gems en los Rails?

Con octopus gem, no tiene que cambiar gran parte de su código para hacer que las consultas de escritura vayan al servidor master db y las consultas de lectura a los esclavos.

Es un archivo de configuración simple, como se indica aquí .

He intentado esto en el pasado y funcionó bastante bien. El único problema para mí es que cuando el esclavo está inactivo, no “redirige” las consultas al servidor de db maestro, como pregunté aquí .

Pero, si desea configurar cada destino de consulta individual, tomará algo de trabajo.

Le sugiero que comience a mapear sus consultas más frecuentes y aquellas que tardan más en responder. Conociendo esas consultas, puedes optimizarlas individualmente. Esto ya puede resolver parte del problema.

Si después de eso aún necesitas la replicación maestro-esclavo, usa la gem pulpo para cambiar el comportamiento solo en las pocas consultas complicadas.

Saqué 2 gems, Pulpo y Makara. He escrito un blog comparando estas 2 gems: https://ypoonawala.wordpress.com/2015/11/15/octopus-vs-makara-read-write-adapters-for-activerecord-2/

En mi opinión, Makara funciona bien y compensa los problemas con Octopus.

    Intereting Posts