Google Cloud Spanner : le bon, le mauvais, le moche

Bonjour, amis de Habr. Comme d'habitude, nous continuons à partager des contenus intéressants en vue du lancement de nouveaux cours. Aujourd'hui, spécialement pour vous, nous avons traduit un article sur Google Cloud Spanner, coïncidant avec le lancement du cours «AWS pour les développeurs».

Google Cloud Spanner : le bon, le mauvais, le moche

Publié à l'origine sur le blog Lightspeed HQ.

En tant qu'entreprise qui propose de nombreuses solutions POS cloud pour les commerçants, les restaurateurs et les vendeurs en ligne dans le monde entier, Lightspeed utilise plusieurs types de plateformes de bases de donnĂ©es pour de nombreux cas d'utilisation transactionnels, analytiques et de recherche. Chacune de ces plateformes de bases de donnĂ©es a ses forces et ses faiblesses. Ainsi, lorsque Google a prĂ©sentĂ© Cloud Spanner sur le marchĂ© — avec des fonctionnalitĂ©s prometteuses, sans prĂ©cĂ©dent dans le monde des bases de donnĂ©es relationnelles, telles que la scalabilitĂ© horizontale quasi illimitĂ©e et un accord de niveau de service (SLA) de 99,999 % — nous n'avons pas pu rĂ©sister Ă  la tentation de l'essayer !

Pour fournir un aperçu complet de notre expérience avec Cloud Spanner, ainsi que des critÚres d'évaluation que nous avons utilisés, nous aborderons les sujets suivants :

  1. Nos critÚres d'évaluation
  2. Cloud Spanner en quelques mots
  3. Notre évaluation
  4. Nos conclusions

Google Cloud Spanner : le bon, le mauvais, le moche

1. Nos critÚres d'évaluation

Avant d'approfondir les fonctionnalitĂ©s de Cloud Spanner, ses similitudes et diffĂ©rences avec d'autres solutions sur le marchĂ©, discutons d'abord des principaux cas d'utilisation que nous avions en tĂȘte en considĂ©rant oĂč dĂ©ployer Cloud Spanner dans notre infrastructure :

  • Comme un remplacement (prĂ©valent) de la solution de base de donnĂ©es SQL traditionnelle
  • En tant que solution OLTP avec prise en charge de l'OLAP

Remarque : Pour simplifier et faciliter la comparaison, cet article compare Cloud Spanner avec les options MySQL des familles de solutions GCP Cloud SQL et Amazon AWS RDS.

Utilisation de Cloud Spanner comme remplacement de la solution de base de données SQL traditionnelle

Dans un environnement de bases de donnĂ©es traditionnelles, lorsque le temps de rĂ©ponse des requĂȘtes Ă  la base de donnĂ©es approche ou dĂ©passe les seuils prĂ©dĂ©finis des applications (principalement en raison de l'augmentation du nombre d'utilisateurs et/ou de requĂȘtes), plusieurs mĂ©thodes existent pour rĂ©duire le temps de rĂ©ponse Ă  des niveaux acceptables. Cependant, la plupart de ces solutions nĂ©cessitent une intervention manuelle.

Par exemple, la premiÚre étape à suivre consiste à examiner les différents paramÚtres de la base de données liés à la performance et à les configurer de maniÚre à ce qu'ils correspondent le mieux aux modÚles d'utilisation des applications. Si cela s'avÚre insuffisant, il est possible de choisir un dimensionnement vertical ou horizontal de la base de données.

Le dimensionnement vertical d'une application implique la mise à niveau de l'instance du serveur, généralement en ajoutant plus de processeurs/noyaux, plus de mémoire RAM, un stockage plus rapide, etc. L'ajout de ressources matérielles supplémentaires entraßne une augmentation des performances de la base de données, mesurée principalement en transactions par seconde et en latence des transactions pour les systÚmes OLTP. Les systÚmes de bases de données relationnelles (qui utilisent une approche multithreadée), tels que MySQL, se dimensionnent bien verticalement.

