SlideShare une entreprise Scribd logo
Google Spanner
Une base géodistribuée
1 03/2020: Google Spanner: une base géodistribuée
A la conquête du monde
2 03/2020: Google Spanner: à la conquête du monde
 Du début des années 1970 à l’an 2000, c’est le règne des bases relationnelles
avec deux grands leaders dans le temps, DB2 d’IBM, puis Oracle Database.
 Pour répondre aux nouveaux besoins, on étend le SQL ( SQL étendu à l’OLAP,
support du XML ) et on ajoute de nouvelles briques ( ajout d’une JVM pour le
développement en Java )
 Pour profiter de la puissance exponentielle des machines, on crée des clusters de
plus en plus grands ( qqes dizaines de nœuds ), des clusters répartis sur
plusieurs sites en utilisant de la fibre noire ou des appliances du style Exadata si
on recherche plus une archi verticale.
 Mais subsiste un défi, comment répartir les clusters à travers les continents et
aller au-delà du transfert de fichiers ou d’un système de réplication souvent posé
en maître-esclave pour éviter les conflits de réplication ? Comment réaliser des
applications mondiales résilientes, consistantes et scalables ?
Historique & Enjeux
3 03/2020: Google Spanner: historique & enjeux
 Des projets débutent au cours des années 2000 pour atteindre cet objectif. Les
deux plus représentatifs bénéficiant de la puissance financière du cloud sont
Cosmos de Microsoft et Spanner de Google.
 J’ai choisi d’étudier Spanner car je connais l’environnement GCP. Mais Cosmos
est aussi très intéressant, je pense par exemple à la possibilité d’instancier
plusieurs modèles de données ( clé-valeur, colonne, document, graphe),
Spanner étant très SQL dans son approche.
 On peut citer aussi Cockroach DB et YugaByte DB dans la famille des bases
géodistribuées
 A mon avis, il s’agit de la vraie avancée technologique en terme de bases de
données des 20 dernières années, les bases NoSql ayant plutôt pour objectif de
mieux répondre à certains usages ( bases document, bases graphe, … ) ou de
délaisser l’ACID pour être plus performant en terme de concurrence d’accès
Historique & Enjeux
4 03/2020: Google Spanner: historique & enjeux
Architecture
5 03/2020: Google Spanner: architecture
 Deux types d’architecture: une architecture régionale et une architecture multi-
régionale
 Un système de réplication au cœur du moteur, un système de fichiers distribués
composé d’instances dupliquées
 Un système de réplication synchrone basé sur Paxos
 Une instance dupliquée est constituée d’un ensemble de partitions, un ensemble
de lignes d’une table.
 Trois types d’instance dupliquée: instance en lecture/écriture, instance en
lecture et instance témoin
 Il existe une instance dupliquée principale, le pivot pour l’écriture des données.
