Réplication

Cette page décrit comment les données sont répliquées dans Spanner, les différents types d'instances répliquées Spanner et leurs rôles dans les lectures et les écritures, ainsi que les avantages de la réplication.

Présentation

Spanner effectue automatiquement la réplication au niveau des octets. Comme décrit dans Déroulement des opérations de lecture et d'écriture dans Spanner, il exploite cette fonctionnalité dans le système de fichiers sous-jacent sur lequel il est basé. Spanner écrit les mutations de la base de données dans des fichiers de ce système de fichiers. Le système de fichiers se charge de répliquer et de récupérer les fichiers en cas de défaillance d'une machine ou d'un disque.

Même si le système de fichiers distribué sous-jacent sur lequel Spanner est basé fournit déjà une réplication au niveau des octets, Spanner réplique également les données pour offrir les avantages supplémentaires de la disponibilité des données et de la localité géographique. De façon générale, toutes les données de Spanner sont organisées en lignes. Spanner crée plusieurs copies, ou réplicas, de ces lignes, puis les stocke dans différentes zones géographiques. Spanner utilise un schéma de réplication synchrone basé sur Paxos, dans lequel les instances répliquées votantes votent sur chaque requête d'écriture avant que l'écriture ne soit validée. Cette propriété de réplication synchrone à l'échelle mondiale vous permet de lire les données les plus récentes à partir de n'importe quelle instance répliquée Spanner en lecture/écriture ou en lecture seule.

Spanner crée des répliques de chaque fractionnement de base de données. Une division contient une plage de lignes contiguës, où les lignes sont triées par clé primaire. Toutes les données d'une division sont stockées ensemble dans la réplique, et Spanner diffuse chaque réplique à partir d'une zone de défaillance indépendante. Pour en savoir plus, consultez la présentation des schémas.

Le stockage et la réplication d'un ensemble de partitions sont assurés via Paxos. Au sein de chaque jeu d'instances dupliquées Paxos, une instance dupliquée est élue pour agir en tant qu'instance dupliquée principale. Les instances répliquées principales gèrent les écritures, tandis que les instances répliquées en lecture/écriture ou en lecture seule peuvent répondre à une requête de lecture sans communiquer avec l'instance répliquée principale. Si une lecture forte est demandée, le leader est généralement consulté pour s'assurer que la réplique en lecture seule a reçu toutes les mutations récentes. Pour surveiller le taux de variation et la quantité de données répliquées depuis votre réplica principal vers les réplicas multirégionaux dans la configuration de votre instance, consultez Surveiller la réplication des données.

Avantages de la réplication Spanner

Voici les avantages de la réplication Spanner :

  • Disponibilité des données : l'existence d'un plus grand nombre de copies de vos données garantit une disponibilité accrue de celles-ci vis-à-vis des clients qui ont besoin de les lire. De plus, Spanner peut toujours traiter les écritures même si certaines instances répliquées ne sont pas disponibles, car seule une majorité des instances répliquées votantes est requise pour valider une écriture.

  • Localité géographique : la possibilité de placer des données dans différentes régions et sur différents continents avec Spanner signifie que les données peuvent être géographiquement plus proches des utilisateurs et des services qui en ont besoin, et donc plus rapides d'accès.

  • Expérience de base de données unique : Spanner peut offrir une expérience de base de données unique grâce à sa réplication synchrone et à sa cohérence forte à l'échelle mondiale.

  • Développement d'applications plus simple : comme Spanner est conforme à ACID et offre une cohérence forte globale, les développeurs qui l'utilisent n'ont pas besoin d'ajouter de logique supplémentaire dans leurs applications pour gérer la cohérence éventuelle, ce qui accélère et facilite le développement et la maintenance des applications.

Types d'instances répliquées

Spanner propose trois types d'instances répliquées : les instances répliquées en lecture/écriture, les instances répliquées avec accès en lecture et les instances répliquées témoins. Les régions et les topologies de réplication qui forment les configurations d'instance de base sont fixes :