Cette approche présente plusieurs inconvénients, le plus évident étant la taille maximale du serveur disponible sur le marché. Une fois que la limite de la plus grande instance de serveur est atteinte, il ne reste qu'une seule option : le dimensionnement horizontal.

Le dimensionnement horizontal est une approche oĂč l'on ajoute davantage de serveurs au cluster, afin d'augmenter idĂ©alement les performances de maniĂšre linĂ©aire avec l'ajout de serveurs. La plupart des de bases de donnĂ©es systĂšmes de bases de donnĂ©es se dimensionnent mal horizontalement ou ne se dimensionnent pas du tout. Par exemple, MySQL peut se dimensionner horizontalement pour les opĂ©rations de lecture en ajoutant des lecteurs esclaves, mais ne peut pas se dimensionner horizontalement pour les opĂ©rations d'Ă©criture.

D'un autre cÎté, en raison de sa nature, Cloud Spanner peut facilement se dimensionner horizontalement avec un minimum d'intervention.

Base de donnĂ©es complĂšte DBaaS doit ĂȘtre Ă©valuĂ©e sous diffĂ©rents angles. Comme base, nous avons choisi la base de donnĂ©es cloud la plus populaire – pour Google, GCP Cloud SQL et pour Amazon, AWS RDS. Dans notre Ă©valuation, nous nous sommes concentrĂ©s sur les catĂ©gories suivantes :

  • Comparaison de fonctionnalitĂ©s : Ă©tendue SQL, DDL, DML ; bibliothĂšques de connexion/connecteurs, support des transactions, etc.
  • Support de dĂ©veloppement : facilitĂ© de dĂ©veloppement et de test.
  • Support de l'administration : gestion des instances - par exemple, montĂ©e/descente en charge et mise Ă  niveau des instances ; SLA, sauvegarde et restauration ; sĂ©curitĂ©/contrĂŽle d'accĂšs.

Utilisation de Cloud Spanner comme solution OLTP avec support OLAP

Bien que Google ne déclare pas explicitement que Cloud Spanner est destiné au traitement analytique, il partage certains attributs avec d'autres moteurs comme Apache Impala & Kudu et YugaByte, conçus pour des charges de travail OLAP.

MĂȘme s'il n'y avait qu'une faible probabilitĂ© que Cloud Spanner inclue un moteur HTAP (traitement hybride transactionnel/analytique) Ă©volutif horizontalement cohĂ©rent avec un ensemble de fonctionnalitĂ©s OLAP (plus ou moins) utilisable, nous pensons que cela mĂ©riterait notre attention.

Cela dit, nous avons examiné les catégories suivantes :

  • Chargement des donnĂ©es, index et support du partitionnement
  • Performance des requĂȘtes et DML

2. Cloud Spanner en bref

Google Spanner est un systÚme de gestion de bases de données relationnelles (SGBDR) en cluster, utilisé par Google pour plusieurs de ses propres services. Google l'a rendu disponible au public pour les utilisateurs de Google Cloud Platform début 2017.

Voici quelques-uns des attributs de Cloud Spanner :

  • Cluster SGBDR hautement cohĂ©rent et Ă©volutif : utilise la synchronisation matĂ©rielle du temps pour garantir la cohĂ©rence des donnĂ©es.
  • Support des transactions inter-table : les transactions peuvent couvrir plusieurs tables - pas nĂ©cessairement limitĂ©es Ă  une seule table (contrairement Ă  Apache HBase ou Apache Kudu).
  • Tables basĂ©es sur la clĂ© primaire : toutes les tables doivent avoir une clĂ© primaire dĂ©clarĂ©e (KP), qui peut ĂȘtre composĂ©e de plusieurs colonnes de la table. Les donnĂ©es des tables sont stockĂ©es dans l'ordre de la KP, ce qui les rend trĂšs efficaces et rapides Ă  rechercher par KP. Comme d'autres systĂšmes basĂ©s sur la KP, l'implĂ©mentation doit ĂȘtre modĂ©lisĂ©e en tenant compte des cas d'utilisation prĂ©alablement rĂ©flĂ©chis pour atteindre la meilleure performance.
  • Tables alternĂ©es : les tables peuvent avoir des dĂ©pendances physiques entre elles. Les lignes de la table enfant peuvent correspondre aux lignes de la table parent. Cette approche accĂ©lĂšre la recherche de relations qui peuvent ĂȘtre dĂ©finies lors de la modĂ©lisation des donnĂ©es, par exemple lors de l'hĂ©bergement commun des clients et de leurs factures.
  • Indexes : Cloud Spanner prend en charge les index secondaires. Un index se compose de colonnes indexĂ©es et de toutes les colonnes de la clĂ© primaire. Si souhaitĂ©, l'index peut Ă©galement contenir d'autres colonnes non indexĂ©es. Un index peut ĂȘtre entrelacĂ© avec la table parent pour accĂ©lĂ©rer les requĂȘtes. Plusieurs restrictions s'appliquent aux index, telles que le nombre maximum de colonnes supplĂ©mentaires pouvant ĂȘtre stockĂ©es dans l'index. De plus, les requĂȘtes Ă  travers les index peuvent ĂȘtre moins directes que dans d'autres SGBD.

