mysqlnd_ms_set_qos

(PECL mysqlnd_ms < 1.2.0)

mysqlnd_ms_set_qosEstablece la calidad de servicio necesaria de un clúster

Descripción

mysqlnd_ms_set_qos ( mixed $connection , int $service_level [, int $service_level_option [, mixed $option_value ]] ) : bool

Establece la calidad de servicio necesaria de un clúster. Un clúster de bases de datos proporciona una cierta calidad de servicio al usuario dependiendo de su arquitectura. Un aspecto muy importante de la calidad de servicio es el nivel de consistencia que el clúster puede ofrece. La consistencia predeterminada de un clúster de replicación MySQL asíncrono es la final para lecturas de esclavos: un esclavo puede servir datos antiguos, datos actuales, o podría no poseer la petición de datos, debido a que no está sincronizado con el maestro. En un clúster de replicación MySQL, únicamente los accesos al maestro pueden proporcionar consistencia fuerte, la cual promete que todos los clientes ven los cambios de los demás clientes.

PECL/mysqlnd_ms oculta la complejidad de la elección de los nodos apropiados para llevar a cabo un cierto nivel de servicio de un clúster. El filtro "Calidad de Servicio" implementa la lógica necesaria. El filtro puede configurarse tanto en el fichero de configuración del comlemento como en tiempo de ejecución usando mysqlnd_ms_set_qos().

Se pueden lograr resultados similares con PECL mysqlnd_ms < 1.2.0, si se usan sugerencias SQL para forzar el uso de un tipo de nodo en particular, o usando la opción de configuración master_on_write del complemento. El primer método requiere más código y causa más trabajo en el lado de la aplicación. El segundo método es menos refinado que usar el filtro de calidad de servicio. Los ajustes realizados a través de la llamada a la función se puden revertir, como se muestra en el ejemplo de abajo. Éste cabia temporalmente a un nivel de servicio superior (consistencia de sesión, lectura de sus escrituras) y vuelve al predeterminado del clúster después de haber realizado todas las operaciones que requieren el servicio mejor. De esta forma, la carga de lectura en el maestro se puede minimizar en comparación con el uso de master_on_write, el cual continuaría usando el maestro después de la primera escritura.

Desde 1.5.0, las llamadas fallarán cuando se realizan en mitad de una transacción si la adhesión de transacciones está habilitada y se han detecetado límites en la transacción. properly.

Parámetros

connection

Un gestor de conexión de PECL/mysqlnd_ms hacia un servidor MySQL del tipo PDO_MYSQL, mysqli> o ext/mysql para el cual establecer un nivel de servicio. Este gestor de conexión se obtiene al abrir una conexión con un nombre de equipo anfitrión que coincide con la entrada del fichero de configuración de mysqlnd_ms usando cualquier de las tres extensiones del controlador de MySQL anteoriores.

service_level

El nivel de servicio solicitado: MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL, MYSQLND_MS_QOS_CONSISTENCY_SESSION o MYSQLND_MS_QOS_CONSISTENCY_STRONG.

service_level_option

Una opción para parametrizar el nivel de servicio solicitado. Esta opción puede ser MYSQLND_MS_QOS_OPTION_GTID o MYSQLND_MS_QOS_OPTION_AGE.

La opción MYSQLND_MS_QOS_OPTION_GTID se puede usar para refinar el nivel de servcicio MYSQLND_MS_QOS_CONSISTENCY_SESSION. Se debe combinar con un cuarto parámetro, option_value. Éste debería ser un ID de transacciones global obtenido desde mysqlnd_ms_get_last_gtid(). Si se establece, el complemento considerará los servidores maestros y los esclavos asíncronos para la consistencia de sesión (lectura de sus escrituras). Si no, solamente se usarán los maestros para conseguir la consistencia de sesión. Un esclavo se considera acutalizado y comprobado si ya ha replicado el ID de transacciones global de option_value. Observe que la búsqueda de esclavos apropiados es una operación cara y lenta. Use con moderación esta característica, si el maestro no puede manejar solo la carga de lectura.

La opción MYSQLND_MS_QOS_OPTION_AGE se puede combinar con el nivel de servicio MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL, para filtrar esclavos asíncronos que se demoren respecto al maestro más segundos que option_value. Si se establece, el complemento solamente considerará a los esclavos para la lectura si SHOW SLAVE STATUS notifica que Slave_IO_Running=Yes, Slave_SQL_Running=Yes y Seconds_Behind_Master <= option_value. Observe que la búsqueda de esclavos apropiados es una operación cara y lenta. Use con moderación esta característica en la versión 1.2.0. En versiones futuras se podría mejorar el algoritmo usado para identificar candidatos. Véase el manual de referencia de MySQL para la precisión, exactitud y limitaciones del comando administrativo SHOW SLAVE STATUS de MySQL.

option_value

El valor del parámetro de la opción del nivel de servicio. Véase también el parámetro service_level_option.

Valores devueltos

Devuelve TRUE si el nivel de servicio de la conexión ha sido cambiado en la solicitud. De otro modo, devuelve FALSE

Notas

Nota:

mysqlnd_ms_set_qos() requiere PHP >= 5.4.0 y PECL mysqlnd_ms >= 1.2.0. Internamente, se utiliza una funcionalidad en C de la biblioteca mysqlnd no disponble en PHP 5.3.

Observe que todas las versiones de producción de MySQL 5.6 no proporcionan clientes con suficiente información para usar GTID para forzar la consistencia de sesión. En el peor de los casos, el complemento eligirá solamente el maestro.

Ejemplos

Ejemplo #1 Ejemplo de mysqlnd_ms_set_qos()

<?php
/* Abrir una conexión mysqlnd_ms usando la extensión mysqli, PDO_MySQL o mysql */
$mysqli = new mysqli("myapp""nombre_usuario""contraseña""base_datos");
if (!
$mysqli)
  
/* Por supuesto, su manejo de errores es mejor... */
  
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));

/* Consistencia de sesión: lectura de sus escrituras */
$ret mysqlnd_ms_set_qos($mysqliMYSQLND_MS_QOS_CONSISTENCY_SESSION);
if (!
$ret)
  die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));

/* Se usará el maestro y se devolverán datos actuales, el cliente puede ver su última escritura */
if (!$res $mysqli->query("SELECT item, price FROM orders WHERE order_id = 1"))
  die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));

/* Volver a lo predeterminado: usar todos los esclavos y maestros permitidos, se pueden obtener datos antiguos */
if (!mysqlnd_ms_set_qos($mysqliMYSQLND_MS_QOS_CONSISTENCY_EVENTUAL))
  die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));
?>

Ver también