Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Bonjour Ă  tous ! Je m'appelle Nikolai Golov. Avant, je travaillais chez Avito et j'ai dirigĂ© pendant six ans la Data Platform, c'est-Ă -dire que je m'occupais de toutes les bases : analytiques (Vertica, ClickHouse), de flux et OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Pendant ce temps, j'ai appris Ă  connaĂźtre un grand nombre de bases de donnĂ©es — des plus variĂ©es et atypiques, avec des cas d'utilisation non standards.

Actuellement, je travaille chez ManyChat. C'est fondamentalement une startup — nouvelle, ambitieuse et en pleine croissance. Et quand je suis arrivĂ© dans l'entreprise, la question classique s'est posĂ©e : « Qu'est-ce qu'un jeune startup devrait prendre sur le marchĂ© des SGBD et des bases de donnĂ©es ? ».

Dans cet article, qui est basé sur ma présentation à le festival en ligne RIT++2020, je répondrai à cette question. La version vidéo de la présentation est disponible sur YouTube.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Les bases de données bien connues de l'année 2020

Nous sommes en 2020, j'ai regardé autour de moi et j'ai vu trois types de bases de données.

Le premier type — bases OLTP classiques: PostgreSQL, SQL Server, Oracle, MySQL. Elles ont Ă©tĂ© Ă©crites il y a longtemps, mais restent pertinentes, car bien connues de la communautĂ© des dĂ©veloppeurs.

Le deuxiĂšme type — bases des annĂ©es 2000. Elles ont essayĂ© de s'Ă©loigner des modĂšles classiques en renonçant au SQL, aux structures traditionnelles et Ă  l'ACID, grĂące Ă  l'ajout de sharding intĂ©grĂ© et d'autres fonctionnalitĂ©s attractives. Par exemple, il s'agit de Cassandra, MongoDB, Redis ou Tarantool. Toutes ces solutions souhaitaient proposer quelque chose de vraiment nouveau et ont trouvĂ© leur niche, car elles se sont rĂ©vĂ©lĂ©es extrĂȘmement pratiques pour certaines tĂąches. Je les dĂ©signerai par le terme gĂ©nĂ©rique NOSQL.

Les annĂ©es 2000 sont terminĂ©es, les bases NOSQL sont devenues familiĂšres, et le monde, selon moi, a fait un pas suivant — vers les bases managed. Ces bases ont un noyau similaire Ă  celui des bases OLTP classiques ou des nouvelles NoSQL. Mais elles n'ont pas besoin de DBA et DevOps et fonctionnent sur du matĂ©riel gĂ©rĂ© dans le cloud. Pour le dĂ©veloppeur, c'est « juste une base », qui fonctionne quelque part, et comment elle est installĂ©e sur le serveur, qui a configurĂ© le serveur et qui le met Ă  jour, ça ne dĂ©range personne.

Exemples de telles bases :

  • AWS RDS — enveloppe gĂ©rĂ©e de PostgreSQL/MySQL.
  • DynamoDB — Ă©quivalent AWS des bases de donnĂ©es de type document, similaire Ă  Redis et MongoDB.
  • Amazon Redshift — base analytique gĂ©rĂ©e.

À la base, ce sont d'anciennes bases, mais mises sur un environnement gĂ©rĂ©, sans nĂ©cessitĂ© de travailler avec le matĂ©riel.

Remarque. Les exemples proviennent de l'environnement AWS, mais leurs équivalents existent également dans Microsoft Azure, Google Cloud ou Yandex.Cloud.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Qu'est-ce qui est nouveau Ă  ce sujet ? En 2020, rien de tout cela.

Concept Serverless

Une véritable nouveauté sur le marché en 2020 est le serverless ou les solutions sans serveur.

J'essaierai d'expliquer ce que cela signifie en prenant l'exemple d'un service ordinaire ou d'une application backend.
Pour déployer une application backend classique, nous achetons ou louons un serveur, copions notre code dessus, publions un endpoint à l'extérieur et payons réguliÚrement pour la location, l'électricité et les services du data center. C'est le schéma standard.

Y a-t-il une autre maniÚre de procéder ? Avec les services sans serveur, c'est possible.