« Cloud Spanner choisit automatiquement l'index seulement dans de rares cas. En particulier, Cloud Spanner ne choisit pas automatiquement un index secondaire si la requĂȘte demande des colonnes qui ne sont pas conservĂ©es dans l'index ».

  • Accord de niveau de service (SLA) : dĂ©ploiement dans une seule rĂ©gion avec un SLA de 99,99 % ; dĂ©ploiements multirĂ©gionaux avec un SLA de 99,999 %. Bien que l'accord de niveau de service soit simplement un accord et non une garantie, je crois que les employĂ©s de Google disposent de donnĂ©es suffisamment prĂ©cises pour faire une telle affirmation. (Pour rĂ©fĂ©rence, 99,999 % Ă©quivaut Ă  26,3 secondes d'indisponibilitĂ© du service par mois.)
  • En savoir plus : https://cloud.google.com/spanner/

Remarque : Le projet Apache Tephra ajoute un support avancĂ© des transactions dans Apache HBase (qui est Ă©galement maintenant implĂ©mentĂ© dans Apache Phoenix en version bĂȘta).

3. Notre évaluation

Ainsi, nous avons tous lu les dĂ©clarations de Google sur les avantages de Cloud Spanner — une montĂ©e en charge horizontale pratiquement illimitĂ©e tout en conservant une grande cohĂ©rence et des SLA trĂšs Ă©levĂ©s. Bien que ces exigences soient en tout cas extrĂȘmement difficiles Ă  atteindre, notre objectif n'Ă©tait pas de les contredire. Concentrons-nous plutĂŽt sur d'autres Ă©lĂ©ments qui prĂ©occupent la plupart des utilisateurs de bases de donnĂ©es : l'intĂ©gritĂ© et la facilitĂ© d'utilisation.

Nous avons évalué Cloud Spanner comme un remplacement de Sharded MySQL.

Google Cloud SQL et Amazon AWS RDS, deux des bases de donnĂ©es OLTP les plus populaires sur le marchĂ© du cloud, offrent un large Ă©ventail de fonctionnalitĂ©s. Cependant, pour Ă©voluer au-delĂ  de la taille d'un seul nƓud, vous devez effectuer un partitionnement des applications. Cette approche ajoute une complexitĂ© supplĂ©mentaire tant pour les applications que pour l'administration. Nous avons examinĂ© comment Spanner s'intĂšgre dans le scĂ©nario de regroupement de plusieurs segments en une seule instance et quelles fonctionnalitĂ©s (le cas Ă©chĂ©ant) pourraient devoir ĂȘtre sacrifiĂ©es.

Support SQL, DML et DDL, ainsi que connecteur et bibliothĂšques ?

Tout d'abord, lorsque vous démarrez avec n'importe quelle base de données, vous devez créer un modÚle de données. Si vous pensez que vous pouvez connecter JDBC Spanner à votre outil SQL préféré, vous découvrirez que vous pouvez interroger vos données avec, mais que vous ne pouvez pas l'utiliser pour créer ou modifier des tables (DDL) ou pour toute opération d'insertion/mise à jour/suppression (DML). Le JDBC officiel de Google ne prend en charge ni l'un ni l'autre.