Un point de contention possible à grande échelle ?
Les majeurs
6 03/2020: Google Spanner: les majeurs
Région
Architecture régionale
7 03/2020: Google Spanner: architecture régionale
Zone 1
1 instance dupliquée principale en
lecture/écriture
Stockage
1 à n nœuds de type compute
CPU + RAM
Zone 2
1 instance dupliquée en
lecture/écriture
Stockage
1 à n nœuds de type compute
CPU + RAM
Zone 3
1 instance dupliquée en
lecture/écriture
Stockage
1 à n nœuds de type compute
CPU + RAM
Architecture régionale
8 03/2020: Google Spanner: architecture régionale
Architecture multi-régionale
9 03/2020: Google Spanner: architecture multi-régionale
Zone 1
Région 1
Région 3
Zone 2
1 instance dupliquée principale en
lecture/écriture
1 à n nœuds de type compute
Zone 1
Région 2
Zone 2
1 instance dupliquée en
lecture/écriture
1 à n nœuds de type compute
Zone 1
1 instance dupliquée témoin
1 noeud de type compute
Région 4Zone 1
1 instance dupliquée en lecture
1 à n nœuds de type compute
1 instance dupliquée principale en
lecture/écriture
1 à n nœuds de type compute
1 instance dupliquée en
lecture/écriture
1 à n nœuds de type compute
Configurations disponibles
10 03/2020: Google Spanner: configuration multi-régionale
ACID
11 03/2020: Google Spanner: ACID
 Les bases NoSqL (https://db-engines.com/en/ ) ont mis de côté l’ACID pour
gagner en performance, en particulier pour les mises à jour. Elles se reposent sur
CAP ( Consistency, Availability, Partition Tolerance ) en assurant deux de ses
propriétés suivant la nature de la base.
 Les bases géodistribuées ont pour objectif de revenir à l’ACID sans renier la
performance et cela à l’échelle mondiale.
 L’ACID recouvre quatres propriétés:
 A = Atomicity : une transaction, une séquence d’opérations ( lecture, mise à jour ) délimitée
par un début et une fin s’exécute totalement ou non.
 C = Consistency : une transaction part d’un point valide de la base de données ( commit à
l’instant t ) et l’amène à un autre point valide de la base de données ( commit à l’instant t’ ).
Pour ce faire, elle respecte les règles définies dans la base de données ( contraintes, triggers,
cascade, … )
 I = Isolation : une transaction ne peut pas être impactée par d’autres transactions
s’exécutant en même temps, les données qu’elle utilise ne peuvent pas être écrasées par une
autre transaction
 D = Durability : une transaction validée ne peut plus être perdue même si une ou plusieurs
instances s’arrêtent pour une raison matérielle ou logicielle
 Pour la consistance, il y a encore débat, vous pourrez trouver des variantes,
mais elle ne garantit pas que la transaction délivre le résultat souhaité
Présentation d’ACID
12 03/2020: Google Spanner: présentation ACID
 Une transaction est un ensemble de lectures et d'écritures qui s'exécutent de
manière atomique à un moment logique unique dans des colonnes, des lignes et
des tables d'une base de données.
 Deux modes de transaction ACID:
 Une transaction en lecture-écriture pour les mises à jour
 Une transaction en lecture pour conserver une vue cohérente des données
 Une lecture peut être effectuée sans utiliser le mode transactionnel. On distingue
deux types de lecture:
 Une lecture forte pour obtenir la dernière valeur d’une donnée
 Une lecture non actualisée pour obtenir une valeur du passé
 Deux principaux types de verrous:
 Verrou de type partagé pour les lectures
 Verrou de type exclusif ou de type auteur partagé pour les écritures
 Granularité: ligne et colonne
Les transactions dans Spanner
13 03/2020: Google Spanner: Transactions
Lecture forte
14 03/2020: Google Spanner: lecture forte
Lecture forte
15 003/2020: Google Spanner: lecture forte
Lecture dans le passé
16 03/2020: Google Spanner: lecture dans le passé
Transaction sans two-phase commit
17 03/2020: Google Spanner: transaction sans two-phase commit
Transaction avec two-phase commit
18 03/2020: Google Spanner: transaction avec two-phase commit
Transaction avec two-phase commit
19
03/2020: Google Spanner: transaction avec two-phase commit
Transaction avec two-phase commit
20
03/2020: Google Spanner: transaction avec two-phase commit
 Un deadlock est un état ou plusieurs transactions se bloquent mutuellement sur
plusieurs ressources.
 Dans Spanner, le blocage potentiel de plusieurs transactions est détecté et
provoque l'abandon de toutes les transactions sauf une. Par exemple,
considérons le scénario suivant : la transaction Txn1 maintient un verrou sur
l'enregistrement A et attend un verrou sur l'enregistrement B, tandis que Txn2
maintient un verrou sur l'enregistrement B et attend un verrou sur
l'enregistrement A. Le seul moyen d'avancer dans cette situation consiste à
annuler l'une des transactions pour qu'elle procède au déverrouillage,
permettant ainsi à l'autre transaction de progresser.
 La priorité est donnée aux transactions plus anciennes, on ainsi la garantie que
chaque transaction a la possibilité d'obtenir un verrou, une fois que leur
ancienneté est devenue suffisante pour leur donner une priorité plus élevée par
rapport aux autres transactions. Par exemple, une transaction qui obtient un
verrou partagé pour le lecteur peut être annulée par une transaction plus
ancienne nécessitant un verrou partagé pour l'auteur.
Le mécanisme de deadlock
21 03/2020: Google Spanner: deadlock
 Pour les mises à jour à grande échelle ( UPDATE et DELETE ), il existe des
transactions partitionnées dont le but est de dépasser les limites des
transactions classiques et de ne pas verrouiller une table entière
 La table est découpée en partitions et pour chaque partition, on dédie une transaction en lecture-
écriture
 Une seule instruction en LMD partitionné peut être exécutée en une seule fois
 Si une instruction en LMD partitionné échoue ou est annulée, les partitions déjà exécutées ne sont
pas restaurées, cela n’arrête que les partitions en cours d’exécution et les partitions en attente ne
sont pas démarrées
 Une instruction en LMD partitionné ne traite pas les INSERT
 Une transaction classique ne dépasse pas 20 000 mutations. L’unité d’une
mutation n’est pas facile à identifier, mais on peut approximativement la définir
comme une modification sur une colonne.
Les grandes transactions: LMD Partitionné
22 03/2020: Google Spanner: LMD partitionné
Conception des bdd
23 03/2020: Google Spanner: conception des bdd
 Les tables entrelaçées permettent de regrouper des données physiquement dans
une partition ou division commune. Cela permet d’optimiser la lecture des
données, on parle de clustering de données.
 Exemple:
Les tables entrelaçées
24 03/2020: Google spanner: les tables entrelaçées
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
FirstName STRING(1024),
LastName STRING(1024),
SingerInfo BYTES(MAX),
) PRIMARY KEY (SingerId);
CREATE TABLE Albums (
SingerId INT64 NOT NULL,
AlbumId INT64 NOT NULL,
AlbumTitle STRING(MAX),
) PRIMARY KEY (SingerId, AlbumId),
INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
Les tables entrelaçées
25 03/2020: Google Spanner: disposition physique
Pour répartir la charge de lecture sur plusieurs nœuds, la partition Singers(1) est placée sur un nœud 1 et
la partition Singers(2) sur un nœud 2.
Hotspot à l’insertion des données
26 03/2020: Google Spanner: hotspot insertion
Les lignes sont écrites dans cette table dans l'ordre d'horodatage de dernier accès, et comme les
horodatages de dernier accès ne cessent d'augmenter, ils sont toujours écrits à la fin de la table. La
création du hotspot est due au fait qu'un seul serveur Cloud Spanner va recevoir toutes les écritures, ce qui
le surchargera.
Quelques solutions:
- Permuter l’ordre des clés
- Créer une première colonne de hachage
- Utiliser un identifiant unique universel ( UUID )
 Un index est créé par défaut pour la clé primaire.
 Un index est une table.
 Un index secondaire est utile pour accélérer certaines recherches.
 Un index secondaire contient les éléments suivants:
 Les colonnes de la clé primaire
 Les colonnes décrites dans l’index
 Les colonnes spécifiées dans la clause facultative STORING
 Un index peut être entrelaçé.
 Dans une requête, il peut être utile de préciser l’index à utiliser dans le plan
d’exécution si ce dernier ne le choisit pas par défaut => FROM
MyTable@{FORCE_INDEX=MyTableIndex}
 Exemples
 CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName)
 CREATE INDEX SongsBySingerSongName ON Songs(SingerId, SongName),
