¿Qué son las bases de datos Master y Slave y cómo el emparejamiento hace que las aplicaciones web sean más rápidas?

Una base de datos se “esclava” a un “maestro” cuando recibe un flujo de actualizaciones del maestro en tiempo casi real, funcionando como una copia. El “esclavo” simplemente debe aplicar los cambios que el maestro validó y aprobó.

En principio, uno podría crear una configuración maestro-esclavo transfiriendo archivos realmente rápido de un servidor a otro; pero en la práctica, cada base de datos tiene su propio protocolo de replicación especializado.

Hay muchas razones por las que una réplica hace que las consultas regresen más rápido. Una es que la CPU del maestro está menos cargada de consultas, mientras que la CPU de la réplica está menos cargada de escrituras; entonces hay más CPU disponible para hacer el trabajo. Otra es que los datos, aunque se almacenan nominalmente en el disco, se almacenan en caché en la RAM cuando es posible; y, de hecho, el sistema operativo hace esto si la base de datos lo solicita o no y puede ser impredecible al respecto. En el maestro, las partes de la base de datos recientemente escritas y todo lo que se use para admitir escrituras, por ejemplo, los índices utilizados para verificar la unicidad, estarán en la RAM todo el tiempo; estos deben compartir espacio con las porciones de la base de datos cargadas para atender consultas. La réplica no necesita cargar tantos datos para soportar su carga de escritura (está escribiendo en las mismas partes de la base de datos, pero puede confirmarla ingenuamente sin verificar nada) y hace que haya más RAM disponible para atender consultas.

También está la cuestión del acceso al disco. Cuando los datos se escriben en el maestro, deben escribirse en el disco antes de que el maestro pueda devolver un mensaje de confirmación exitoso a la aplicación. Para escribir en el disco, el sistema operativo debe hacer que la cabeza del disco esté disponible. Si la cabeza del disco está lejos del lugar donde necesitamos escribir el registro actualizado o agregado, entonces debe moverse. Para que la cabeza del disco “busque” puede llevar bastante tiempo, en relación con otras operaciones. Por esta razón, los desarrolladores de bases de datos han elegido inteligentemente que sus bases de datos escriban todos los cambios uno tras otro, uno al lado del otro en el disco, hasta que se hayan escrito algunos cambios. Por lo tanto, la cabeza del disco no necesita moverse del lugar donde estaba cuando se escribió el último registro. Este registro de registros no los almacena de la manera más eficiente: el “montón” de la base de datos es donde se almacenan los registros de manera más eficiente, pero para algunos registros a la vez, no es un problema. De vez en cuando, el software de la base de datos toma todos los cambios registrados y los escribe en el montón. Este último paso, de hecho, mueve la cabeza del disco; pero al menos no lo hemos movido de un lado a otro en todo el montón para cada cambio. La reducción de búsquedas mejora en gran medida el rendimiento promedio de la base de datos.

Las lecturas no permiten este tipo de atajos. Para leer datos, debemos ir a su lugar en el disco y leerlo. Esto reintroduce la presión para mover la cabeza del disco hacia adelante y hacia atrás. Una réplica tiene su propia cabeza (o cabezas) de disco y, por lo tanto, puede asumir parte de esta carga de búsqueda de consultas.

Uno podría obtener estos mismos beneficios al obtener un servidor más grande también; uno con más discos, CPU y RAM. Sin embargo, hacerlo sin tiempo de inactividad es un poco difícil. Y mientras que una réplica le brinda una opción en caso de que el maestro se caiga, un servidor de base de datos grande no es más confiable que un servidor de base de datos pequeño.

“Maestro” y “esclavo” son los dos roles en la replicación MySQL. Del manual (MySQL 5.6 Reference Manual :: 16 Replication):

La replicación permite que los datos de un servidor de base de datos MySQL (el maestro) se repliquen en uno o más servidores de base de datos MySQL (los esclavos). La replicación es asíncrona de manera predeterminada: los esclavos no necesitan conectarse permanentemente para recibir actualizaciones del maestro. Esto significa que las actualizaciones pueden ocurrir en conexiones de larga distancia e incluso en conexiones temporales o intermitentes, como un servicio de acceso telefónico. Dependiendo de la configuración, puede replicar todas las bases de datos, bases de datos seleccionadas o incluso tablas seleccionadas dentro de una base de datos.

Una forma en que esto podría mejorar la latencia en una aplicación web: si tiene un maestro muy cargado, puede distribuir la carga de lectura a uno o más esclavos (agitando a mano cualquier problema de coherencia).

Las bases de datos maestras reciben datos de las aplicaciones. Las bases de datos esclavas obtienen copias de esos datos de los maestros. Por lo tanto, los esclavos son de solo lectura desde el punto de vista de la aplicación, mientras que los maestros son de lectura y escritura.

Las escrituras en una base de datos son más “caras” que las lecturas. La mayoría de las aplicaciones web requieren una proporción mucho mayor de lecturas a escrituras. Por lo tanto, configurar la replicación maestro-esclavo en el escenario correcto permite que una aplicación distribuya sus consultas de manera eficiente. [1] [2]

[1] Replicación de base de datos
[2] Programación para la replicación de bases de datos.

No solo acelera las cosas (al distribuir las lecturas entre los esclavos), sino que también lo hace más seguro. En caso de un problema con el maestro, puede intercambiar cualquier esclavo en un nuevo maestro.

El único inconveniente con esta configuración, como dijo Toby, es la consistencia de los datos durante el proceso de replicación.

More Interesting

¿Las aplicaciones web que ocultan o cambian el reproductor de YouTube (como reembed.com) infringen los Términos y condiciones de YouTube?

¿Por qué tomó tanto tiempo que una aplicación como What'sapp se generalizara y cuán complejo es el código utilizado para hacerlo?

¿Cuál es la mejor empresa de aplicaciones web en Delhi?

¿Qué aplicación web sería la mejor opción para ejecutar un ecosistema integrado, algo como StackExchange.com?

¿Por qué debería implementar el enrutamiento del lado del cliente en una aplicación de una sola página?

¿Cuáles son algunas de las mejores prácticas no conocidas al desarrollar aplicaciones Javascript para la web?

¿Qué software puedo usar para automatizar tareas web como ir al sitio x, descargar el archivo x a q y descargar por fecha de carga?

¿Se puede construir una aplicación web en Python?

¿Es correcto que una aplicación web sea un software que nos permite acceder a un sitio web?

¿Cuáles son las herramientas o marcos de animaciones web utilizados en un sitio web popular como Apple.com?

¿Cuáles son actualmente las mejores opciones para JavaScript del lado del servidor?

¿Qué es una representación visual de una aplicación web?

¿Qué plataformas de alojamiento han utilizado las startups indias para sitios basados ​​en Django y cómo funcionan y escalan las plataformas de alojamiento?

¿Debo construir una aplicación web con herramientas que ya conozco o aprender nuevas?

¿Cuáles son los mejores marcos que debo consultar para mi aplicación web?