Quel est l'objectif de cette approche : pas de serveur, pas mĂȘme de location d'une instance virtuelle dans le cloud. Pour dĂ©ployer le service, nous copions le code (les fonctions) dans un rĂ©pertoire et publions un endpoint Ă  l'extĂ©rieur. Ensuite, nous payons simplement pour chaque appel de cette fonction, en ignorant complĂštement le matĂ©riel sur lequel elle s'exĂ©cute.

J'essaierai d'illustrer cette approche avec des images.
Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

DĂ©ploiement classique. Nous avons un service avec une charge spĂ©cifique. Nous faisons tourner deux instances : des serveurs physiques ou des instances dans AWS. Les requĂȘtes externes sont dirigĂ©es vers ces instances, oĂč elles sont traitĂ©es.

Comme on peut le voir sur l'image, les serveurs ne sont pas utilisĂ©s de maniĂšre identique. Un est utilisĂ© Ă  100 %, avec deux requĂȘtes, tandis qu'un autre ne l'est qu'Ă  50 % — il est partiellement inactif. Si au lieu de trois requĂȘtes, il y en a 30, alors tout le systĂšme ne pourra pas gĂ©rer la charge et commencera Ă  ralentir.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

DĂ©ploiement sans serveur. Dans un environnement sans serveur, un tel service n'a pas d'instances ni de serveurs. Il y a un certain pool de ressources rĂ©chauffĂ©es — de petits conteneurs Docker prĂ©parĂ©s avec le code de la fonction dĂ©ployĂ©e. Le systĂšme reçoit des requĂȘtes externes et pour chacune d'elles, le framework sans serveur lance un petit conteneur avec le code : il traite exactement cette requĂȘte et dĂ©truit le conteneur.

Une requĂȘte — un conteneur lancĂ©, 1000 requĂȘtes — 1000 conteneurs. Et le dĂ©ploiement sur des serveurs physiques — c'est dĂ©jĂ  le travail du fournisseur de cloud. Il est complĂštement masquĂ© par le framework sans serveur. Dans ce concept, nous payons pour chaque appel. Par exemple, si un appel arrive par jour — nous payons pour un appel, s'il y a un million par minute — nous payons pour un million. Ou par seconde, cela arrive aussi.

Le concept de publication de fonction sans serveur convient aux services sans état. Si vous avez besoin d'un service avec état, il faut alors ajouter une base de données au service. Dans ce cas, lorsqu'il s'agit de travailler avec l'état, chaque fonction avec état enregistre et lit simplement à partir de la base de données. De plus, il peut s'agir de l'un des trois types de bases de données décrits au début de l'article.

Quelle est la limitation générale de toutes ces bases ? Ce sont les coûts d'un serveur cloud ou physique (ou plusieurs serveurs) toujours en fonctionnement. Peu importe si nous utilisons une base classique ou gérée, qu'il y ait un DevOps et un administrateur ou non, nous payons toujours 24 heures sur 24 pour le matériel, l'électricité et la location du centre de données. Si nous avons une base classique, nous payons pour le serveur principal et l'esclave. Si nous avons une base shardée à forte charge, nous payons pour 10, 20 ou 30 serveurs, et cela de façon continue.

La prĂ©sence de serveurs constamment rĂ©servĂ©s dans la structure des coĂ»ts Ă©tait autrefois perçue comme un mal inĂ©vitable. Les bases de donnĂ©es classiques ont aussi d'autres dĂ©fis, comme les limites sur le nombre de connexions, la rĂ©duction de l'Ă©volutivitĂ©, le consensus gĂ©o-distribuĂ© — certaines de ces choses peuvent ĂȘtre rĂ©solues dans des bases spĂ©cifiques, mais pas toutes en mĂȘme temps et pas parfaitement.

Base de donnĂ©es sans serveur — thĂ©orie

Question de 2020 : peut-on également rendre les bases de données sans serveur ? Tout le monde a entendu parler des backends sans serveur
 et si nous essayions également de rendre la base de données sans serveur ?

Cela peut sembler Ă©trange, car la base de donnĂ©es est un service avec Ă©tat, peu adaptĂ© Ă  une infrastructure sans serveur. De plus, l'Ă©tat de la base de donnĂ©es est trĂšs important : des gigaoctets, des tĂ©raoctets, et mĂȘme des pĂ©tas dans les bases de donnĂ©es analytiques. Il n'est pas si simple de les faire fonctionner dans des conteneurs Docker lĂ©gers.