Vous pouvez créer des configurations d'instance personnalisées et ajouter des instances répliquées en lecture seule pour les configurations d'instance régionales et multirégionales.

Le tableau suivant récapitule les types d'instances répliquées Spanner et leurs propriétés :

Type d'instance dupliquée Peut voter Peut devenir l'instance dupliquée principale Peut diffuser des lectures Possibilité de configurer manuellement l'instance répliquée.
Lecture/écriture Oui oui oui non
Lecture seule Non non oui yes*
Témoin Oui non non non

* Pour en savoir plus, consultez Créer une instance avec une configuration d'instance personnalisée.

Instances répliquées en lecture/écriture

Les instances dupliquées en lecture/écriture prennent en charge les lectures et les écritures. Ces instances dupliquées :

  • conservent une copie complète de vos données ;
  • Diffusent des opérations de lecture
  • Peuvent participer aux votes de validation d'écriture
  • Peuvent participer à l'élection de l'instance dupliquée principale
  • Sont éligibles au rôle d'instance dupliquée principale
  • Sont le seul type de réplica utilisé dans les instances régionales.

Instances répliquées en lecture seule

Les instances répliquées en lecture seule n'acceptent que les lectures, pas les écritures. Ces répliques ne votent pas pour les leaders ni pour les écritures, ce qui vous permet de faire évoluer votre capacité de lecture sans augmenter la taille du quorum nécessaire pour les écritures. Les instances dupliquées en lecture seule :

  • Conservent une copie complète de vos données, qui est répliquée à partir de l'instance répliquée principale en lecture/écriture.
  • Ne participent pas aux votes de validation des écritures, il s'ensuit que l'emplacement des instances dupliquées en lecture seule n'a aucune incidence sur la latence d'écriture ;
  • Ne sont pas éligibles au rôle d'instance dupliquée principale
  • Diffusent des opérations de lecture
  • Peut être mis à l'échelle de manière asymétrique. Pour en savoir plus, consultez Autoscaling asymétrique en lecture seule.
  • ne fonctionnent pas comme une solution de reprise après sinistre (DR) autonome. La disponibilité des instances est déterminée par le quorum des réplicas votants. Si l'instance Spanner est hors connexion, les répliques en lecture seule le sont également peu de temps après et ne peuvent pas traiter les lectures, y compris les lectures non actualisées.
  • S'il s'agit de l'instance répliquée la plus proche de votre application, l'instance répliquée en lecture seule peut généralement diffuser des lectures non actualisées sans nécessiter d'aller-retour vers la région principale, en supposant que l'obsolescence est d'au moins 15 secondes. Vous pouvez également utiliser des lectures dirigées pour acheminer les transactions en lecture seule et les lectures uniques vers un type d'instance répliquée spécifique ou une région dans une configuration d'instance multirégionale. Pour en savoir plus, consultez Lectures dirigées.

    Les lectures fortes peuvent nécessiter un aller-retour vers le réplica principal. L'aller-retour sert uniquement à négocier le code temporel, et non à envoyer les données réelles depuis le nœud principal. La négociation du code temporel est une opération efficace en termes de CPU au niveau du leader, et les données sont généralement déjà en route. Cette communication est gérée automatiquement par le système.

    Pour en savoir plus sur les lectures obsolètes et fortes, consultez la section Dans les lectures.

Instances répliquées en lecture seule facultatives

Vous pouvez créer une configuration d'instance régionale ou multirégionale personnalisée et ajouter des instances répliquées en lecture seule facultatives pour faire évoluer les lectures et accepter les lectures non actualisées à faible latence. L'instance répliquée en lecture seule ajoutée doit se trouver dans une région qui ne fait pas partie de la configuration de l'instance de base prédéfinie. Pour obtenir la liste des régions en lecture seule facultatives que vous pouvez ajouter, consultez la colonne "Région facultative" sous Configurations régionales disponibles et Configurations multirégionales disponibles. Si vous ne voyez pas l'emplacement de l'instance répliquée en lecture seule de votre choix, vous pouvez demander une nouvelle région d'instance répliquée en lecture seule facultative.