« Actuellement, les pilotes ne prennent pas en charge les opérateurs DML ou DDL ».
Documentation Spanner

Avec la console GCP, la situation n'est pas meilleure — vous ne pouvez envoyer que des requĂȘtes SELECT. Heureusement, il existe un pilote JDBC communautaire qui prend en charge DML et DDL, y compris les transactions. github.com/olavloite/spanner-jdbc. Bien que ce pilote soit extrĂȘmement utile, l'absence d'un pilote JDBC propre Ă  Google est surprenante. Heureusement, Google propose un large soutien pour les bibliothĂšques clientes (basĂ©es sur gRPC) : C#, Go, Java, node.js, PHP, Python et Ruby.

L'utilisation presque obligatoire des API personnalisĂ©es de Cloud Spanner (en raison de l'absence de DDL et DML dans JDBC) entraĂźne certaines limitations pour les zones de code associĂ©es, telles que les pools de connexions ou les frameworks de liaison de base de donnĂ©es (par exemple, Spring MVC). En gĂ©nĂ©ral, avec JDBC, vous pouvez choisir librement votre pool de connexions prĂ©fĂ©rĂ© (par exemple, HikariCP, DBCP, C3PO, etc.), qui est Ă©prouvĂ© et fonctionne bien. Dans le cas des API personnalisĂ©es Spanner, nous devons nous appuyer sur les frameworks/pools de liaison/sessions que nous avons créés nous-mĂȘmes.

Une structure orientĂ©e vers la clĂ© primaire (PK) permet Ă  Cloud Spanner d'accĂ©der trĂšs rapidement aux donnĂ©es via la PK, mais entraĂźne Ă©galement certains problĂšmes de requĂȘtes.

  • Vous ne pouvez pas mettre Ă  jour la valeur de la clĂ© primaire ; vous devez d'abord supprimer l'enregistrement avec la clĂ© primaire d'origine et le rĂ©insĂ©rer avec la nouvelle valeur. (Cela ressemble Ă  d'autres bases de donnĂ©es orientĂ©es sur les clĂ©s primaires / mĂ©canismes de stockage.)
  • Tout opĂ©rateur UPDATE et DELETE doit spĂ©cifier la clĂ© primaire dans la clause WHERE, donc il ne peut pas y avoir d'opĂ©rateurs DELETE vides - il doit toujours y avoir une sous-requĂȘte, par exemple : UPDATE xxx WHERE id IN (SELECT id FROM table1)
  • Absence d'une option d'auto-incrĂ©mentation ou de quelque chose de similaire qui dĂ©finit une sĂ©quence pour le champ de la clĂ© primaire. Pour que cela fonctionne, la valeur correspondante doit ĂȘtre créée du cĂŽtĂ© de l'application.

Index secondaires ?

Google Cloud Spanner prend en charge nativement les index secondaires. C'est une fonctionnalité trÚs appréciée qui n'est pas toujours présente dans d'autres technologies. Apache Kudu ne prend actuellement pas en charge les index secondaires, et Apache HBase ne prend pas en charge les index directement, mais peut les ajouter via Apache Phoenix.

Les index dans Kudu et HBase peuvent ĂȘtre modĂ©lisĂ©s comme une table distincte avec une composition diffĂ©rente des clĂ©s primaires, mais l'atomicitĂ© des opĂ©rations effectuĂ©es sur la table parente et les tables d'index associĂ©es doit ĂȘtre gĂ©rĂ©e au niveau de l'application et n'est pas triviale dans une mise en Ɠuvre correcte.

Comme mentionnĂ© dans la revue de Cloud Spanner, ses index peuvent diffĂ©rer des index MySQL. Il convient donc de faire preuve d'une attention particuliĂšre lors de la construction de requĂȘtes et de l'analyse des performances afin de garantir l'utilisation de l'index appropriĂ© lĂ  oĂč cela est nĂ©cessaire.