INTERLEAVE IN Singers
Les index secondaires
27 03/2020: Google Spanner: les index secondaires
Optimisation des requêtes
28 03/2020: Google Spanner: optimisation des requêtes
 Utiliser des paramètres pour accélérer les requêtes fréquemment exécutées
 Réduit les coûts de compilation de la requête
 Evite une attaque par injection SQL
 Attention, dans certains cas, peut être contre-productif. A tester, mais une répartition des valeurs non
uniforme sur une ou plusieurs colonnes pourrait obliger à un retour à des constantes
 Utiliser des index secondaires pour accélérer les requêtes courantes
 Optimiser la recherche par plage de clés
 Utiliser UNNEST pour les listes de valeurs non adjacentes
 Utiliser BETWEEN pour les listes de valeurs adjacentes
 Choisir la bonne jointure et n’hésiter pas à utiliser des hints si pb de
performance, l’optimiseur étant jeune et le système ayant l’air d’être un système
full scan en mode parallèle
 La directive de jointure @{FORCE_JOIN_ORDER=TRUE} indique à Cloud Spanner d'utiliser l'ordre de
jointure spécifié dans la requête
 Utiliser le hint @{JOIN_TYPE=HASH_JOIN} si à gauche de la jointure, vous avez une table de petite
taille
 Éviter les opérations de lecture de grande taille dans les transactions en lecture-
écriture
 Un lock de type exclusif est posé sur les données lues
Bonnes pratiques SQL
29 03/2020: Google Spanner: bonnes pratiques SQL
 Utiliser ORDER BY pour garantir l’ordre du résultat de votre requête
 Utiliser STARTS_WITH au lieu de LIKE pour accélérer les requêtes SQL
paramétrées
 Cloud Spanner n'évalue pas les modèles LIKE paramétrés avant l'exécution, il doit lire toutes les
lignes et les évaluer par rapport à l'expression afin d'exclure celles qui ne correspondent pas
 Il peut être aussi utile d’ajouter un index sur la colonne de recherche
Bonnes pratiques SQL
30 03/2020: Google Spanner: bonnes pratiques SQL
Plan d’exécution: jointure non distribuée
31 03/2020: Google Spanner: jointure non distribuée
Requête: update all_sessions_index t1
set channelGrouping = ( select channelGrouping
from all_sessions
where fullVisitorId = t1.fullVisitorId )
where id = 1
Plan d’exécution: utilisation d’un index
32 03/2020: Google Spanner: index
Plan d’exécution: jointure distribuée
33 03/2020: Google Spanner: jointure distribuée
Demo
34 03/2020: Google Spanner: demo
 Une base Big Query: https://console.cloud.google.com/bigquery?p=data-to-
insights&page=ecommerce
 Création d’une instance Spanner à 1 ou n noeuds
 Import de tables dans une instance Spanner via Dataflow
 Un exemple de TP: https://codelabs.developers.google.com/codelabs/datasme-cloud-
spanner-01/index.html?index=..%2F..index#0
Environnement
35 03/2020: Goggle Spanner: environnement de la démo
Configuration import table
36 03/2020: configuration import table
Chargement Dataflow sans limite de nœuds à 1 CPU
37 03/2020: Google Spanner: chargement dataflow
Ressources du chargement au pic
38 03/2020: Google Spanner: ressources du chargement
CPU
Monitoring du nœud Spanner
Nb d’opérations
par seconde
Débit ( MB/s ) Latence ( ms )
39 03/2020: Google Spanner: monitoring du nœud Spanner
Chargement dataflow avec 4 nœuds à 16 CPU
40 03/2020: Google Spanner: charegemnt Dataflow
Ressources du chargement au pic
41 03/2020: Google Spanner: ressources du chargement
Monitoring des 3 nœuds Spanner
42 03/2020: Google Spanner: monitoring des 3 nœuds Spanner
CPU Nb d’opérations
par seconde
Monitoring des 3 nœuds Spanner
43 03/2020: Google Spanner: monitoring des 3 nœuds Spanner
Débit ( MB/s ) Latence ( ms )
Spanner: chargement à 6 et 9 noeuds
44 03/2020: Google Spanner: limites
Limite par transaction
45 03/2020: Google Spanner: Limite par transaction
 Une instruction LMD est limitée à 20 000 mutations. Une mutation est
approximativement une modification sur une colonne.
 Pour aller au-delà, on peut utiliser gcloud ou une bibliothèque cliente … mais
uniquement pour l’update et le delete => utilisation d’une LMD partitionnée
 Pour l’insertion, il faut ruser avec cette limite des 20 000 mutations.
Une mutation ~ une mise à jour de colonne
46 03/2020: Google Spanner: mutation
Remarque: pas d’index sur la table cible, all_sessions_index
LMD partitionnée
47 03/2020: Google Spanner: LMD partitionnée
 Une instruction LMD partitionnée ne s’applique qu’à des requêtes update et
delete
 Une requête update imbriquée n’est pas traitée par une instruction LMD
partitionnée
Bibliographie
48 03/2020: Google Spanner: Bibliographie
 Google concepts: https://cloud.google.com/spanner/docs/concepts
 Cloud Spanner on YouTube:
https://www.youtube.com/user/googlecloudplatform/search?query=spanner
 Optimizing Applications, Schemas, and Query Design on Cloud Spanner (Cloud
Next ‘18): https://www.youtube.com/watch?v=DxrdatA_ULk
 How Cloud Spanner operates and how it guarantees external consistency on
reads and writes: https://www.youtube.com/watch?v=QPpSzxs_8bc
 Cloud Spanner Ticketshop Demo:
https://github.com/GoogleCloudPlatform/cloudspanner-ticketshop-demo
 Exemple de migration: https://cloud.google.com/solutions/migrating-oracle-to-