Toutes les instances répliquées en lecture seule facultatives sont soumises à des coûts de capacité de calcul, de stockage et de réplication.

De plus, l'ajout d'instances répliquées en lecture seule à une configuration d'instance personnalisée ne modifie pas les SLA Spanner de la configuration d'instance.

Si vous choisissez d'ajouter une instance répliquée en lecture seule à un continent différent de celui de la région principale, nous vous recommandons d'en ajouter au moins deux. Cela permet de maintenir une faible latence de lecture si l'une des répliques en lecture seule devient indisponible.

Il est recommandé de tester les charges de travail liées aux performances dans des instances hors production de la configuration d'instance personnalisée. Vous pouvez consulter le tableau de bord d'analyse comparative de la latence et du débit interrégionaux pour obtenir des données sur la latence interrégionale médiane. Par exemple, si vous créez une configuration d'instance personnalisée avec la configuration de base multirégionale eur6 et une instance répliquée facultative en lecture seule dans us-east1, la latence de lecture forte attendue pour un client dans us-east1 est d'environ 100 millisecondes en raison du délai aller-retour vers la région principale dans europe-west4. Les lectures non actualisées avec une ancienneté suffisante n'entraînent pas d'aller-retour et sont donc beaucoup plus rapides. Vous pouvez également utiliser les insights sur les verrouillages et les transactions pour identifier les transactions qui entraînent des latences élevées.

Pour savoir comment ajouter des instances répliquées en lecture seule facultatives, consultez Créer une configuration d'instance personnalisée.

Instances répliquées témoins

Les instances répliquées témoins n'acceptent pas les lectures, mais participent aux votes de validation des écritures. Ces instances dupliquées permettent d'obtenir plus facilement les quorums d'écriture, sans mobiliser les ressources de stockage et de calcul dont des instances dupliquées en lecture/écriture auraient besoin pour stocker une copie complète des données et diffuser les lectures. Les instances dupliquées témoins :

  • Sont utilisées dans des instances birégionales et multirégionales.
  • Ne conservent pas une copie complète des données
  • Ne diffusent pas de lectures
  • Participent aux votes de validation d'écriture
  • Participent à l'élection de l'instance répliquée principale, mais ne sont pas éligibles à ce rôle

Rôle des répliques dans les opérations d'écriture et de lecture

Cette section décrit le rôle des réplicas dans les opérations d'écriture et de lecture Spanner. Cela vous aidera à comprendre pourquoi Spanner utilise des réplicas témoins dans les configurations birégionales et multirégionales.

Dans les opérations d'écriture

Les requêtes d'écriture du client sont toujours traitées en premier au niveau de l'instance répliquée leader, même s'il existe une instance répliquée non leader plus proche du client ou si l'instance répliquée leader est géographiquement éloignée du client. Si vous utilisez une configuration d'instance birégionale ou multirégionale et que votre application cliente se trouve dans une région non responsable, Spanner utilise le routage optimisé vers la région responsable pour router dynamiquement les transactions en lecture/écriture afin de réduire la latence dans votre base de données. Pour en savoir plus, consultez Routage tenant compte du leader.