Vues ?

Les vues sont des objets trĂšs populaires et utiles dans une base de donnĂ©es. Elles peuvent ĂȘtre utiles pour un grand nombre de cas d'utilisation ; mes deux prĂ©fĂ©rĂ©es sont le niveau d'abstraction logique et le niveau de sĂ©curitĂ©. Malheureusement, Cloud Spanner ne prend pas en charge les vues. Cependant, cela ne nous limite que partiellement, car il n'y a pas de dĂ©tail sur le niveau des colonnes pour les autorisations d'accĂšs, oĂč les vues pourraient ĂȘtre une solution acceptable.

Dans la documentation de Cloud Spanner, dans la section qui dĂ©crit en dĂ©tail les quotas et les limites (spanner/quotas), il y en a une en particulier qui peut poser problĂšme pour certaines applications : Cloud Spanner a par dĂ©faut une limite de 100 bases de donnĂ©es par instance. Évidemment, cela peut devenir un vĂ©ritable obstacle pour une base de donnĂ©es destinĂ©e Ă  Ă©voluer au-delĂ  de 100 bases de donnĂ©es. Heureusement, aprĂšs avoir discutĂ© avec notre reprĂ©sentant technique de Google, nous avons dĂ©couvert que cette limite peut ĂȘtre augmentĂ©e Ă  pratiquement n'importe quelle valeur via le support technique de Google.

Support pour le développement ?

Cloud Spanner offre un support assez respectable pour les langages de programmation interagissant avec son API. Les bibliothÚques officiellement prises en charge couvrent C#, Go, Java, node.js, PHP, Python et Ruby. La documentation est assez détaillée, mais comme c'est le cas avec d'autres technologies de pointe, la communauté est relativement petite par rapport aux technologies de bases de données les plus populaires, ce qui peut prolonger le temps nécessaire pour résoudre des cas d'utilisation ou des problÚmes moins courants.

Et qu'en est-il du support pour le développement local ?

Nous n'avons pas trouvĂ© de moyen de crĂ©er une instance Cloud Spanner dans un environnement local. Le plus proche que nous avons obtenu est une image Docker CockroachDB, qui est en principe similaire, mais en pratique trĂšs diffĂ©rente. Par exemple, CockroachDB peut utiliser PostgreSQL JDBC. Étant donnĂ© que l'environnement de dĂ©veloppement doit ĂȘtre aussi proche que possible de l'environnement de production, Cloud Spanner n'est pas idĂ©al, car il faut compter sur une instance Spanner complĂšte. Pour Ă©conomiser des coĂ»ts, vous pouvez opter pour une instance d'une seule rĂ©gion.

Support d'administration ?

CrĂ©er une instance Cloud Spanner est trĂšs simple. Il suffit de choisir entre la crĂ©ation d'une instance multi-rĂ©gionale ou d'une instance d'une seule rĂ©gion, de spĂ©cifier la ou les rĂ©gions et le nombre de nƓuds. En moins d'une minute, l'instance sera lancĂ©e et prĂȘte Ă  l'emploi.

Plusieurs mĂ©triques de base sont directement disponibles sur la page Spanner dans la console Google. Des vues plus dĂ©taillĂ©es sont accessibles via Stackdriver, oĂč vous pouvez Ă©galement dĂ©finir des seuils pour les mĂ©triques et des politiques d'alerte.

AccĂšs aux ressources ?

MySQL offre des configurations de permissions et de rÎles utilisateurs trÚs détaillées et étendues. Il est facile de gérer l'accÚs à une table spécifique, voire à un sous-ensemble de ses colonnes. Cloud Spanner utilise l'outil Google Identity & Access Management (IAM), qui permet d'établir des politiques et des permissions à un niveau trÚs élevé. L'option la plus détaillée est la permission au niveau de la base de données, qui ne s'intÚgre pas dans la plupart des cas de production. Cette limitation vous oblige à ajouter des mesures de sécurité supplémentaires dans votre code, votre infrastructure, ou les deux, pour prévenir l'utilisation non autorisée des ressources Spanner.