cloud-spanner
Pour aller plus loin
49 03/2020: Google Spanner: bibliographie
 CAP: https://en.wikipedia.org/wiki/CAP_theorem
 PAXOS: https://en.wikipedia.org/wiki/Paxos_(computer_science)
 ACID: https://en.wikipedia.org/wiki/ACID
 Two phase-commit: https://en.wikipedia.org/wiki/Two-phase_commit_protocol
 Desiging Data-Intensive Applications, Martin Kleppmann
Pour aller plus loin
50 03/2020: Google Spanner: bibliographie

Contenu connexe

Tendances

Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoTBenchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
CHAKER ALLAOUI
 
Db aing td2v1
Db aing td2v1Db aing td2v1
Db aing td2v1infcom
 
Hadoop
HadoopHadoop
Hadoop
kamar MEDDAH
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
Oussama ARBI
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
Abdoulaye Dieng
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
kamar MEDDAH
 

Tendances (7)

Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoTBenchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
 
Db aing td2v1
Db aing td2v1Db aing td2v1
Db aing td2v1
 
Hadoop
HadoopHadoop
Hadoop
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 
Base des données réparties
Base des données répartiesBase des données réparties
Base des données réparties
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
 

Similaire à Google spanner

Delta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelleDelta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelle
françois de Buttet
 
Les BD NoSQL
Les BD NoSQLLes BD NoSQL
Les BD NoSQL
Minyar Sassi Hidri
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
Didier Durand
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
OVHcloud
 
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure PackLe cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Microsoft Décideurs IT
 
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...Clément OUDOT
 
Big Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foinBig Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foin
PALO IT
 
Retour d’expérience - Architecture MicroService chez BotsUnit
Retour d’expérience - Architecture MicroService chez BotsUnitRetour d’expérience - Architecture MicroService chez BotsUnit
Retour d’expérience - Architecture MicroService chez BotsUnit
Gregoire Lejeune
 
ch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdfch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdf
salmanakbi
 
Presentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPresentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptx
PriscilleGANKIA
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
Amal Abid
 
No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010
JUG Lausanne
 
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
SpikeeLabs
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
Paris Open Source Summit
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)
Aymeric Weinbach
 
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
Nicolas Desachy
 
SQL Server et infrastructure
SQL Server et infrastructureSQL Server et infrastructure
SQL Server et infrastructure
David Barbarin
 
Technologies & Systèmes
Technologies & SystèmesTechnologies & Systèmes
Technologies & SystèmesPaulin CHOUDJA
 

Similaire à Google spanner (20)

Delta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelleDelta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelle
 
Les BD NoSQL
Les BD NoSQLLes BD NoSQL
Les BD NoSQL
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure PackLe cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
 
Inf208
Inf208Inf208
Inf208
 
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
 
Big Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foinBig Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foin
 
Retour d’expérience - Architecture MicroService chez BotsUnit
Retour d’expérience - Architecture MicroService chez BotsUnitRetour d’expérience - Architecture MicroService chez BotsUnit
Retour d’expérience - Architecture MicroService chez BotsUnit
 
ch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdfch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdf
 
Presentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPresentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptx
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010
 
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
Industrialisation du processus de livraison et pratiques DevOps avec Kubernet...
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)
 
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
OSA02 - Pas de transactionnel haute performance sans un couple machine logici...
 
Xml
XmlXml
Xml
 
SQL Server et infrastructure
SQL Server et infrastructureSQL Server et infrastructure
SQL Server et infrastructure
 
Technologies & Systèmes
Technologies & SystèmesTechnologies & Systèmes
Technologies & Systèmes
 

Dernier

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 

Dernier (6)

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 