L'instance dupliquée principale enregistre l'écriture entrante et la transmet, en parallèle, aux autres instances dupliquées ayant la capacité de voter sur cette écriture. Chaque instance dupliquée éligible effectue son écriture, puis répond à l'instance dupliquée principale en indiquant si elle vote pour ou contre la validation de l'écriture. L'écriture est validée lorsqu'une majorité des réplicas votants (ou quorum d'écriture) acceptent de valider l'écriture. En arrière-plan, toutes les instances dupliquées restantes (non témoins) enregistrent l'écriture. Si une instance dupliquée en lecture/écriture ou en lecture seule accuse un retard dans l'enregistrement des écritures, elle peut se procurer les données manquantes auprès d'une autre instance dupliquée afin de disposer d'une copie complète et à jour des données.

Dans les opérations de lecture

Les requêtes de lecture des clients peuvent être exécutées sur l'instance dupliquée principale ou nécessiter une communication avec celle-ci, selon le mode de simultanéité spécifié dans la requête de lecture.

  • Les lectures qui font partie d'une transaction en lecture/écriture sont diffusées à partir de l'instance dupliquée principale, car c'est cette dernière qui conserve les verrous nécessaires pour appliquer la sérialisabilité.

  • Les méthodes de lecture unique (effectuée en dehors du contexte d'une transaction) et les lectures effectuées dans le cadre d'une transaction en lecture seule peuvent nécessiter une communication avec l'instance dupliquée principale, selon le mode de simultanéité spécifié pour la lecture. Pour en savoir plus sur les modes de simultanéité, consultez Types de lecture.

    • Les requêtes de lecture forte peuvent être présentées à n'importe quelle instance dupliquée en lecture/écriture ou en lecture seule. Si la requête est transmise à une instance dupliquée non principale, cette dernière doit communiquer avec l'instance dupliquée principale pour effectuer la lecture.

    • Les requêtes de lecture non actualisées sont envoyées à l'instance répliquée en lecture seule ou en lecture/écriture disponible la plus proche, qui est à jour par rapport au code temporel de la requête. Il peut s'agir de l'instance répliquée principale si elle est la plus proche du client qui a émis la requête de lecture.

Surveiller la réplication des données

Vous pouvez surveiller le taux de variation et la quantité de données répliquées depuis votre réplica principal vers les réplicas multirégionaux dans la configuration de votre instance. Le taux de variation est exprimé en octets par seconde et la quantité de données en octets. Pour ce faire, utilisez la métrique de surveillance Octets répliqués entre régions (instance/cross_region_replicated_bytes_count).

Pour afficher cette métrique dans la console Google Cloud , procédez comme suit :

  1. Dans la console Google Cloud , accédez à Monitoring :

    Accéder à Monitoring

  2. Dans le menu de navigation, sélectionnez Explorateur de métriques.

  3. Dans le champ Métrique, cliquez sur le menu déroulant Sélectionner une métrique.

  4. Dans le champ Filtrer par nom de ressource ou de métrique, sélectionnez Instance Cloud Spanner > Instance > Octets répliqués dans plusieurs régions, puis cliquez sur Appliquer.

    Cette métrique n'est disponible que sous Métriques actives s'il existe une activité de réplication multirégionale dans votre instance. Sinon, elle apparaît sous Métriques inactives. Par défaut, l'UI filtre et n'affiche que les métriques actives. Décochez la case Actif pour afficher les métriques actives et inactives.

    Le graphique indique le taux de variation (en octets par seconde) des données répliquées sur toutes les instances Spanner au cours de la période spécifiée.

  5. Facultatif : Pour afficher la quantité de données (en octets) répliquées au lieu du taux de variation :

    1. Dans le champ Agrégation, cliquez sur le menu déroulant Somme, puis sélectionnez Configurer l'aligneur.
    2. Dans le champ Fonction d'alignement, cliquez sur le menu déroulant Taux, puis sélectionnez Delta.
    3. Sélectionnez Tableau ou Les deux comme type de tableau au lieu de "Graphique".

      Le tableau indique la quantité de données (en octets) répliquées au cours de la période spécifiée.

  6. Facultatif : Pour afficher l'utilisation d'une instance ou d'un attribut spécifique :

    1. Utilisez le champ Filtre pour ajouter des filtres, tels qu'un ID d'instance, un ID de base de données, une région source, une région de destination ou un tag.
    2. Cliquez sur Ajouter un filtre pour ajouter plusieurs filtres.

Pour obtenir la liste complète des métriques Google Cloud , consultez MétriquesGoogle Cloud .

Étapes suivantes