Des sauvegardes ?

Pour parler simplement, il n'existe pas de sauvegardes dans Cloud Spanner. Bien que les exigences Ă©levĂ©es du SLA de Google garantissent que vous ne perdrez aucune donnĂ©e en raison de pannes matĂ©rielles ou de bases de donnĂ©es, cela ne protĂšge pas contre les erreurs humaines, les dĂ©fauts d’application, etc. Nous savons tous que la haute disponibilitĂ© ne remplace pas une stratĂ©gie de sauvegarde rĂ©flĂ©chie. Pour l'instant, la seule façon de sauvegarder les donnĂ©es est de les transfĂ©rer par flux Ă  partir de la base de donnĂ©es vers un environnement de stockage sĂ©parĂ©.

Performance des requĂȘtes ?

Pour charger les donnĂ©es et tester les requĂȘtes, nous avons utilisĂ© Yahoo! Cloud Serving Benchmark. Le tableau ci-dessous prĂ©sente la charge de travail B YCSB avec un ratio de lecture de 95 % et d'Ă©criture de 5 %.

Google Cloud Spanner : le bon, le mauvais, le moche

* Le test de charge a été effectué sur un moteur de calcul (CE) n1-standard-32 (32 vCPU, 120 Go de RAM), et l'instance de test n'a jamais été un goulot d'étranglement dans les tests.
** Le nombre maximum de threads dans une instance YCSB est de 400. Il a été nécessaire de lancer six instances parallÚles des tests YCSB pour obtenir un total de 2400 threads.

En examinant les rĂ©sultats des tests, notamment la combinaison de la charge du processeur et du TPS, nous pouvons clairement voir que Cloud Spanner Ă©volue assez bien. Une forte charge, gĂ©nĂ©rĂ©e par un grand nombre de threads, est compensĂ©e par un grand nombre de nƓuds dans le cluster Cloud Spanner. Bien que la latence semble assez Ă©levĂ©e, surtout avec 2400 threads, des tests supplĂ©mentaires avec 6 instances plus petites du moteur de calcul pourraient ĂȘtre nĂ©cessaires pour obtenir des chiffres plus prĂ©cis. Chaque instance exĂ©cutera un test YCSB au lieu d'une seule grande instance CE avec 6 tests parallĂšles. Cela permettra de mieux diffĂ©rencier la latence des requĂȘtes Cloud Spanner et la latence ajoutĂ©e par la connexion rĂ©seau entre Cloud Spanner et l'instance CE sur laquelle le test est effectuĂ©.

Comment Cloud Spanner se comporte-t-il en tant qu'OLAP ?

Partitionnement ?

La division des donnĂ©es en segments physiquement et/ou logiquement indĂ©pendants, appelĂ©s partitions, est un concept trĂšs populaire dans la plupart des mĂ©canismes OLAP. Les partitions peuvent amĂ©liorer considĂ©rablement les performances des requĂȘtes et la maintenabilitĂ© de la base de donnĂ©es. Une exploration plus approfondie des partitions pourrait donner lieu Ă  un article (ou plusieurs), donc mentionnons simplement l'importance d'avoir un schĂ©ma de partitionnement et de sous-partitionnement. La capacitĂ© Ă  sectionner les donnĂ©es en partitions et mĂȘme plus loin en sous-partitions est cruciale pour les performances des requĂȘtes analytiques.

Cloud Spanner ne prend pas en charge les partitions en tant que telles. Il divise les donnĂ©es en ce qu'on appelle des splits- basĂ©s sur des plages de clĂ©s primaires. La division est effectuĂ©e automatiquement pour Ă©quilibrer la charge dans le cluster Cloud Spanner. Une fonctionnalitĂ© trĂšs pratique de Cloud Spanner est la rĂ©partition de la charge de la table parent (table qui n’est pas interleaved avec une autre). Spanner dĂ©termine automatiquement si splits des donnĂ©es sont plus frĂ©quemment lues que celles d'autres splits- et peut dĂ©cider de procĂ©der Ă  un partage supplĂ©mentaire. Ainsi, plus de nƓuds peuvent ĂȘtre impliquĂ©s dans la requĂȘte, ce qui augmente Ă©galement efficacement la capacitĂ©.

