Réplication

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

Présentation

Spanner se réplique automatiquement au niveau de l'octet. Comme décrit dans la section Déroulement des opérations de lecture et d'écriture Spanner, il tire parti de cette fonctionnalité du système de fichiers sous-jacent sur lequel elle repose. Spanner écrit les mutations de base de données dans les fichiers de ce système de fichiers, qui 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 repose et fournit déjà une réplication au niveau des octets, Spanner réplique également les données pour offrir les avantages supplémentaires qu'elles procurent en termes de disponibilité et de localité géographique. De manière générale, toutes les données présentes dans Spanner sont organisées en lignes. Spanner crée plusieurs copies (ou "instances répliquées") 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 de vote reçoivent un vote sur chaque requête d'écriture avant la validation de l'écriture. Cette propriété de réplication synchrone globalement vous permet de lire les données les plus récentes de n'importe quelle instance dupliquée en lecture/écriture ou en lecture seule Spanner.

Spanner crée des instances répliquées de chaque fraction de base de données. Un fractionnement contient une plage de lignes contiguës, où les lignes sont triées par clé primaire. Toutes les données d'une partition sont stockées physiquement ensemble dans l'instance dupliquée, et Spanner diffuse chaque instance dupliquée depuis une zone de défaillance indépendante. Pour en savoir plus, consultez la page À propos 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 dupliquées principales sont responsables du traitement des écritures, alors que toute instance dupliquée en lecture/écriture ou en lecture seule peut diffuser une requête de lecture sans communiquer avec l'instance dupliquée principale (toutefois, si une lecture forte est demandée, l'instance dupliquée principale est généralement consultée afin de garantir que l'instance dupliquée en lecture seule a reçu toutes les modifications récentes).

Avantages de la réplication Spanner

Les avantages de la réplication Spanner sont les suivants:

  • 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. En outre, Spanner peut toujours diffuser des écritures même si certaines des instances répliquées ne sont pas disponibles, car seule la majorité des instances répliquées participant au vote sont nécessaires pour valider une écriture.

  • Localité géographique: avec Spanner, la possibilité de placer des données dans différentes régions et différents continents signifie que les données des utilisateurs et des services qui en ont besoin peuvent être géographiquement proches 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 en raison de sa réplication synchrone et de sa cohérence forte à l'échelle mondiale.

  • Développement d'applications simplifié: Spanner étant conforme à la norme ACID et offrant une cohérence forte à l'échelle mondiale, les développeurs qui travaillent avec Spanner n'ont pas besoin d'ajouter de logique supplémentaire dans leurs applications pour gérer la cohérence à terme. Le développement des applications et leur maintenance ultérieure sont donc plus rapides et plus simples.

Types d'instances dupliquées

Spanner propose trois types d'instances dupliquées: les instances dupliquées en lecture/écriture, les instances dupliquées en lecture seule et les instances dupliquées témoins. Les régions et les topologies de réplication qui constituent les configurations d'instance de base sont fixes. Les configurations d'instances régionales de base n'utilisent que des instances répliquées en lecture/écriture. Les configurations d'instances birégionales de base utilisent des instances dupliquées en lecture/écriture et des instances dupliquées témoins, tandis que les configurations d'instances multirégionales de base combinent les trois types d'instances dupliquées. Vous pouvez créer des configurations d'instances personnalisées et ajouter des instances dupliquées en lecture seule supplémentaires pour les configurations d'instances régionales et multirégionales.

Le tableau suivant récapitule les types d'instances dupliqué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 Peut configurer l'instance répliquée manuellement
Lecture/écriture Oui oui oui no
Lecture seule no non oui oui*
Témoin oui Non non no

* Pour en savoir plus, découvrez comment 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 utilisé dans les instances régionales.

Instances dupliquées en lecture seule

Les instances répliquées en lecture seule n'acceptent que les lectures, mais pas les écritures. Ces instances répliquées ne votent pas pour des instances optimales ni pour la validation des écritures. Elles vous permettent donc de faire évoluer votre capacité de lecture sans augmenter le quorum nécessaire pour les écritures. Les instances dupliquées en lecture seule :

  • Conservez une copie complète de vos données, qui est répliquée à partir d'instances répliquées en lecture/écriture.
  • diffusent des opérations de lecture ;
  • Ne participez pas au vote pour valider les écritures. il s'ensuit que l'emplacement des instances dupliquées en lecture seule n'a aucune incidence sur la latence d'écriture ;
  • 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 effectuer des lectures non actualisées sans avoir besoin d'aller-retour vers la région principale par défaut, en supposant que l'obsolescence est d'au moins 15 secondes. Vous pouvez également utiliser les lectures dirigées pour acheminer les transactions en lecture seule et les lectures uniques vers un type d'instance répliquée ou une région spécifique dans une configuration d'instance multirégionale. Pour en savoir plus, consultez la section Lectures dirigées.

    Les lectures fortes peuvent nécessiter un aller-retour vers l'instance répliquée principale. L'aller-retour sert uniquement à négocier l'horodatage, et non à envoyer les données réelles à l'instance optimale. La négociation du code temporel est une opération efficace pour le processeur au niveau de la variante optimale, et les données sont généralement déjà en cours de routage. Cette communication est gérée automatiquement par le système.

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

  • ne sont pas éligibles au rôle d'instance dupliquée principale.

Vous pouvez créer une configuration d'instance personnalisée régionale ou multirégionale, et ajouter des instances répliquées en lecture seule facultatives pour effectuer le scaling des lectures et accepter les lectures obsolètes à faible latence. Vous pouvez ajouter les emplacements répertoriés sous Région facultative en tant qu'instance répliquée facultative en lecture seule. Si vous ne voyez pas l'emplacement d'instance répliquée en lecture seule choisi, vous pouvez demander une nouvelle région facultative d'instance répliquée en lecture seule. Notez que vous ne pouvez pas modifier la topologie de réplication des configurations d'instance de base, qui sont fixes.

Toutes les instances dupliquées facultatives en lecture seule sont soumises aux coûts de capacité de calcul et de stockage. De plus, l'ajout d'instances répliquées en lecture seule à une configuration d'instance personnalisée ne modifie pas les contrats de niveau de service Spanner associés à la configuration de l'instance. Si vous choisissez d'ajouter une instance répliquée en lecture seule sur un continent situé sur un continent différent de celui de la région principale, nous vous recommandons d'ajouter au moins deux instances répliquées en lecture seule. Cela permet de maintenir une faible latence de lecture au cas où l'une des instances répliquées en lecture seule deviendrait indisponible.

Lorsque vous ajoutez une ou plusieurs instances répliquées en lecture seule, l'instance répliquée principale subit une charge de réplication plus importante, ce qui peut affecter les performances. Nous vous recommandons de commencer par tester les charges de travail axées sur les performances dans des instances hors production dans la configuration d'instance personnalisée. Pour obtenir des données sur la latence interrégionale médiane, vous pouvez vous reporter au tableau de bord d'analyse comparative de la latence et du débit interrégionaux. 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 la région us-east1 est d'environ 100 millisecondes, en raison du délai aller-retour vers la région principale dans europe-west4. Les lectures obsolètes avec une obsolescence suffisante n'entraînent pas l'aller-retour et sont donc beaucoup plus rapides. Vous pouvez également utiliser la métrique Latence par type de transaction pour afficher les données de latence des transactions en lecture/écriture et en lecture seule.

Pour obtenir des instructions, consultez Créer une configuration d'instance personnalisée.

Instances répliquées témoins

Les instances dupliquées témoins n'acceptent pas les lectures, mais participent au vote pour valider les é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 :

  • ne sont utilisées que dans des instances multirégionales ;
  • Ne conservez pas une copie complète des données.
  • Ne diffusez pas les lectures.
  • participent aux votes de validation d'écriture ;
  • participent à l'élection de l'instance dupliquée principale, mais ne sont pas éligibles à ce rôle.

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

Cette section décrit le rôle des instances répliquées dans les écritures et les lectures dans Spanner, ce qui vous permet de comprendre pourquoi Spanner utilise des instances dupliquées témoins dans des configurations 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 principale, même s'il existe une instance répliquée non principale plus proche du client ou si l'instance répliquée principale est géographiquement éloignée du client. Si vous utilisez une configuration d'instance multirégionale et que votre application cliente est située dans une région non principale, Spanner utilise le routage basé sur l'instance principale pour acheminer de manière dynamique les transactions en lecture-écriture afin de réduire la latence dans votre base de données. Pour en savoir plus, consultez la section Routage basé sur les leaders.

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 lorsque la majorité des instances dupliquées ayant la capacité de voter (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 la section Types de lectures.)

    • 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 obsolètes sont dirigées vers l'instance répliquée en lecture seule ou en lecture/écriture disponible la plus proche rattrapée par le code temporel de la requête. Il peut s'agir de l'instance répliquée principale si celle-ci est l'instance répliquée la plus proche du client qui a émis la requête de lecture.