Google spanner

  • 1. Google Spanner Une base géodistribuée 1 03/2020: Google Spanner: une base géodistribuée
  • 2. A la conquête du monde 2 03/2020: Google Spanner: à la conquête du monde
  • 3.  Du début des années 1970 à l’an 2000, c’est le règne des bases relationnelles avec deux grands leaders dans le temps, DB2 d’IBM, puis Oracle Database.  Pour répondre aux nouveaux besoins, on étend le SQL ( SQL étendu à l’OLAP, support du XML ) et on ajoute de nouvelles briques ( ajout d’une JVM pour le développement en Java )  Pour profiter de la puissance exponentielle des machines, on crée des clusters de plus en plus grands ( qqes dizaines de nœuds ), des clusters répartis sur plusieurs sites en utilisant de la fibre noire ou des appliances du style Exadata si on recherche plus une archi verticale.  Mais subsiste un défi, comment répartir les clusters à travers les continents et aller au-delà du transfert de fichiers ou d’un système de réplication souvent posé en maître-esclave pour éviter les conflits de réplication ? Comment réaliser des applications mondiales résilientes, consistantes et scalables ? Historique & Enjeux 3 03/2020: Google Spanner: historique & enjeux
  • 4.  Des projets débutent au cours des années 2000 pour atteindre cet objectif. Les deux plus représentatifs bénéficiant de la puissance financière du cloud sont Cosmos de Microsoft et Spanner de Google.  J’ai choisi d’étudier Spanner car je connais l’environnement GCP. Mais Cosmos est aussi très intéressant, je pense par exemple à la possibilité d’instancier plusieurs modèles de données ( clé-valeur, colonne, document, graphe), Spanner étant très SQL dans son approche.  On peut citer aussi Cockroach DB et YugaByte DB dans la famille des bases géodistribuées  A mon avis, il s’agit de la vraie avancée technologique en terme de bases de données des 20 dernières années, les bases NoSql ayant plutôt pour objectif de mieux répondre à certains usages ( bases document, bases graphe, … ) ou de délaisser l’ACID pour être plus performant en terme de concurrence d’accès Historique & Enjeux 4 03/2020: Google Spanner: historique & enjeux
  • 5. Architecture 5 03/2020: Google Spanner: architecture
  • 6.  Deux types d’architecture: une architecture régionale et une architecture multi- régionale  Un système de réplication au cœur du moteur, un système de fichiers distribués composé d’instances dupliquées  Un système de réplication synchrone basé sur Paxos  Une instance dupliquée est constituée d’un ensemble de partitions, un ensemble de lignes d’une table.  Trois types d’instance dupliquée: instance en lecture/écriture, instance en lecture et instance témoin  Il existe une instance dupliquée principale, le pivot pour l’écriture des données. Un point de contention possible à grande échelle ? Les majeurs 6 03/2020: Google Spanner: les majeurs
  • 7. Région Architecture régionale 7 03/2020: Google Spanner: architecture régionale Zone 1 1 instance dupliquée principale en lecture/écriture Stockage 1 à n nœuds de type compute CPU + RAM Zone 2 1 instance dupliquée en lecture/écriture Stockage 1 à n nœuds de type compute CPU + RAM Zone 3 1 instance dupliquée en lecture/écriture Stockage 1 à n nœuds de type compute CPU + RAM
  • 8. Architecture régionale 8 03/2020: Google Spanner: architecture régionale
  • 9. Architecture multi-régionale 9 03/2020: Google Spanner: architecture multi-régionale Zone 1 Région 1 Région 3 Zone 2 1 instance dupliquée principale en lecture/écriture 1 à n nœuds de type compute Zone 1 Région 2 Zone 2 1 instance dupliquée en lecture/écriture 1 à n nœuds de type compute Zone 1 1 instance dupliquée témoin 1 noeud de type compute Région 4Zone 1 1 instance dupliquée en lecture 1 à n nœuds de type compute 1 instance dupliquée principale en lecture/écriture 1 à n nœuds de type compute 1 instance dupliquée en lecture/écriture 1 à n nœuds de type compute
  • 10. Configurations disponibles 10 03/2020: Google Spanner: configuration multi-régionale
  • 11. ACID 11 03/2020: Google Spanner: ACID
  • 12.  Les bases NoSqL (https://db-engines.com/en/ ) ont mis de côté l’ACID pour gagner en performance, en particulier pour les mises à jour. Elles se reposent sur CAP ( Consistency, Availability, Partition Tolerance ) en assurant deux de ses propriétés suivant la nature de la base.  Les bases géodistribuées ont pour objectif de revenir à l’ACID sans renier la performance et cela à l’échelle mondiale.  L’ACID recouvre quatres propriétés:  A = Atomicity : une transaction, une séquence d’opérations ( lecture, mise à jour ) délimitée par un début et une fin s’exécute totalement ou non.  C = Consistency : une transaction part d’un point valide de la base de données ( commit à l’instant t ) et l’amène à un autre point valide de la base de données ( commit à l’instant t’ ). Pour ce faire, elle respecte les règles définies dans la base de données ( contraintes, triggers, cascade, … )  I = Isolation : une transaction ne peut pas être impactée par d’autres transactions s’exécutant en même temps, les données qu’elle utilise ne peuvent pas être écrasées par une autre transaction  D = Durability : une transaction validée ne peut plus être perdue même si une ou plusieurs instances s’arrêtent pour une raison matérielle ou logicielle  Pour la consistance, il y a encore débat, vous pourrez trouver des variantes, mais elle ne garantit pas que la transaction délivre le résultat souhaité Présentation d’ACID 12 03/2020: Google Spanner: présentation ACID
  • 13.  Une transaction est un ensemble de lectures et d'écritures qui s'exécutent de manière atomique à un moment logique unique dans des colonnes, des lignes et des tables d'une base de données.  Deux modes de transaction ACID:  Une transaction en lecture-écriture pour les mises à jour  Une transaction en lecture pour conserver une vue cohérente des données  Une lecture peut être effectuée sans utiliser le mode transactionnel. On distingue deux types de lecture:  Une lecture forte pour obtenir la dernière valeur d’une donnée  Une lecture non actualisée pour obtenir une valeur du passé  Deux principaux types de verrous:  Verrou de type partagé pour les lectures  Verrou de type exclusif ou de type auteur partagé pour les écritures  Granularité: ligne et colonne Les transactions dans Spanner 13 03/2020: Google Spanner: Transactions
  • 14. Lecture forte 14 03/2020: Google Spanner: lecture forte
  • 15. Lecture forte 15 003/2020: Google Spanner: lecture forte
  • 16. Lecture dans le passé 16 03/2020: Google Spanner: lecture dans le passé
  • 17. Transaction sans two-phase commit 17 03/2020: Google Spanner: transaction sans two-phase commit
  • 18. Transaction avec two-phase commit 18 03/2020: Google Spanner: transaction avec two-phase commit
  • 19. Transaction avec two-phase commit 19 03/2020: Google Spanner: transaction avec two-phase commit
  • 20. Transaction avec two-phase commit 20 03/2020: Google Spanner: transaction avec two-phase commit
  • 21.  Un deadlock est un état ou plusieurs transactions se bloquent mutuellement sur plusieurs ressources.  Dans Spanner, le blocage potentiel de plusieurs transactions est détecté et provoque l'abandon de toutes les transactions sauf une. Par exemple, considérons le scénario suivant : la transaction Txn1 maintient un verrou sur l'enregistrement A et attend un verrou sur l'enregistrement B, tandis que Txn2 maintient un verrou sur l'enregistrement B et attend un verrou sur l'enregistrement A. Le seul moyen d'avancer dans cette situation consiste à annuler l'une des transactions pour qu'elle procède au déverrouillage, permettant ainsi à l'autre transaction de progresser.  La priorité est donnée aux transactions plus anciennes, on ainsi la garantie que chaque transaction a la possibilité d'obtenir un verrou, une fois que leur ancienneté est devenue suffisante pour leur donner une priorité plus élevée par rapport aux autres transactions. Par exemple, une transaction qui obtient un verrou partagé pour le lecteur peut être annulée par une transaction plus ancienne nécessitant un verrou partagé pour l'auteur. Le mécanisme de deadlock 21 03/2020: Google Spanner: deadlock
  • 22.  Pour les mises à jour à grande échelle ( UPDATE et DELETE ), il existe des transactions partitionnées dont le but est de dépasser les limites des transactions classiques et de ne pas verrouiller une table entière  La table est découpée en partitions et pour chaque partition, on dédie une transaction en lecture- écriture  Une seule instruction en LMD partitionné peut être exécutée en une seule fois  Si une instruction en LMD partitionné échoue ou est annulée, les partitions déjà exécutées ne sont pas restaurées, cela n’arrête que les partitions en cours d’exécution et les partitions en attente ne sont pas démarrées  Une instruction en LMD partitionné ne traite pas les INSERT  Une transaction classique ne dépasse pas 20 000 mutations. L’unité d’une mutation n’est pas facile à identifier, mais on peut approximativement la définir comme une modification sur une colonne. Les grandes transactions: LMD Partitionné 22 03/2020: Google Spanner: LMD partitionné
  • 23. Conception des bdd 23 03/2020: Google Spanner: conception des bdd
  • 24.  Les tables entrelaçées permettent de regrouper des données physiquement dans une partition ou division commune. Cela permet d’optimiser la lecture des données, on parle de clustering de données.  Exemple: Les tables entrelaçées 24 03/2020: Google spanner: les tables entrelaçées CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY (SingerId); CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
  • 25. Les tables entrelaçées 25 03/2020: Google Spanner: disposition physique Pour répartir la charge de lecture sur plusieurs nœuds, la partition Singers(1) est placée sur un nœud 1 et la partition Singers(2) sur un nœud 2.
  • 26. Hotspot à l’insertion des données 26 03/2020: Google Spanner: hotspot insertion Les lignes sont écrites dans cette table dans l'ordre d'horodatage de dernier accès, et comme les horodatages de dernier accès ne cessent d'augmenter, ils sont toujours écrits à la fin de la table. La création du hotspot est due au fait qu'un seul serveur Cloud Spanner va recevoir toutes les écritures, ce qui le surchargera. Quelques solutions: - Permuter l’ordre des clés - Créer une première colonne de hachage - Utiliser un identifiant unique universel ( UUID )
  • 27.  Un index est créé par défaut pour la clé primaire.  Un index est une table.  Un index secondaire est utile pour accélérer certaines recherches.  Un index secondaire contient les éléments suivants:  Les colonnes de la clé primaire  Les colonnes décrites dans l’index  Les colonnes spécifiées dans la clause facultative STORING  Un index peut être entrelaçé.  Dans une requête, il peut être utile de préciser l’index à utiliser dans le plan d’exécution si ce dernier ne le choisit pas par défaut => FROM MyTable@{FORCE_INDEX=MyTableIndex}  Exemples  CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName)  CREATE INDEX SongsBySingerSongName ON Songs(SingerId, SongName), INTERLEAVE IN Singers Les index secondaires 27 03/2020: Google Spanner: les index secondaires
  • 28. Optimisation des requêtes 28 03/2020: Google Spanner: optimisation des requêtes
  • 29.  Utiliser des paramètres pour accélérer les requêtes fréquemment exécutées  Réduit les coûts de compilation de la requête  Evite une attaque par injection SQL  Attention, dans certains cas, peut être contre-productif. A tester, mais une répartition des valeurs non uniforme sur une ou plusieurs colonnes pourrait obliger à un retour à des constantes  Utiliser des index secondaires pour accélérer les requêtes courantes  Optimiser la recherche par plage de clés  Utiliser UNNEST pour les listes de valeurs non adjacentes  Utiliser BETWEEN pour les listes de valeurs adjacentes  Choisir la bonne jointure et n’hésiter pas à utiliser des hints si pb de performance, l’optimiseur étant jeune et le système ayant l’air d’être un système full scan en mode parallèle  La directive de jointure @{FORCE_JOIN_ORDER=TRUE} indique à Cloud Spanner d'utiliser l'ordre de jointure spécifié dans la requête  Utiliser le hint @{JOIN_TYPE=HASH_JOIN} si à gauche de la jointure, vous avez une table de petite taille  Éviter les opérations de lecture de grande taille dans les transactions en lecture- écriture  Un lock de type exclusif est posé sur les données lues Bonnes pratiques SQL 29 03/2020: Google Spanner: bonnes pratiques SQL
  • 30.  Utiliser ORDER BY pour garantir l’ordre du résultat de votre requête  Utiliser STARTS_WITH au lieu de LIKE pour accélérer les requêtes SQL paramétrées  Cloud Spanner n'évalue pas les modèles LIKE paramétrés avant l'exécution, il doit lire toutes les lignes et les évaluer par rapport à l'expression afin d'exclure celles qui ne correspondent pas  Il peut être aussi utile d’ajouter un index sur la colonne de recherche Bonnes pratiques SQL 30 03/2020: Google Spanner: bonnes pratiques SQL
  • 31. Plan d’exécution: jointure non distribuée 31 03/2020: Google Spanner: jointure non distribuée Requête: update all_sessions_index t1 set channelGrouping = ( select channelGrouping from all_sessions where fullVisitorId = t1.fullVisitorId ) where id = 1
  • 32. Plan d’exécution: utilisation d’un index 32 03/2020: Google Spanner: index
  • 33. Plan d’exécution: jointure distribuée 33 03/2020: Google Spanner: jointure distribuée
  • 34. Demo 34 03/2020: Google Spanner: demo
  • 35.  Une base Big Query: https://console.cloud.google.com/bigquery?p=data-to- insights&page=ecommerce  Création d’une instance Spanner à 1 ou n noeuds  Import de tables dans une instance Spanner via Dataflow  Un exemple de TP: https://codelabs.developers.google.com/codelabs/datasme-cloud- spanner-01/index.html?index=..%2F..index#0 Environnement 35 03/2020: Goggle Spanner: environnement de la démo
  • 36. Configuration import table 36 03/2020: configuration import table
  • 37. Chargement Dataflow sans limite de nœuds à 1 CPU 37 03/2020: Google Spanner: chargement dataflow
  • 38. Ressources du chargement au pic 38 03/2020: Google Spanner: ressources du chargement
  • 39. CPU Monitoring du nœud Spanner Nb d’opérations par seconde Débit ( MB/s ) Latence ( ms ) 39 03/2020: Google Spanner: monitoring du nœud Spanner
  • 40. Chargement dataflow avec 4 nœuds à 16 CPU 40 03/2020: Google Spanner: charegemnt Dataflow
  • 41. Ressources du chargement au pic 41 03/2020: Google Spanner: ressources du chargement
  • 42. Monitoring des 3 nœuds Spanner 42 03/2020: Google Spanner: monitoring des 3 nœuds Spanner CPU Nb d’opérations par seconde
  • 43. Monitoring des 3 nœuds Spanner 43 03/2020: Google Spanner: monitoring des 3 nœuds Spanner Débit ( MB/s ) Latence ( ms )
  • 44. Spanner: chargement à 6 et 9 noeuds 44 03/2020: Google Spanner: limites
  • 45. Limite par transaction 45 03/2020: Google Spanner: Limite par transaction  Une instruction LMD est limitée à 20 000 mutations. Une mutation est approximativement une modification sur une colonne.  Pour aller au-delà, on peut utiliser gcloud ou une bibliothèque cliente … mais uniquement pour l’update et le delete => utilisation d’une LMD partitionnée  Pour l’insertion, il faut ruser avec cette limite des 20 000 mutations.
  • 46. Une mutation ~ une mise à jour de colonne 46 03/2020: Google Spanner: mutation Remarque: pas d’index sur la table cible, all_sessions_index
  • 47. LMD partitionnée 47 03/2020: Google Spanner: LMD partitionnée  Une instruction LMD partitionnée ne s’applique qu’à des requêtes update et delete  Une requête update imbriquée n’est pas traitée par une instruction LMD partitionnée
  • 48. Bibliographie 48 03/2020: Google Spanner: Bibliographie
  • 49.  Google concepts: https://cloud.google.com/spanner/docs/concepts  Cloud Spanner on YouTube: https://www.youtube.com/user/googlecloudplatform/search?query=spanner  Optimizing Applications, Schemas, and Query Design on Cloud Spanner (Cloud Next ‘18): https://www.youtube.com/watch?v=DxrdatA_ULk  How Cloud Spanner operates and how it guarantees external consistency on reads and writes: https://www.youtube.com/watch?v=QPpSzxs_8bc  Cloud Spanner Ticketshop Demo: https://github.com/GoogleCloudPlatform/cloudspanner-ticketshop-demo  Exemple de migration: https://cloud.google.com/solutions/migrating-oracle-to- cloud-spanner Pour aller plus loin 49 03/2020: Google Spanner: bibliographie
  • 50.  CAP: https://en.wikipedia.org/wiki/CAP_theorem  PAXOS: https://en.wikipedia.org/wiki/Paxos_(computer_science)  ACID: https://en.wikipedia.org/wiki/ACID  Two phase-commit: https://en.wikipedia.org/wiki/Two-phase_commit_protocol  Desiging Data-Intensive Applications, Martin Kleppmann Pour aller plus loin 50 03/2020: Google Spanner: bibliographie