D'autre part, pratiquement toutes les bases de donnĂ©es modernes contiennent une Ă©norme quantitĂ© de logique et de composants : transactions, validation de l'intĂ©gritĂ©, procĂ©dures, dĂ©pendances relationnelles et bien plus de logique. Une partie assez importante de la logique de la base de donnĂ©es nĂ©cessite un petit Ă©tat. Les gigaoctets et tĂ©raoctets sont directement utilisĂ©s seulement par une petite partie de la logique de la base de donnĂ©es liĂ©e Ă  l'exĂ©cution immĂ©diate des requĂȘtes.

Par consĂ©quent, l'idĂ©e est la suivante : si une partie de la logique peut ĂȘtre exĂ©cutĂ©e sans Ă©tat, pourquoi ne pas sĂ©parer la base en parties avec Ă©tat et sans Ă©tat.

Sans serveur pour des solutions OLAP

Voyons comment la séparation d'une base de données en parties avec état et sans état peut se concrétiser par des exemples pratiques.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Par exemple, nous avons une base de donnĂ©es analytique: donnĂ©es externes (cylindre rouge Ă  gauche), processus ETL qui charge les donnĂ©es dans la base, et un analyste qui envoie des requĂȘtes SQL Ă  la base. C'est le schĂ©ma classique de fonctionnement d'un entrepĂŽt de donnĂ©es.

Dans ce schĂ©ma, l'ETL s'exĂ©cute, de maniĂšre conditionnelle, une fois. Par la suite, il faut toujours payer pour les serveurs sur lesquels fonctionne la base de donnĂ©es alimentĂ©e par l'ETL, afin d'avoir un support pour les requĂȘtes.

ConsidĂ©rons une approche alternative, mise en Ɠuvre dans la base AWS Athena Serverless. Ici, il n'y a pas de matĂ©riel dĂ©diĂ© en permanence oĂč les donnĂ©es chargĂ©es sont stockĂ©es. Au lieu de cela :

  • L'utilisateur envoie une requĂȘte SQL Ă  Athena. L'optimiseur Athena analyse la requĂȘte SQL et recherche dans le stockage des mĂ©tadonnĂ©es (Metadata) les donnĂ©es spĂ©cifiques nĂ©cessaires Ă  l'exĂ©cution de la requĂȘte.
  • L'optimiseur, sur la base des donnĂ©es collectĂ©es, extrait les donnĂ©es nĂ©cessaires des sources externes vers un stockage temporaire (une base de donnĂ©es temporaire).
  • Dans le stockage temporaire, la requĂȘte SQL de l'utilisateur est exĂ©cutĂ©e, et le rĂ©sultat est renvoyĂ© Ă  l'utilisateur.
  • Le stockage temporaire est nettoyĂ©, les ressources sont libĂ©rĂ©es.

Dans cette architecture, nous ne payons que pour le traitement de la requĂȘte. Pas de requĂȘtes = pas de frais.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

C'est une approche fonctionnelle qui est mise en Ɠuvre non seulement dans Athena Serverless, mais aussi dans Redshift Spectrum (dans AWS).

L'exemple d'Athena montre que la base de donnĂ©es Serverless fonctionne sur de rĂ©elles requĂȘtes avec des dizaines et des centaines de tĂ©raoctets de donnĂ©es. Pour des centaines de tĂ©raoctets, il en faudrait des centaines de serveurs, mais nous n'avons pas besoin de payer pour eux — nous payons pour les requĂȘtes. La vitesse de chaque requĂȘte est (trĂšs) faible par rapport aux bases de donnĂ©es analytiques spĂ©cialisĂ©es comme Vertica, mais nous ne payons pas pour les pĂ©riodes d'inactivitĂ©.

Une telle base de donnĂ©es est applicable pour des requĂȘtes analytiques ad-hoc rares. Par exemple, lorsque nous dĂ©cidons spontanĂ©ment de tester une hypothĂšse sur un immense volume de donnĂ©es. Pour ces cas, Athena est parfaitement adaptĂ©e. Pour des requĂȘtes rĂ©guliĂšres, un tel systĂšme devient coĂ»teux. Dans ce cas, mettez en cache les donnĂ©es dans une solution spĂ©cialisĂ©e.

Serverless pour les solutions OLTP