Chargement des données ?

La méthode Cloud Spanner pour les gros volumes de données est similaire à un chargement normal. Pour atteindre des performances optimales, vous devez suivre certaines recommandations, notamment :

  • Triez vos donnĂ©es par clĂ© primaire.
  • Divisez-les en 10*nƓuds sections sĂ©parĂ©es.
  • CrĂ©ez un ensemble de tĂąches de travail qui chargent les donnĂ©es en parallĂšle.

Avec ce type de chargement des donnĂ©es, tous les nƓuds de Cloud Spanner sont utilisĂ©s.

Nous avons utilisé la charge de travail A YCSB pour générer un ensemble de données de 10 millions de lignes.

Google Cloud Spanner : le bon, le mauvais, le moche

* Le test de charge a été réalisé sur le moteur de calcul n1-standard-32 (32 vCPU, 120 Go de RAM), et l'instance de test n'a jamais été un goulot d'étranglement lors des tests.
** Une configuration Ă  1 nƓud n'est pas recommandĂ©e pour les charges de travail en production.

Comme mentionnĂ© ci-dessus, Cloud Spanner gĂšre automatiquement les fractionnements en fonction de leur charge, donc les rĂ©sultats s'amĂ©liorent aprĂšs plusieurs rĂ©pĂ©titions consĂ©cutives du test. Les rĂ©sultats prĂ©sentĂ©s ici sont les meilleures performances que nous avons obtenues. En regardant les chiffres ci-dessus, nous pouvons voir comment Cloud Spanner (bien) Ă©volue avec l'augmentation du nombre de nƓuds dans le cluster. Les chiffres qui se dĂ©marquent reprĂ©sentent des latences moyennes extrĂȘmement basses, qui contrastent avec les rĂ©sultats de charges de travail mixtes (95 % pour la lecture et 5 % pour l'Ă©criture), comme dĂ©crit dans la section ci-dessus.

Évoluer ?

Augmenter ou diminuer le nombre de nƓuds de Cloud Spanner est une tĂąche qui se fait en un clic. Si vous souhaitez charger rapidement des donnĂ©es, vous pouvez envisager de booster l'instance Ă  son maximum (dans notre cas, c'Ă©tait 25 nƓuds dans la rĂ©gion US-EAST), puis rĂ©duire le nombre de nƓuds adaptĂ© Ă  votre charge de travail normale, une fois que toutes les donnĂ©es sont dans la base de donnĂ©es, en gardant Ă  l'esprit la limite de 2 To/nƓud.

Nous avons Ă©tĂ© rappelĂ©s de cette limite mĂȘme avec une base de donnĂ©es beaucoup plus petite. AprĂšs plusieurs exĂ©cutions de tests de charge, notre base de donnĂ©es faisait environ 155 Go, et en rĂ©duisant Ă  une instance Ă  1 nƓud, nous avons rencontrĂ© l'erreur suivante :

Google Cloud Spanner : le bon, le mauvais, le moche

Nous avons rĂ©ussi Ă  rĂ©duire la portĂ©e de 25 Ă  2 instances, mais nous sommes restĂ©s bloquĂ©s sur deux nƓuds.

L'augmentation et la rĂ©duction du nombre de nƓuds dans un cluster Cloud Spanner peuvent ĂȘtre automatisĂ©es via l'API REST. Cela peut ĂȘtre particuliĂšrement utile pour diminuer une charge accrue sur le systĂšme aux heures de pointe.

Comment se porte les performances des requĂȘtes OLAP ?

À l'origine, nous avions prĂ©vu de consacrer beaucoup de temps Ă  notre Ă©valuation de Spanner sur cette partie. AprĂšs plusieurs SELECT COUNT, nous avons immĂ©diatement compris que le test serait bref et que Spanner NE serait pas adaptĂ© comme moteur OLAP. Peu importe le nombre de nƓuds dans le cluster, une simple sĂ©lection du nombre de lignes dans une table de 10M de lignes a pris entre 55 et 60 secondes. De plus, toute requĂȘte nĂ©cessitant plus de mĂ©moire pour stocker des rĂ©sultats intermĂ©diaires s'est terminĂ©e par une erreur OOM.

