Nota: Requisitos de versión
Esta característica requiere el uso de
PECL/mysqlnd_ms
1.3.0-beta o posterior y dePECL/mysqlnd_qc
1.1.0-alpha o posterior.PECL/mysqlnd_ms
debe ser compilado para soportar esta característica. Se requiere PHP 5.4.0 o posterior.
Nota: Configuración: orden de caraga de las extensiones
PECL/mysqlnd_ms
debe cargarse antes quePECL/mysqlnd_qc
, cuando se utilizan extensiones compartidas.
Nota: Estabilidad de la característica
La integración de la caché es de calidad beta.
Nota: Clústeres de MySQL adecuados
Esta característica está pensada para usarla con la Repliación MySQL (copia primaria). Actualmente, no se admiten otros tipos de clústeres MySQL. Los usuarios de tales clústeres deben controlar PECL/mysqlnd_qc manualmente si están insteresados en el almacenamiento en caché de consultas en el lado del servidor.
El enfoque principal de PECL/mysqlnd_ms
es el soporte para los clústeres de replicación
MySQL (copia primaria asíncrona). Los esclavos de un clúster de replicación MySQL
pueden o no reflejar las últimas actualizaciones del servidor.
Los esclavos son asíncronos y pueden demorarse con respecto al maestro. Una lectura desde un esclavo
se considera que es consistencia final desde una perspectiva total del clúster.
El mismo nivel de consistencia es ofrecido por el almacenamiento en caché, usando la estrategia de invalidación de tiempo de vida (TTL). Se pueden servir datos actuales o antiguos. Finalmente, los datos buscados en la caché no estarán disponibles, por lo que es necesario acceder al origen de la caché.
Dado que un esclavo de Replicación MySQL (secundario asíncrono) y una caché local que maneja TTL proporcionan el mismo nivel de servicio, es posible reemplzar de forma transparente un acceso a una base de datos remota con un acceso a la caché local para obtener mejores posibilidades.
A partir de PECL/mysqlnd_ms
1.3.0-beta, el complemento
puede controlar de forma transparente PECL/mysqlnd_ms
1.1.0-alpha
o posterior para almacenar en caché una consulta de solo lectura, si está
explícitamente permitido, configurando una calidad de servicio apropiada a través de
mysqlnd_ms_set_qos().
Por favor, lea la
guía rápida para ver un ejemplo de código.
Ambos complementos deben estar instalados, PECL/mysqlnd_ms
debe ser compilado para soportar la característica de la caché y se ha de utilizar PHP 5.4.0 o posterior.
Las aplicaciones tienen control total sobre el uso de la caché y pueden solicitar datos actuales en cualquier momento si fuera necesario. Se puede habilitar y deshabilitar el uso de la caché durante la ejecución de un script. La caché se usará si mysqlnd_ms_set_qos() establece la calidad del servicio a consistencia final y habilita el uso de la caché. El uso de la caché se deshabilita solicitando niveles de consistencia superiores, por ejemplo, consistencia de sesión (lectura de sus datos). Una vez que la calidad del servicio ha vuelto a consistencia final, la caché se podrá usar de nuevo.
Si la caché está habilitada para sentencias de solo lectura, PECL/mysqlnd_ms
podrá inyectar
sugerencias SQL para controlar la caché
mediante PECL/mysqlnd_qc. Se puede modificar la sentencia SQL si se obtiene de la aplicación.
Se supone que los tratamientos de SQL subsiguientes ignorarán las sugerencias SQL. Una sugerencia
SQL es un comentario SQL. Los comentarios no deben ser ignorados, por ejemplo, por el servidor de la base de datos.
El TTL de una entrada de la caché se calcula en función de cada sentencia. Las aplicaciones pueden establecer un máximo de edad para los datos que quieren recuperar mediante mysqlnd_ms_set_qos(). La edad establece un límite superior aproximado de los segundos que los datos devueltos pueden demorarse con respecto al maestro.
La siguietne lógica se utiliza para calcular el TTL real si la caché está habilitada. La lógica toma en cuenta la demora del esclavo aproximada para elegit un TTL. Si, por ejemplo, hay dos esclavos que se retrasan 5 y 10 y la edad máxima permitida es 60 segundos, el TTL se establece a 50 segundos. Observe que el establecimiento de la edad no es más que una aproximación.
SHOW SLAVE STATUS
a todos los esclavos. No se espera
a que el primer esclavo replique antes de enviarla al segundo esclavo. Los clientes
a menudo esperan bastante tiempo para las réplicas, por lo que se envían todas las peticiones de una vez antes
obtenerlas en un segudo escenario.
Slave_IO_Running=Yes
y Slave_SQL_Running=Yes
.
Si ambas condiciones son verdaderas, se obtiene el valor de Seconds_Behind_Master
.
En caso de cualquier error o de que las condiciones fallen, se establece un error en la conexión esclava.
Se salta cualquier conexión esclava para el resto del filtrado de conexiones.
Seconds_Behind_Master
de
todos los esclavos que hayan pasado las condiciones previas. Se resta el valor de
la edad máxima de mysqlnd_ms_set_qos() proporcionada por el usuario.
Se utiliza el resultado como un TTL.
PECL/mysqlnd_qc
.
PECL/mysqlnd_qc
después de
PECL/mysqlnd_ms
. Así, verá
todas las modificaciones de consultas hechas por PECL/mysqlnd_ms
y
almacenará en caché la consulta, si se le ordenó hacerlo.
El algoritmo puede parecer costoso. SHOW SLAVE STATUS
es una
operación muy rápida. Dado un número suficiente de peticiones y de usos de la caché por segundo, el coste de
comprobar la demora de los esclavos puede superar fácilmente el coste de la decisiones de la caché.
Las sugerencias sobre un algoritmo mejor siempre son bienvenidas.