Dans l'exemple précédent, nous avons examiné des tùches OLAP (analytiques). Maintenant, examinons des tùches OLTP.

Imaginons un PostgreSQL ou MySQL Ă©volutif. Élevons une instance PostgreSQL ou MySQL gĂ©rĂ©e classique avec des ressources minimales. Lorsque l'instance subira plus de charge, nous connecterons des rĂ©pliques supplĂ©mentaires pour rĂ©partir une partie de la charge de lecture. Si aucune requĂȘte n'est prĂ©sente, nous dĂ©sactiverons les rĂ©pliques. La premiĂšre instance est le maĂźtre, et les autres sont des rĂ©pliques.

Cette idĂ©e est mise en Ɠuvre dans une base nommĂ©e Aurora Serverless AWS. Le principe est simple : les requĂȘtes des applications externes sont acceptĂ©es par une flotte de proxy. En observant une augmentation de la charge, elle alloue des ressources de calcul Ă  partir d'instances minimales prĂ©chauffĂ©es — la connexion est effectuĂ©e le plus rapidement possible. La dĂ©sactivation des instances se fait de la mĂȘme maniĂšre.

Dans le cadre d'Aurora, il existe le concept d'Aurora Capacity Unit, ACU. Cela reprĂ©sente (conditionnellement) une instance (serveur). Chaque ACU spĂ©cifique peut ĂȘtre maĂźtre ou esclave. Chaque Capacity Unit dispose de sa propre mĂ©moire vive, de son processeur et d'un disque minimal. Par consĂ©quent, une instance est le maĂźtre, les autres sont des rĂ©pliques en lecture seule.

Le nombre d'Aurora Capacity Units fonctionnels est un paramĂštre configurable. Le nombre minimum peut ĂȘtre un ou zĂ©ro (dans ce cas, la base ne fonctionne pas s'il n'y a pas de requĂȘtes).

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Lorsque la base reçoit des requĂȘtes, la flotte de proxy Ă©lĂšve les Aurora Capacity Units, augmentant les ressources productives du systĂšme. La possibilitĂ© d'augmenter et de diminuer les ressources permet au systĂšme de « jongler » avec les ressources : dĂ©sactiver automatiquement des ACU (les remplaçant par de nouveaux) et appliquer toutes les mises Ă  jour pertinentes aux ressources dĂ©sactivĂ©es.

La base Aurora Serverless peut mettre à l'échelle la charge de lecture. Mais il n'est pas clairement mentionné dans la documentation. Il peut donner l'impression qu'ils peuvent élever un multi-maßtre. Mais il n'y a vraiment rien de magique.

Cette base est idĂ©ale pour Ă©viter de dĂ©penser d'Ă©normes sommes sur des systĂšmes Ă  accĂšs imprĂ©visible. Par exemple, lors de la crĂ©ation d'un MVP ou de sites web marketing, nous ne prĂ©voyons gĂ©nĂ©ralement pas une charge stable. En consĂ©quence, en l'absence d'accĂšs, nous ne payons pas pour les instances. Lorsque la charge survient soudainement, par exemple aprĂšs une confĂ©rence ou une campagne publicitaire, des foules de visiteurs accĂšdent au site et la charge augmente rapidement, Aurora Serverless gĂšre automatiquement cette charge et connecte rapidement les ressources manquantes (ACU). AprĂšs la confĂ©rence, tout le monde oublie le prototype, les serveurs (ACU) se mettent en veille et les coĂ»ts tombent Ă  zĂ©ro — pratique.

Cette solution n'est pas adaptĂ©e pour une haute charge stable, car elle ne sait pas gĂ©rer la montĂ©e en charge de l'Ă©criture. Toutes ces connexions et dĂ©connexions de ressources se produisent au moment appelĂ© « scale point » — le moment oĂč la base n'est pas maintenue par une transaction, ni par des tables temporaires. Par exemple, durant une semaine, il se peut qu'aucun scale point ne se produise, et la base fonctionne sur les mĂȘmes ressources sans pouvoir ni s'Ă©tendre, ni se rĂ©duire.

Il n'y a pas de magie — c'est du PostgreSQL ordinaire. Mais le processus d'ajout et de suppression de machines est partiellement automatisĂ©.

Serverless par conception

Aurora Serverless est une ancienne base réécrite pour le cloud, afin de tirer parti des avantages distincts du Serverless. Maintenant, parlons d'une base qui a Ă©tĂ© conçue dĂšs le dĂ©part pour le cloud, sous l'approche serverless — Serverless-by-design. Elle a Ă©tĂ© dĂ©veloppĂ©e sans aucune hypothĂšse sur son fonctionnement sur des serveurs physiques.

Cette base s'appelle Snowflake. Elle comprend trois blocs clés.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Le premier — c'est le bloc des mĂ©tadonnĂ©es. C'est un service rapide en mĂ©moire qui traite des questions de sĂ©curitĂ©, de mĂ©tadonnĂ©es, de transactions et d'optimisation des requĂȘtes (sur l'illustration Ă  gauche).

Le deuxiùme bloc — ce sont de nombreux clusters de calcul virtuels pour les calculs (sur l'illustration — un ensemble de cercles bleus).

Le troisiĂšme bloc — c'est le systĂšme de stockage de donnĂ©es basĂ© sur S3. S3 est un stockage d'objets infini sur AWS, quelque chose de semblable Ă  un Dropbox illimitĂ© pour les entreprises.

Voyons comment fonctionne Snowflake, en supposant un dĂ©marrage Ă  froid. C'est-Ă -dire que la base est prĂ©sente, les donnĂ©es sont chargĂ©es, mais il n'y a pas de requĂȘtes en cours. En consĂ©quence, s'il n'y a pas de requĂȘtes vers la base, nous avons un service de mĂ©tadonnĂ©es in-memory rapide (le premier bloc). Et nous avons un stockage S3, oĂč se trouvent les donnĂ©es des tables, divisĂ©es en ce que l'on appelle des micropartitions. Pour simplifier : si la table contient des transactions, les micropartitions reprĂ©sentent des jours de transactions. Chaque jour est une micropartition distincte, un fichier distinct. Et lorsque la base fonctionne dans ce mode, vous ne payez que pour l'espace occupĂ© par les donnĂ©es. De plus, le tarif pour l'espace est trĂšs bas (surtout compte tenu de la compression significative). Le service de mĂ©tadonnĂ©es fonctionne Ă©galement en permanence, mais pour optimiser les requĂȘtes, il n'est pas nĂ©cessaire de disposer de nombreuses ressources, et le service peut ĂȘtre considĂ©rĂ© comme conditionnellement gratuit.

Imaginons maintenant qu'un utilisateur essaie d'accĂ©der Ă  notre base et envoie une requĂȘte SQL. La requĂȘte SQL est immĂ©diatement traitĂ©e par le service de mĂ©tadonnĂ©es. En consĂ©quence, aprĂšs avoir reçu la requĂȘte, ce service analyse la requĂȘte, les donnĂ©es disponibles, les autorisations de l'utilisateur et, si tout va bien, Ă©labore un plan de traitement de la requĂȘte.

Par la suite, le service initie le dĂ©marrage d'un cluster de calcul. Un cluster de calcul est un ensemble de serveurs qui effectuent des calculs. Cela signifie que ce cluster peut contenir 1 serveur, 2 serveurs, 4, 8, 16, 32 — autant que vous le souhaitez. Vous soumettez une requĂȘte et le dĂ©marrage de ce cluster commence immĂ©diatement. Cela prend rĂ©ellement quelques secondes.

Sur le chemin des bases de donnĂ©es serverless — comment et pourquoi

Ensuite, une fois que le cluster est lancĂ©, les micro-partitions nĂ©cessaires pour traiter votre demande spĂ©cifique commencent Ă  ĂȘtre copiĂ©es Ă  partir de S3. Par exemple, considĂ©rons qu'il faut deux partitions d'une table et une d'une autre pour exĂ©cuter une requĂȘte SQL. Dans ce cas, seules les trois partitions nĂ©cessaires seront copiĂ©es dans le cluster, et non pas toutes les tables dans leur intĂ©gralitĂ©. C'est prĂ©cisĂ©ment pourquoi, et en raison du fait que tout se trouve dans le mĂȘme centre de donnĂ©es et est connectĂ© par des canaux trĂšs rapides, l'ensemble du processus de transfert se fait trĂšs rapidement : en quelques secondes, trĂšs rarement en quelques minutes, sauf en cas de requĂȘtes particuliĂšrement complexes. Ainsi, les micro-partitions sont copiĂ©es sur le cluster de calcul et, une fois ceci terminĂ©, la requĂȘte SQL est exĂ©cutĂ©e sur ce cluster. Le rĂ©sultat de cette requĂȘte peut ĂȘtre une ligne, plusieurs lignes ou une table — elles sont ensuite envoyĂ©es Ă  l'utilisateur pour qu'il puisse les tĂ©lĂ©charger, les afficher dans son outil BI ou les utiliser de quelque maniĂšre que ce soit.

Chaque requĂȘte SQL peut non seulement lire des agrĂ©gats Ă  partir des donnĂ©es dĂ©jĂ  chargĂ©es, mais Ă©galement charger/crĂ©er de nouvelles donnĂ©es dans la base. C'est-Ă -dire qu'il peut s'agir d'une requĂȘte qui, par exemple, insĂšre de nouveaux enregistrements dans une autre table, ce qui conduit Ă  l'apparition d'une nouvelle partition sur le cluster de calcul, qui, Ă  son tour, est automatiquement sauvegardĂ©e dans le stockage S3 unique.

Le scĂ©nario dĂ©crit ci-dessus, depuis l'arrivĂ©e de l'utilisateur jusqu'au dĂ©marrage du cluster, le chargement des donnĂ©es, l'exĂ©cution des requĂȘtes et la rĂ©ception des rĂ©sultats, est facturĂ© au tarif par minute d'utilisation du cluster de calcul virtuel dĂ©marrĂ©, le warehouse virtuel. Le tarif varie en fonction de la zone AWS et de la taille du cluster, mais en moyenne, cela coĂ»te plusieurs dollars par heure. Un cluster de quatre machines coĂ»te deux fois plus cher qu'un cluster de deux machines, et un cluster de huit machines coĂ»te encore deux fois plus cher. Des options sont disponibles avec 16, 32 machines, selon la complexitĂ© des requĂȘtes. Mais vous ne payez que pour les minutes oĂč le cluster est rĂ©ellement en fonction, car lorsque les requĂȘtes ne sont pas prĂ©sentes, vous pouvez « retirer vos mains », et aprĂšs 5 Ă  10 minutes d'attente (paramĂštre configurable), il s'Ă©teindra automatiquement, libĂ©rera les ressources et deviendra gratuit.

Il est tout Ă  fait rĂ©aliste de lancer une requĂȘte, un cluster se met en place, disons, en une minute, il calcule pendant une minute de plus, puis cinq minutes pour s'Ă©teindre, et vous payez au final pour sept minutes de fonctionnement de ce cluster, et non pour des mois ou des annĂ©es.

Le premier scénario décrivait l'utilisation de Snowflake dans un mode monopenreur. Imaginons maintenant qu'il y ait de nombreux utilisateurs, ce qui est plus proche du scénario réel.

Supposons que nous ayons de nombreux analystes et des rapports Tableau qui bombardent constamment notre base de donnĂ©es avec un grand volume de requĂȘtes SQL analytiques simples.

De plus, supposons que nous ayons des Data Scientists ingénieux qui tentent de réaliser des choses incroyables avec les données, en manipulant des dizaines de téraoctets et en analysant des milliards et des trillions de lignes de données.

Pour les deux types de charge décrits ci-dessus, Snowflake permet de déployer plusieurs clusters de calcul indépendants de différentes tailles. Ces clusters fonctionnent de maniÚre indépendante, mais avec des données cohérentes partagées.

Pour un grand nombre de requĂȘtes lĂ©gĂšres, vous pouvez dĂ©ployer 2 Ă  3 petits clusters, chacun occupant, disons, 2 machines. Ce comportement est rĂ©alisable, y compris grĂące Ă  des rĂ©glages automatiques. Vous pouvez dire : « Snowflake, dĂ©ploie un petit cluster. Si la charge dĂ©passe un certain seuil, dĂ©ploie un deuxiĂšme ou troisiĂšme similaire. Lorsque la charge commence Ă  diminuer, Ă©teins les superflus. » Ainsi, peu importe combien d'analystes se prĂ©sentent et commencent Ă  consulter les rapports, il y a toujours suffisamment de ressources.

De plus, si les analystes dorment et que personne ne consulte les rapports, les clusters peuvent ĂȘtre complĂštement Ă©teints, et vous ne payez plus pour eux.

En outre, pour les requĂȘtes lourdes (celles des Data Scientists), vous pouvez dĂ©ployer un trĂšs grand cluster de 32 machines, par exemple. Ce cluster sera Ă©galement facturĂ© uniquement pour les minutes et heures pendant lesquelles votre Ă©norme requĂȘte y est exĂ©cutĂ©e.

La capacité décrite ci-dessus permet de séparer les charges en clusters, non seulement pour 2, mais également pour davantage de types de charges (ETL, monitoring, matérialisation de rapports,
).

RĂ©sumons notre propos sur Snowflake. La base combine une belle idĂ©e avec une rĂ©alisation fonctionnelle. Chez ManyChat, nous utilisons Snowflake pour analyser toutes nos donnĂ©es. Nous avons non pas trois clusters comme dans l'exemple, mais entre 5 et 9, de tailles diffĂ©rentes. Nous disposons de clusters dits de 16 machines, de 2 machines et mĂȘme de trĂšs petits clusters de 1 machine pour certaines tĂąches. Ils rĂ©partissent la charge avec succĂšs et nous permettent d'Ă©conomiser considĂ©rablement.

La base gÚre avec succÚs la charge de lecture et d'écriture. C'est une grande différence et un énorme progrÚs par rapport à l'Aurora, qui ne supportait que la charge de lecture. Snowflake permet de scalabiliser cette charge d'écriture avec ces clusters de calcul. Ainsi, comme je l'ai mentionné, plusieurs clusters sont utilisés chez ManyChat, les petits et super petits clusters étant principalement destinés à l'ETL pour le chargement des données. Les analystes utilisent déjà des clusters de taille moyenne, qui ne sont absolument pas affectés par la charge ETL, ce qui leur permet de fonctionner trÚs rapidement.

Par consĂ©quent, la base est bien adaptĂ©e aux tĂąches OLAP. Malheureusement, elle n'est pas encore applicable aux charges OLTP. PremiĂšrement, cette base est colonne, avec toutes les consĂ©quences qui en dĂ©coulent. DeuxiĂšmement, le principe mĂȘme selon lequel vous levez un cluster de calcul pour chaque requĂȘte selon les besoins et versez des donnĂ©es dessus n'est malheureusement pas encore assez rapide pour les charges OLTP. Des secondes d'attente pour les tĂąches OLAP sont normales, mais inacceptables pour les charges OLTP, il vaudrait mieux avoir 100 ms, et encore mieux — 10 ms.

Conclusion

Une base de donnĂ©es sans serveur est possible grĂące Ă  la division de la base de donnĂ©es en parties Stateless et Stateful. Vous avez dĂ» remarquer que dans tous les exemples donnĂ©s, la partie Stateful est, pour le dire simplement, le stockage des micropartitions dans S3, tandis que la partie Stateless concerne l'optimiseur, le travail avec les mĂ©tadonnĂ©es, le traitement des questions de sĂ©curitĂ©, qui peuvent ĂȘtre activĂ©es en tant que services Stateless lĂ©gers et indĂ©pendants.

L'exĂ©cution des requĂȘtes SQL peut Ă©galement ĂȘtre perçue comme des services avec un Ă©tat lĂ©ger, qui peuvent surgir en mode sans serveur, comme les clusters de calcul Snowflake, tĂ©lĂ©charger uniquement les donnĂ©es nĂ©cessaires, exĂ©cuter la requĂȘte et "s'Ă©teindre".

Des bases de donnĂ©es serverless de niveau production sont dĂ©jĂ  disponibles et fonctionnent. Ces bases serverless sont prĂȘtes Ă  gĂ©rer des tĂąches OLAP. Malheureusement, pour les tĂąches OLTP, elles sont utilisĂ©es... avec des nuances, car il existe des limitations. D'un cĂŽtĂ©, c'est un inconvĂ©nient. Mais d'un autre cĂŽtĂ©, c'est une opportunitĂ©. Peut-ĂȘtre que certains lecteurs trouveront une façon de rendre une base de donnĂ©es OLTP complĂštement serverless, sans les limitations d'Aurora.

J'espĂšre que vous avez trouvĂ© cela intĂ©ressant. Vers un avenir serverless 🙂

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