SELECT COUNT(DISTINCT(field0)) FROM usertable; — (10M de valeurs distinctes) -> SpoolingHashAggregateIterator a manquĂ© de mĂ©moire lors de la crĂ©ation de nouvelles lignes.

Certaines donnĂ©es concernant les requĂȘtes TPC-H peuvent ĂȘtre trouvĂ©es dans l'article de Todd Lipkon nosql-kudu-spanner-slides.html, diapositives 42 et 43. Ces chiffres sont en accord avec nos propres rĂ©sultats (malheureusement).

Google Cloud Spanner : le bon, le mauvais, le moche

4. Nos conclusions

Étant donnĂ© l'Ă©tat actuel des fonctionnalitĂ©s de Cloud Spanner, il est difficile de l'imaginer comme un simple remplacement d'une solution OLTP existante, surtout lorsque vos besoins dĂ©passeront ses capacitĂ©s. Il faudrait dĂ©penser un temps considĂ©rable pour construire une solution en tenant compte des lacunes de Cloud Spanner.

Lorsque nous avons commencé l'évaluation de Cloud Spanner, nous nous attendions à ce que ses fonctionnalités de gestion soient au niveau ou, du moins, pas trÚs éloignées des autres solutions Google SQL. Mais nous avons été surpris par l'absence totale de sauvegardes et le contrÎle d'accÚs trÚs limité sur les ressources. Sans parler de l'absence de vues, de l'absence d'un environnement de développement local, de séquences non prises en charge, de JDBC sans support DML et DDL, etc.

Alors, que faire pour ceux qui doivent mettre Ă  l'Ă©chelle une base de donnĂ©es transactionnelle ? Il semble qu'il n'y ait pas encore de solution unique sur le marchĂ© qui convienne Ă  tous les cas d'utilisation. Il existe de nombreuses solutions Ă  code source fermĂ© et ouvert (certaines d'entre elles sont mentionnĂ©es dans cet article), chacune ayant ses forces et ses faiblesses, mais aucune d'entre elles n'offre de SaaS avec un SLA de 99,999 % et un haut niveau de cohĂ©rence. Si un niveau Ă©levĂ© de SLA est votre objectif principal et que vous n'ĂȘtes pas enclin Ă  crĂ©er votre propre solution pour plusieurs environnements cloud, Cloud Spanner pourrait ĂȘtre la solution que vous recherchez. Mais vous devez ĂȘtre conscient de toutes ses limitations.

Pour ĂȘtre juste, il faut noter que Cloud Spanner a Ă©tĂ© rendu accessible au public au printemps 2017, il est donc raisonnable de s'attendre Ă  ce que certains de ses dĂ©fauts actuels puissent Ă©ventuellement disparaĂźtre (nous l'espĂ©rons), et lorsque cela se produira, cela pourrait changer la donne. AprĂšs tout, Cloud Spanner n'est pas simplement un projet tiers pour Google. Google l'utilise comme base pour d'autres produits Google. Et lorsque Google a rĂ©cemment remplacĂ© Megastore dans Google Cloud Storage par Cloud Spanner, cela a permis Ă  Google Cloud Storage d'ĂȘtre strictement cohĂ©rent pour les listes d'objets Ă  l'Ă©chelle mondiale (ce qui n'est toujours pas le cas pour Amazon S3).

Donc, il y a toujours de l'espoir... nous espérons.

C'est tout. Comme l'auteur de l'article, nous continuons Ă©galement Ă  espĂ©rer, et que pensez-vous Ă  ce sujet ? Écrivez vos commentaires.

Nous invitons tous les intéressés à visiter notre webinaire gratuit dans le cadre duquel nous expliquerons en détail le cours «AWS pour les développeurs» d'OTUS.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster