La séparation lecture/écriture achemine les requêtes d'écriture vers l'instance principale et les requêtes de lecture vers les instances en lecture seule via un seul point de terminaison de proxy de base de données. Utilisez cette fonctionnalité lorsque votre charge de travail comporte beaucoup plus de lectures que d'écritures et que l'instance principale ne peut plus gérer seule la charge de lecture.
Connectez votre application à un seul point de terminaison de proxy de base de données au lieu de gérer des points de terminaison distincts pour l'instance principale et chaque instance en lecture seule. Le proxy gère automatiquement tout le routage.
Quand utiliser la séparation lecture/écriture
La séparation lecture/écriture est adaptée si vous rencontrez l'une des situations suivantes :
Charges de travail intensives en lecture : votre application exécute beaucoup plus de requêtes SELECT que d'opérations INSERT, UPDATE ou DELETE.
Goulot d'étranglement sur l'instance principale : le CPU ou les E/S de l'instance principale sont saturés par le trafic de lecture, même si le volume d'écritures reste gérable.
Mise à l'échelle des lectures sans modifier les connexions : vous souhaitez augmenter la capacité de lecture sans modifier la logique de connexion de votre application.
Avantages
Point de terminaison unique, aucun code de routage : connectez-vous une fois au point de terminaison du proxy de base de données. Le proxy transfère les écritures vers l'instance principale et répartit automatiquement les lectures entre les instances en lecture seule ; il n'est pas nécessaire de maintenir des chaînes de connexion distinctes pour chaque instance.
Latence inférieure à celle d'un proxy personnalisé : la séparation lecture/écriture est intégrée à l'écosystème ApsaraDB RDS. Les données ne transitent pas par des couches intermédiaires supplémentaires, ce qui réduit la latence de réponse par rapport à la construction de votre propre proxy dans le cloud.
Poids de lecture et seuil de latence configurables : spécifiez un poids de lecture pour chaque instance afin de contrôler la répartition des requêtes de lecture. Définissez un seuil de latence de réplication pour exclure automatiquement du pool de lecture les instances en lecture seule dont le retard dépasse ce seuil.
Vérification automatique de l'état et basculement : le proxy surveille en continu chaque instance. Si une instance en lecture seule tombe en panne ou si sa latence de réplication dépasse le seuil défini, le proxy cesse de lui acheminer les lectures et redistribue ces requêtes aux instances saines. Une fois l'instance rétablie, le routage reprend automatiquement.
Créez au moins deux instances en lecture seule pour éviter un point de défaillance unique (SPOF).
Prérequis
Avant d'activer la séparation lecture/écriture, assurez-vous de disposer des éléments suivants :
Une instance ApsaraDB RDS for MySQL exécutant RDS High-availability Edition ou RDS Cluster Edition
Pour RDS High-availability Edition : au moins une instance en lecture seule créée (deux ou plus recommandées)
Pour RDS Cluster Edition : aucune instance en lecture seule n'est requise ; le nœud secondaire est accessible et traite uniquement les requêtes de lecture
La séparation lecture/écriture n'est pas prise en charge sur RDS Basic Edition .
Fonctionnement
Après avoir activé la fonctionnalité de proxy de base de données, la séparation lecture/écriture est automatiquement active ; aucune configuration supplémentaire n'est nécessaire. Accédez à Database Proxy dans le volet de navigation de gauche de la page instance details pour obtenir le point de terminaison du proxy de base de données (anciennement appelé terminal de proxy), puis mettez à jour la chaîne de connexion de votre application pour l'utiliser.
Routage des requêtes
Le proxy dédié achemine chaque requête en fonction de son type :
Instance RDS principale
Instructions d'écriture : INSERT, UPDATE, DELETE, SELECT FOR UPDATE
Toutes les opérations DDL (création ou suppression de bases de données/tables, modifications de schéma et d'autorisations)
Toutes les requêtes au sein des transactions (sauf si la fonctionnalité de fractionnement des transactions est activée)
Transactions non en lecture seule avec un niveau d'isolation Repeatable Read (RR) ou supérieur
Fonctions définies par l'utilisateur et procédures stockées
Tables temporaires créées explicitement
SELECT last_insert_id()Requêtes et mises à jour de variables utilisateur
Instructions
KILLen SQL (différentes des commandes KILL),LOCK TABLE,UNLOCK TABLEInstructions
FLUSHy comprisFLUSH TABLES WITH READ LOCK(FTWRL)SAVEPOINT
Instance RDS principale ou instance RDS en lecture seule
Instructions
SELECTen dehors des transactionsSTART TRANSACTION READ ONLY
Toutes les instances RDS
Mises à jour des variables système
Instructions
USESHOW PROCESSLIST— le proxy dédié agrège et renvoie les processus de toutes les instancesNAMED PREPARECOM_CHANGE_USER,COM_QUIT,COM_SET_OPTION
Comportement des attributs lecture/écriture
Le point de terminaison du proxy de base de données prend en charge deux modes d'attributs lecture/écriture. Le tableau ci-dessous montre le comportement de chaque mode dans des conditions normales et lorsque les instances en lecture seule deviennent indisponibles.
| Attributs lecture/écriture | Méthode de pondération des lectures | Poids de l'instance principale | Normal | Après la suppression de la dernière instance en lecture seule | Lorsque toutes les instances en lecture seule sont défectueuses |
|---|---|---|---|---|---|
| Read-only | Automatique ou Personnalisé | Ne peut pas être spécifié | Principale : aucune requête. Proxy : requêtes de lecture uniquement. | Principale : aucune requête. Proxy : erreur de connexion. | Principale : aucune requête. Proxy : erreur de connexion. |
| Read and write | Automatique | 0 (voir Règles d'allocation du poids de lecture par le système) | Principale : requêtes d'écriture uniquement. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. |
| Personnalisé | Supérieur à 0 | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. | |
| 0 | Principale : requêtes d'écriture uniquement. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. | Principale : requêtes de lecture et d'écriture. Proxy : requêtes de lecture et d'écriture. |
Aucune requête sur l'instance principale : l'instance principale n'est pas impliquée dans le transfert des requêtes en lecture seule.
Erreur de connexion : une erreur de connexion est renvoyée lorsque le point de terminaison du proxy ne dispose d'aucune instance disponible pour le routage.
En mode Read and write avec un poids principal défini sur 0, les requêtes de lecture sont dirigées par défaut vers les instances en lecture seule. Exceptions : toutes les instances en lecture seule sont défectueuses, une indication forcée est spécifiée ou le fractionnement des transactions est activé.
Pour plus de détails sur la configuration, consultez Configurer les attributs lecture/écriture et les poids de lecture .
Étapes suivantes
Après avoir activé la séparation lecture/écriture, vous pouvez :
Configurer les attributs lecture/écriture et les poids de lecture — ajustez les instances qui gèrent les lectures et leur proportion.
Vérifier la séparation lecture/écriture — confirmez que le trafic est correctement routé.
Activer temporairement SQL Explorer et Audit pour inspecter la distribution des instructions SQL entre les instances (note : cette fonctionnalité est facturée séparément ; vous pouvez la désactiver lorsqu'elle n'est plus nécessaire).