Notes de l'éditeur

  1. Référence: https://cloud.google.com/spanner/docs/replication Type d’instance: Type d'instance dupliquée Peut voter Peut devenir l'instance dupliquée principale Peut diffuser des lectures Lecture/écriture Oui Oui Oui Lecture seule Non Non Oui Témoin Oui Non Non Ecriture Les requêtes d'écriture des clients sont toujours présentées en premier lieu à l'instance dupliquée principale, même s'il existe une instance dupliquée non principale plus proche du client, ou si l'instance dupliquée principale est géographiquement distante du client. 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.
  2. Référence: https://cloud.google.com/spanner/docs/instances Focus sur la HA Une configuration n’est pas modifiable Un nœud = 2 TB de stockage Cloud Spanner ne fait pas évoluer automatiquement le nombre de nœuds de votre instance Chaque nœud Cloud Spanner peut fournir jusqu'à 10 000 requêtes par seconde (RPS) en lecture ou 2 000 RPS en écriture (écriture de lignes individuelles à 1 Ko de données par ligne).
  3. Paxos is a family of protocols for solving consensus in a network of unreliable processors (that is, processors that may fail). Consensus is the process of agreeing on one result among a group of participants. This problem becomes difficult when the participants or their communication medium may experience failures. Example: data’s writing Consensus protocols are the basis for the state machine replication approach to distributed computing, as suggested by Leslie Lamport and surveyed by Fred Schneider. State machine replication is a technique for converting an algorithm into a fault-tolerant, distributed implementation. Ad-hoc techniques may leave important cases of failures unresolved. The principled approach proposed by Lamport et al. ensures all cases are handled safely. The Paxos family of protocols includes a spectrum of trade-offs between the number of processors, number of message delays before learning the agreed value, the activity level of individual participants, number of messages sent, and types of failures. Although no deterministic fault-tolerant consensus protocol can guarantee progress in an asynchronous network (a result proved in a paper by Fischer, Lynchand Paterson), Paxos guarantees safety (consistency), and the conditions that could prevent it from making progress are difficult to provoke. Paxos is usually used where durability is required (for example, to replicate a file or a database), in which the amount of durable state could be large. The protocol attempts to make progress even during periods when some bounded number of replicas are unresponsive. There is also a mechanism to drop a permanently failed replica or to add a new replica.
  4. Chaque configuration multirégionale contient deux régions désignées comme régions de lecture/écriture, chacune contenant deux instances dupliquées en lecture/écriture. L'une de ces régions de lecture/écriture est désignée comme région principale par défaut, ce qui signifie qu'elle contient les instances dupliquées principales de votre base de données. Cloud Spanner place également une instance dupliquée témoin dans une troisième région nommée région témoin. Lorsqu'un client émet une mutation dans votre base de données, un formulaire de quorum d'écriture est créé. Il se compose de l'une des instances dupliquées issues de la région principale par défaut et de deux des quatre instances dupliquées supplémentaires participant au vote. (Le quorum peut être constitué d'instances dupliquées provenant de deux ou trois des régions composant votre configuration, en fonction des autres instances dupliquées participant au vote.) En plus de ces cinq instances dupliquées participant au vote, la configuration peut également contenir des instances dupliquées en lecture seule permettant de diffuser des opérations de lecture à faible latence. Les régions contenant des instances dupliquées en lecture seule sont nommées régions de lecture seule. En général, les régions participant au vote dans une configuration multirégionale sont placées dans une zone géographiquement proche (à une distance de moins de 1 600 kilomètres) pour créer un quorum à faible latence qui permet des opérations d'écriture rapides. Toutefois, les régions sont encore suffisamment éloignées les unes des autres (en général, d'au moins quelques centaines de kilomètres) pour éviter les défaillances coordonnées. Focus sur la HA
  5. Référence: https://cloud.google.com/spanner/docs/transactions Transactions en lecture et écriture Voici les propriétés d'isolation que vous obtenez pour une transaction en lecture-écriture contenant une série de lectures et d'écritures : - Toutes les lectures de cette transaction renvoient des données du même horodatage. - Si une transaction est validée, aucun autre auteur n'a modifié les données lues dans la transaction après lecture. - Ces propriétés sont valables même pour les lectures qui n'affichent aucune ligne et pour les espaces entre les lignes renvoyées par les lectures de plage : les lignes inexistantes comptent comme des données. - Toutes les écritures au sein de cette transaction sont validées au même horodatage. - Toutes les écritures au sein de cette transaction ne deviennent visibles qu'après le commit de cette dernière. Il en résulte que toutes les lectures et écritures semblent s'être produites à un moment donné, à la fois du point de vue de la transaction elle-même, et d'autres lecteurs et auteurs de la base de données Cloud Spanner. En d'autres termes, les opérations de lecture et d'écriture se produisent au même horodatage Verrou exclusif Une fois la transaction validée et les écritures appliquées, la transaction tente de passer à un verrou exclusif. Elle bloque les nouveaux verrous en lecture partagés sur les données, attend que les verrous en lecture partagés existants soient annulés, puis place un verrou exclusif pour un accès exclusif aux données.
  6. Error: send commit request to split leader Optimizing Applications, Schemas, and Query Design on Cloud Spanner (Cloud Next ‘18): https://www.youtube.com/watch?v=DxrdatA_ULk
  7. L'annotation ON DELETE CASCADE signifie que, lorsqu'une ligne de la table parente est supprimée, ses lignes enfants dans cette table sont également automatiquement supprimées (c'est-à-dire toutes les lignes qui commencent par la même clé primaire). Si une table enfant ne comporte pas cette annotation ou si l'annotation affiche ON DELETE NO ACTION, vous devez supprimer les lignes enfants avant de pouvoir supprimer la ligne parent.
  8. Référence: https://cloud.google.com/spanner/docs/schema-design
  9. Référence: https://cloud.google.com/spanner/docs/secondary-indexes Quand faut-il créer un index entrelacé ? Si la clé d'index que vous souhaitez utiliser pour les opérations d'index correspond à la clé d'une table, vous pouvez entrelacer l'index dans cette table si la ligne de la table doit avoir une relation de localité de données avec les lignes indexées correspondantes. Par exemple, si vous souhaitez indexer toutes les lignes de la table Songs pour une ligne particulière de la table Singers, vos clés d'index contiendront les éléments SingerId et SongName. Votre index serait alors un bon candidat à entrelacer dans Singers si vous extrayez fréquemment des informations sur un chanteur lorsque vous recherchez ses chansons dans l'index. Objectif: éviter des jointures distribuées ( https://github.com/mozilla-services/server-syncstorage/issues/107 )
  10. Référence: https://cloud.google.com/spanner/docs/sql-best-practices Requête: https://cloud.google.com/spanner/docs/query-syntax
  11. Référence: https://cloud.google.com/spanner/docs/query-execution-plans Le détail: https://cloud.google.com/spanner/docs/query-execution-operators Jointure non distribuée car un seul nœud Spanner disponible
  12. Index: CREATE INDEX allSessionsByCountryChannelGrouping ON all_sessions(country, channelGrouping) storing (productSKU)
  13. Requête: select t2.channelGrouping, t2.country, count(*) as count from all_sessions t1 JOIN all_sessions_index t2 on t1.fullVisitorID = t2.fullVisitorID where t1.id between 1 and 10 group by t2.channelGrouping, t2.country order by count desc 3 noeuds Spanner
  14. Possibilité de limiter le nombre de nœuds Dataflow et de choisir la nature de la machine
  15. Volume de chargement des données: 5,61 Go
  16. Latence = diffusion des données
  17. 4 VM n1-standard-16 ( 16 CPU, 60 GB RAM ) : de 42 minutes à 22 minutes …
  18. Une VM dataflow à 64 CPU pour ne pas être limité par la machine qui charge les données Une configuration régionale à 3, puis 6, puis 9 nœuds pour scaler Spanner Le débit disque sature.
  19. gcloud shell gcloud spanner databases list –instance=instance-sentelis
  20. Autre exemple de migration: https://cloud.google.com/spanner/docs/migrating-postgres-spanner