{"id":91635,"date":"2020-08-15T19:42:23","date_gmt":"2020-08-15T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem"},"modified":"2020-08-15T19:42:23","modified_gmt":"2020-08-15T17:42:23","slug":"na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour \u00e0 tous ! Je m'appelle Nikolai Golov. Avant, je travaillais chez Avito et j'ai dirig\u00e9 pendant six ans la Data Platform, c'est-\u00e0-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 \u00e0 conna\u00eetre un grand nombre de bases de donn\u00e9es \u2014 des plus vari\u00e9es et atypiques, avec des cas d'utilisation non standards.<\/p>\n<p>Actuellement, je travaille chez ManyChat. C'est fondamentalement une startup \u2014 nouvelle, ambitieuse et en pleine croissance. Et quand je suis arriv\u00e9 dans l'entreprise, la question classique s'est pos\u00e9e : \u00ab Qu'est-ce qu'un jeune startup devrait prendre sur le march\u00e9 des SGBD et des bases de donn\u00e9es ? \u00bb. <\/p>\n<p>Dans cet article, qui est bas\u00e9 sur ma pr\u00e9sentation \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">le festival en ligne RIT++2020<\/a><\/noindex>, je r\u00e9pondrai \u00e0 cette question. La version vid\u00e9o de la pr\u00e9sentation est disponible sur <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/6a5df9b75ad435ebe88adf920ab9ea8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Les bases de donn\u00e9es bien connues de l'ann\u00e9e 2020<\/h2>\n<p>\nNous sommes en 2020, j'ai regard\u00e9 autour de moi et j'ai vu trois types de bases de donn\u00e9es. <\/p>\n<p>Le premier type \u2014 <b>bases OLTP classiques<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Elles ont \u00e9t\u00e9 \u00e9crites il y a longtemps, mais restent pertinentes, car bien connues de la communaut\u00e9 des d\u00e9veloppeurs.<\/p>\n<p>Le deuxi\u00e8me type \u2014 <b>bases des ann\u00e9es 2000<\/b>. Elles ont essay\u00e9 de s'\u00e9loigner des mod\u00e8les classiques en renon\u00e7ant au SQL, aux structures traditionnelles et \u00e0 l'ACID, gr\u00e2ce \u00e0 l'ajout de sharding int\u00e9gr\u00e9 et d'autres fonctionnalit\u00e9s 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\u00e9 leur niche, car elles se sont r\u00e9v\u00e9l\u00e9es extr\u00eamement pratiques pour certaines t\u00e2ches. Je les d\u00e9signerai par le terme g\u00e9n\u00e9rique NOSQL.<\/p>\n<p>Les ann\u00e9es 2000 sont termin\u00e9es, les bases NOSQL sont devenues famili\u00e8res, et le monde, selon moi, a fait un pas suivant \u2014 vers les <b>bases managed<\/b>. Ces bases ont un noyau similaire \u00e0 celui des bases OLTP classiques ou des nouvelles NoSQL. Mais elles n'ont pas besoin de DBA et DevOps et fonctionnent sur du mat\u00e9riel g\u00e9r\u00e9 dans le cloud. Pour le d\u00e9veloppeur, c'est \u00ab juste une base \u00bb, qui fonctionne quelque part, et comment elle est install\u00e9e sur le serveur, qui a configur\u00e9 le serveur et qui le met \u00e0 jour, \u00e7a ne d\u00e9range personne.<\/p>\n<p>Exemples de telles bases :<\/p>\n<ul>\n<li>AWS RDS \u2014 enveloppe g\u00e9r\u00e9e de PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB \u2014 \u00e9quivalent AWS des bases de donn\u00e9es de type document, similaire \u00e0 Redis et MongoDB.<\/li>\n<li>Amazon Redshift \u2014 base analytique g\u00e9r\u00e9e.<\/li>\n<\/ul>\n<p>\n\u00c0 la base, ce sont d'anciennes bases, mais mises sur un environnement g\u00e9r\u00e9, sans n\u00e9cessit\u00e9 de travailler avec le mat\u00e9riel. <\/p>\n<p><i>Remarque. Les exemples proviennent de l'environnement AWS, mais leurs \u00e9quivalents existent \u00e9galement dans Microsoft Azure, Google Cloud ou Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQu'est-ce qui est nouveau \u00e0 ce sujet ? En 2020, rien de tout cela.<\/p>\n<h2>Concept Serverless<\/h2>\n<p>\nUne v\u00e9ritable nouveaut\u00e9 sur le march\u00e9 en 2020 est le serverless ou les solutions sans serveur.<\/p>\n<p>J'essaierai d'expliquer ce que cela signifie en prenant l'exemple d'un service ordinaire ou d'une application backend.<br \/>\nPour d\u00e9ployer une application backend classique, nous achetons ou louons un serveur, copions notre code dessus, publions un endpoint \u00e0 l'ext\u00e9rieur et payons r\u00e9guli\u00e8rement pour la location, l'\u00e9lectricit\u00e9 et les services du data center. C'est le sch\u00e9ma standard.<\/p>\n<p>Y a-t-il une autre mani\u00e8re de proc\u00e9der ? Avec les services sans serveur, c'est possible.<\/p>\n<p>Quel est l'objectif de cette approche : pas de serveur, pas m\u00eame de location d'une instance virtuelle dans le cloud. Pour d\u00e9ployer le service, nous copions le code (les fonctions) dans un r\u00e9pertoire et publions un endpoint \u00e0 l'ext\u00e9rieur. Ensuite, nous payons simplement pour chaque appel de cette fonction, en ignorant compl\u00e8tement le mat\u00e9riel sur lequel elle s'ex\u00e9cute.<\/p>\n<p>J'essaierai d'illustrer cette approche avec des images.<br \/>\n<img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>D\u00e9ploiement classique<\/b>. Nous avons un service avec une charge sp\u00e9cifique. Nous faisons tourner deux instances : des serveurs physiques ou des instances dans AWS. Les requ\u00eates externes sont dirig\u00e9es vers ces instances, o\u00f9 elles sont trait\u00e9es. <\/p>\n<p>Comme on peut le voir sur l'image, les serveurs ne sont pas utilis\u00e9s de mani\u00e8re identique. Un est utilis\u00e9 \u00e0 100 %, avec deux requ\u00eates, tandis qu'un autre ne l'est qu'\u00e0 50 % \u2014 il est partiellement inactif. Si au lieu de trois requ\u00eates, il y en a 30, alors tout le syst\u00e8me ne pourra pas g\u00e9rer la charge et commencera \u00e0 ralentir.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>D\u00e9ploiement sans serveur<\/b>. 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\u00e9chauff\u00e9es \u2014 de petits conteneurs Docker pr\u00e9par\u00e9s avec le code de la fonction d\u00e9ploy\u00e9e. Le syst\u00e8me re\u00e7oit des requ\u00eates externes et pour chacune d'elles, le framework sans serveur lance un petit conteneur avec le code : il traite exactement cette requ\u00eate et d\u00e9truit le conteneur.<\/p>\n<p>Une requ\u00eate \u2014 un conteneur lanc\u00e9, 1000 requ\u00eates \u2014 1000 conteneurs. Et le d\u00e9ploiement sur des serveurs physiques \u2014 c'est d\u00e9j\u00e0 le travail du fournisseur de cloud. Il est compl\u00e8tement masqu\u00e9 par le framework sans serveur. Dans ce concept, nous payons pour chaque appel. Par exemple, si un appel arrive par jour \u2014 nous payons pour un appel, s'il y a un million par minute \u2014 nous payons pour un million. Ou par seconde, cela arrive aussi.<\/p>\n<p>Le concept de publication de fonction sans serveur convient aux services sans \u00e9tat. Si vous avez besoin d'un service avec \u00e9tat, il faut alors ajouter une base de donn\u00e9es au service. Dans ce cas, lorsqu'il s'agit de travailler avec l'\u00e9tat, chaque fonction avec \u00e9tat enregistre et lit simplement \u00e0 partir de la base de donn\u00e9es. De plus, il peut s'agir de l'un des trois types de bases de donn\u00e9es d\u00e9crits au d\u00e9but de l'article.<\/p>\n<p>Quelle est la limitation g\u00e9n\u00e9rale de toutes ces bases ? Ce sont les co\u00fbts d'un serveur cloud ou physique (ou plusieurs serveurs) toujours en fonctionnement. Peu importe si nous utilisons une base classique ou g\u00e9r\u00e9e, qu'il y ait un DevOps et un administrateur ou non, nous payons toujours 24 heures sur 24 pour le mat\u00e9riel, l'\u00e9lectricit\u00e9 et la location du centre de donn\u00e9es. Si nous avons une base classique, nous payons pour le serveur principal et l'esclave. Si nous avons une base shard\u00e9e \u00e0 forte charge, nous payons pour 10, 20 ou 30 serveurs, et cela de fa\u00e7on continue.<\/p>\n<p>La pr\u00e9sence de serveurs constamment r\u00e9serv\u00e9s dans la structure des co\u00fbts \u00e9tait autrefois per\u00e7ue comme un mal in\u00e9vitable. Les bases de donn\u00e9es classiques ont aussi d'autres d\u00e9fis, comme les limites sur le nombre de connexions, la r\u00e9duction de l'\u00e9volutivit\u00e9, le consensus g\u00e9o-distribu\u00e9 \u2014 certaines de ces choses peuvent \u00eatre r\u00e9solues dans des bases sp\u00e9cifiques, mais pas toutes en m\u00eame temps et pas parfaitement.<\/p>\n<h2>Base de donn\u00e9es sans serveur \u2014 th\u00e9orie<\/h2>\n<p>\nQuestion de 2020 : peut-on \u00e9galement rendre les bases de donn\u00e9es sans serveur ? Tout le monde a entendu parler des backends sans serveur\u2026 et si nous essayions \u00e9galement de rendre la base de donn\u00e9es sans serveur ?<\/p>\n<p>Cela peut sembler \u00e9trange, car la base de donn\u00e9es est un service avec \u00e9tat, peu adapt\u00e9 \u00e0 une infrastructure sans serveur. De plus, l'\u00e9tat de la base de donn\u00e9es est tr\u00e8s important : des gigaoctets, des t\u00e9raoctets, et m\u00eame des p\u00e9tas dans les bases de donn\u00e9es analytiques. Il n'est pas si simple de les faire fonctionner dans des conteneurs Docker l\u00e9gers.<\/p>\n<p>D'autre part, pratiquement toutes les bases de donn\u00e9es modernes contiennent une \u00e9norme quantit\u00e9 de logique et de composants : transactions, validation de l'int\u00e9grit\u00e9, proc\u00e9dures, d\u00e9pendances relationnelles et bien plus de logique. Une partie assez importante de la logique de la base de donn\u00e9es n\u00e9cessite un petit \u00e9tat. Les gigaoctets et t\u00e9raoctets sont directement utilis\u00e9s seulement par une petite partie de la logique de la base de donn\u00e9es li\u00e9e \u00e0 l'ex\u00e9cution imm\u00e9diate des requ\u00eates.<\/p>\n<p>Par cons\u00e9quent, l'id\u00e9e est la suivante : si une partie de la logique peut \u00eatre ex\u00e9cut\u00e9e sans \u00e9tat, pourquoi ne pas s\u00e9parer la base en parties avec \u00e9tat et sans \u00e9tat.<\/p>\n<h2>Sans serveur pour des solutions OLAP<\/h2>\n<p>\nVoyons comment la s\u00e9paration d'une base de donn\u00e9es en parties avec \u00e9tat et sans \u00e9tat peut se concr\u00e9tiser par des exemples pratiques.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Par exemple, nous avons une base de donn\u00e9es analytique<\/b>: donn\u00e9es externes (cylindre rouge \u00e0 gauche), processus ETL qui charge les donn\u00e9es dans la base, et un analyste qui envoie des requ\u00eates SQL \u00e0 la base. C'est le sch\u00e9ma classique de fonctionnement d'un entrep\u00f4t de donn\u00e9es. <\/p>\n<p>Dans ce sch\u00e9ma, l'ETL s'ex\u00e9cute, de mani\u00e8re conditionnelle, une fois. Par la suite, il faut toujours payer pour les serveurs sur lesquels fonctionne la base de donn\u00e9es aliment\u00e9e par l'ETL, afin d'avoir un support pour les requ\u00eates. <\/p>\n<p>Consid\u00e9rons une approche alternative, mise en \u0153uvre dans la base AWS Athena Serverless. Ici, il n'y a pas de mat\u00e9riel d\u00e9di\u00e9 en permanence o\u00f9 les donn\u00e9es charg\u00e9es sont stock\u00e9es. Au lieu de cela :<\/p>\n<ul>\n<li>L'utilisateur envoie une requ\u00eate SQL \u00e0 Athena. L'optimiseur Athena analyse la requ\u00eate SQL et recherche dans le stockage des m\u00e9tadonn\u00e9es (Metadata) les donn\u00e9es sp\u00e9cifiques n\u00e9cessaires \u00e0 l'ex\u00e9cution de la requ\u00eate.<\/li>\n<li>L'optimiseur, sur la base des donn\u00e9es collect\u00e9es, extrait les donn\u00e9es n\u00e9cessaires des sources externes vers un stockage temporaire (une base de donn\u00e9es temporaire).<\/li>\n<li>Dans le stockage temporaire, la requ\u00eate SQL de l'utilisateur est ex\u00e9cut\u00e9e, et le r\u00e9sultat est renvoy\u00e9 \u00e0 l'utilisateur. <\/li>\n<li>Le stockage temporaire est nettoy\u00e9, les ressources sont lib\u00e9r\u00e9es.<\/li>\n<\/ul>\n<p>Dans cette architecture, nous ne payons que pour le traitement de la requ\u00eate. Pas de requ\u00eates = pas de frais.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est une approche fonctionnelle qui est mise en \u0153uvre non seulement dans Athena Serverless, mais aussi dans Redshift Spectrum (dans AWS).<\/p>\n<p>L'exemple d'Athena montre que la base de donn\u00e9es Serverless fonctionne sur de r\u00e9elles requ\u00eates avec des dizaines et des centaines de t\u00e9raoctets de donn\u00e9es. Pour des centaines de t\u00e9raoctets, il en faudrait des centaines de serveurs, mais nous n'avons pas besoin de payer pour eux \u2014 nous payons pour les requ\u00eates. La vitesse de chaque requ\u00eate est (tr\u00e8s) faible par rapport aux bases de donn\u00e9es analytiques sp\u00e9cialis\u00e9es comme Vertica, mais nous ne payons pas pour les p\u00e9riodes d'inactivit\u00e9.<\/p>\n<p>Une telle base de donn\u00e9es est applicable pour des requ\u00eates analytiques ad-hoc rares. Par exemple, lorsque nous d\u00e9cidons spontan\u00e9ment de tester une hypoth\u00e8se sur un immense volume de donn\u00e9es. Pour ces cas, Athena est parfaitement adapt\u00e9e. Pour des requ\u00eates r\u00e9guli\u00e8res, un tel syst\u00e8me devient co\u00fbteux. Dans ce cas, mettez en cache les donn\u00e9es dans une solution sp\u00e9cialis\u00e9e. <\/p>\n<h2>Serverless pour les solutions OLTP<\/h2>\n<p>\nDans l'exemple pr\u00e9c\u00e9dent, nous avons examin\u00e9 des t\u00e2ches OLAP (analytiques). Maintenant, examinons des t\u00e2ches OLTP.<\/p>\n<p>Imaginons un PostgreSQL ou MySQL \u00e9volutif. \u00c9levons une instance PostgreSQL ou MySQL g\u00e9r\u00e9e classique avec des ressources minimales. Lorsque l'instance subira plus de charge, nous connecterons des r\u00e9pliques suppl\u00e9mentaires pour r\u00e9partir une partie de la charge de lecture. Si aucune requ\u00eate n'est pr\u00e9sente, nous d\u00e9sactiverons les r\u00e9pliques. La premi\u00e8re instance est le ma\u00eetre, et les autres sont des r\u00e9pliques.<\/p>\n<p>Cette id\u00e9e est mise en \u0153uvre dans une base nomm\u00e9e Aurora Serverless AWS. Le principe est simple : les requ\u00eates des applications externes sont accept\u00e9es par une flotte de proxy. En observant une augmentation de la charge, elle alloue des ressources de calcul \u00e0 partir d'instances minimales pr\u00e9chauff\u00e9es \u2014 la connexion est effectu\u00e9e le plus rapidement possible. La d\u00e9sactivation des instances se fait de la m\u00eame mani\u00e8re.<\/p>\n<p>Dans le cadre d'Aurora, il existe le concept d'Aurora Capacity Unit, ACU. Cela repr\u00e9sente (conditionnellement) une instance (serveur). Chaque ACU sp\u00e9cifique peut \u00eatre ma\u00eetre ou esclave. Chaque Capacity Unit dispose de sa propre m\u00e9moire vive, de son processeur et d'un disque minimal. Par cons\u00e9quent, une instance est le ma\u00eetre, les autres sont des r\u00e9pliques en lecture seule.<\/p>\n<p>Le nombre d'Aurora Capacity Units fonctionnels est un param\u00e8tre configurable. Le nombre minimum peut \u00eatre un ou z\u00e9ro (dans ce cas, la base ne fonctionne pas s'il n'y a pas de requ\u00eates).<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLorsque la base re\u00e7oit des requ\u00eates, la flotte de proxy \u00e9l\u00e8ve les Aurora Capacity Units, augmentant les ressources productives du syst\u00e8me. La possibilit\u00e9 d'augmenter et de diminuer les ressources permet au syst\u00e8me de \u00ab jongler \u00bb avec les ressources : d\u00e9sactiver automatiquement des ACU (les rempla\u00e7ant par de nouveaux) et appliquer toutes les mises \u00e0 jour pertinentes aux ressources d\u00e9sactiv\u00e9es.<\/p>\n<p>La base Aurora Serverless peut mettre \u00e0 l'\u00e9chelle la charge de lecture. Mais il n'est pas clairement mentionn\u00e9 dans la documentation. Il peut donner l'impression qu'ils peuvent \u00e9lever un multi-ma\u00eetre. Mais il n'y a vraiment rien de magique. <\/p>\n<p>Cette base est id\u00e9ale pour \u00e9viter de d\u00e9penser d'\u00e9normes sommes sur des syst\u00e8mes \u00e0 acc\u00e8s impr\u00e9visible. Par exemple, lors de la cr\u00e9ation d'un MVP ou de sites web marketing, nous ne pr\u00e9voyons g\u00e9n\u00e9ralement pas une charge stable. En cons\u00e9quence, en l'absence d'acc\u00e8s, nous ne payons pas pour les instances. Lorsque la charge survient soudainement, par exemple apr\u00e8s une conf\u00e9rence ou une campagne publicitaire, des foules de visiteurs acc\u00e8dent au site et la charge augmente rapidement, Aurora Serverless g\u00e8re automatiquement cette charge et connecte rapidement les ressources manquantes (ACU). Apr\u00e8s la conf\u00e9rence, tout le monde oublie le prototype, les serveurs (ACU) se mettent en veille et les co\u00fbts tombent \u00e0 z\u00e9ro \u2014 pratique.<\/p>\n<p>Cette solution n'est pas adapt\u00e9e pour une haute charge stable, car elle ne sait pas g\u00e9rer la mont\u00e9e en charge de l'\u00e9criture. Toutes ces connexions et d\u00e9connexions de ressources se produisent au moment appel\u00e9 \u00ab scale point \u00bb \u2014 le moment o\u00f9 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\u00eames ressources sans pouvoir ni s'\u00e9tendre, ni se r\u00e9duire. <\/p>\n<p>Il n'y a pas de magie \u2014 c'est du PostgreSQL ordinaire. Mais le processus d'ajout et de suppression de machines est partiellement automatis\u00e9.<\/p>\n<h2>Serverless par conception<\/h2>\n<p>\nAurora Serverless est une ancienne base r\u00e9\u00e9crite pour le cloud, afin de tirer parti des avantages distincts du Serverless. Maintenant, parlons d'une base qui a \u00e9t\u00e9 con\u00e7ue d\u00e8s le d\u00e9part pour le cloud, sous l'approche serverless \u2014 Serverless-by-design. Elle a \u00e9t\u00e9 d\u00e9velopp\u00e9e sans aucune hypoth\u00e8se sur son fonctionnement sur des serveurs physiques.<\/p>\n<p>Cette base s'appelle Snowflake. Elle comprend trois blocs cl\u00e9s.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe premier \u2014 c'est le bloc des m\u00e9tadonn\u00e9es. C'est un service rapide en m\u00e9moire qui traite des questions de s\u00e9curit\u00e9, de m\u00e9tadonn\u00e9es, de transactions et d'optimisation des requ\u00eates (sur l'illustration \u00e0 gauche).<\/p>\n<p>Le deuxi\u00e8me bloc \u2014 ce sont de nombreux clusters de calcul virtuels pour les calculs (sur l'illustration \u2014 un ensemble de cercles bleus).<\/p>\n<p>Le troisi\u00e8me bloc \u2014 c'est le syst\u00e8me de stockage de donn\u00e9es bas\u00e9 sur S3. S3 est un stockage d'objets infini sur AWS, quelque chose de semblable \u00e0 un Dropbox illimit\u00e9 pour les entreprises.<\/p>\n<p>Voyons comment fonctionne Snowflake, en supposant un d\u00e9marrage \u00e0 froid. C'est-\u00e0-dire que la base est pr\u00e9sente, les donn\u00e9es sont charg\u00e9es, mais il n'y a pas de requ\u00eates en cours. En cons\u00e9quence, s'il n'y a pas de requ\u00eates vers la base, nous avons un service de m\u00e9tadonn\u00e9es in-memory rapide (le premier bloc). Et nous avons un stockage S3, o\u00f9 se trouvent les donn\u00e9es des tables, divis\u00e9es en ce que l'on appelle des micropartitions. Pour simplifier : si la table contient des transactions, les micropartitions repr\u00e9sentent 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\u00e9 par les donn\u00e9es. De plus, le tarif pour l'espace est tr\u00e8s bas (surtout compte tenu de la compression significative). Le service de m\u00e9tadonn\u00e9es fonctionne \u00e9galement en permanence, mais pour optimiser les requ\u00eates, il n'est pas n\u00e9cessaire de disposer de nombreuses ressources, et le service peut \u00eatre consid\u00e9r\u00e9 comme conditionnellement gratuit. <\/p>\n<p>Imaginons maintenant qu'un utilisateur essaie d'acc\u00e9der \u00e0 notre base et envoie une requ\u00eate SQL. La requ\u00eate SQL est imm\u00e9diatement trait\u00e9e par le service de m\u00e9tadonn\u00e9es. En cons\u00e9quence, apr\u00e8s avoir re\u00e7u la requ\u00eate, ce service analyse la requ\u00eate, les donn\u00e9es disponibles, les autorisations de l'utilisateur et, si tout va bien, \u00e9labore un plan de traitement de la requ\u00eate.<\/p>\n<p>Par la suite, le service initie le d\u00e9marrage 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 \u2014 autant que vous le souhaitez. Vous soumettez une requ\u00eate et le d\u00e9marrage de ce cluster commence imm\u00e9diatement. Cela prend r\u00e9ellement quelques secondes.<\/p>\n<p><img decoding=\"async\" alt=\"Sur le chemin des bases de donn\u00e9es serverless \u2014 comment et pourquoi\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnsuite, une fois que le cluster est lanc\u00e9, les micro-partitions n\u00e9cessaires pour traiter votre demande sp\u00e9cifique commencent \u00e0 \u00eatre copi\u00e9es \u00e0 partir de S3. Par exemple, consid\u00e9rons qu'il faut deux partitions d'une table et une d'une autre pour ex\u00e9cuter une requ\u00eate SQL. Dans ce cas, seules les trois partitions n\u00e9cessaires seront copi\u00e9es dans le cluster, et non pas toutes les tables dans leur int\u00e9gralit\u00e9. C'est pr\u00e9cis\u00e9ment pourquoi, et en raison du fait que tout se trouve dans le m\u00eame centre de donn\u00e9es et est connect\u00e9 par des canaux tr\u00e8s rapides, l'ensemble du processus de transfert se fait tr\u00e8s rapidement : en quelques secondes, tr\u00e8s rarement en quelques minutes, sauf en cas de requ\u00eates particuli\u00e8rement complexes. Ainsi, les micro-partitions sont copi\u00e9es sur le cluster de calcul et, une fois ceci termin\u00e9, la requ\u00eate SQL est ex\u00e9cut\u00e9e sur ce cluster. Le r\u00e9sultat de cette requ\u00eate peut \u00eatre une ligne, plusieurs lignes ou une table \u2014 elles sont ensuite envoy\u00e9es \u00e0 l'utilisateur pour qu'il puisse les t\u00e9l\u00e9charger, les afficher dans son outil BI ou les utiliser de quelque mani\u00e8re que ce soit.<\/p>\n<p>Chaque requ\u00eate SQL peut non seulement lire des agr\u00e9gats \u00e0 partir des donn\u00e9es d\u00e9j\u00e0 charg\u00e9es, mais \u00e9galement charger\/cr\u00e9er de nouvelles donn\u00e9es dans la base. C'est-\u00e0-dire qu'il peut s'agir d'une requ\u00eate qui, par exemple, ins\u00e8re de nouveaux enregistrements dans une autre table, ce qui conduit \u00e0 l'apparition d'une nouvelle partition sur le cluster de calcul, qui, \u00e0 son tour, est automatiquement sauvegard\u00e9e dans le stockage S3 unique.<\/p>\n<p>Le sc\u00e9nario d\u00e9crit ci-dessus, depuis l'arriv\u00e9e de l'utilisateur jusqu'au d\u00e9marrage du cluster, le chargement des donn\u00e9es, l'ex\u00e9cution des requ\u00eates et la r\u00e9ception des r\u00e9sultats, est factur\u00e9 au tarif par minute d'utilisation du cluster de calcul virtuel d\u00e9marr\u00e9, le warehouse virtuel. Le tarif varie en fonction de la zone AWS et de la taille du cluster, mais en moyenne, cela co\u00fbte plusieurs dollars par heure. Un cluster de quatre machines co\u00fbte deux fois plus cher qu'un cluster de deux machines, et un cluster de huit machines co\u00fbte encore deux fois plus cher. Des options sont disponibles avec 16, 32 machines, selon la complexit\u00e9 des requ\u00eates. Mais vous ne payez que pour les minutes o\u00f9 le cluster est r\u00e9ellement en fonction, car lorsque les requ\u00eates ne sont pas pr\u00e9sentes, vous pouvez \u00ab retirer vos mains \u00bb, et apr\u00e8s 5 \u00e0 10 minutes d'attente (param\u00e8tre configurable), il s'\u00e9teindra automatiquement, lib\u00e9rera les ressources et deviendra gratuit.<\/p>\n<p>Il est tout \u00e0 fait r\u00e9aliste de lancer une requ\u00eate, un cluster se met en place, disons, en une minute, il calcule pendant une minute de plus, puis cinq minutes pour s'\u00e9teindre, et vous payez au final pour sept minutes de fonctionnement de ce cluster, et non pour des mois ou des ann\u00e9es.<\/p>\n<p>Le premier sc\u00e9nario d\u00e9crivait l'utilisation de Snowflake dans un mode monopenreur. Imaginons maintenant qu'il y ait de nombreux utilisateurs, ce qui est plus proche du sc\u00e9nario r\u00e9el.<\/p>\n<p>Supposons que nous ayons de nombreux analystes et des rapports Tableau qui bombardent constamment notre base de donn\u00e9es avec un grand volume de requ\u00eates SQL analytiques simples.<\/p>\n<p>De plus, supposons que nous ayons des Data Scientists ing\u00e9nieux qui tentent de r\u00e9aliser des choses incroyables avec les donn\u00e9es, en manipulant des dizaines de t\u00e9raoctets et en analysant des milliards et des trillions de lignes de donn\u00e9es. <\/p>\n<p>Pour les deux types de charge d\u00e9crits ci-dessus, Snowflake permet de d\u00e9ployer plusieurs clusters de calcul ind\u00e9pendants de diff\u00e9rentes tailles. Ces clusters fonctionnent de mani\u00e8re ind\u00e9pendante, mais avec des donn\u00e9es coh\u00e9rentes partag\u00e9es.<\/p>\n<p>Pour un grand nombre de requ\u00eates l\u00e9g\u00e8res, vous pouvez d\u00e9ployer 2 \u00e0 3 petits clusters, chacun occupant, disons, 2 machines. Ce comportement est r\u00e9alisable, y compris gr\u00e2ce \u00e0 des r\u00e9glages automatiques. Vous pouvez dire : \u00ab Snowflake, d\u00e9ploie un petit cluster. Si la charge d\u00e9passe un certain seuil, d\u00e9ploie un deuxi\u00e8me ou troisi\u00e8me similaire. Lorsque la charge commence \u00e0 diminuer, \u00e9teins les superflus. \u00bb Ainsi, peu importe combien d'analystes se pr\u00e9sentent et commencent \u00e0 consulter les rapports, il y a toujours suffisamment de ressources.<\/p>\n<p>De plus, si les analystes dorment et que personne ne consulte les rapports, les clusters peuvent \u00eatre compl\u00e8tement \u00e9teints, et vous ne payez plus pour eux.<\/p>\n<p>En outre, pour les requ\u00eates lourdes (celles des Data Scientists), vous pouvez d\u00e9ployer un tr\u00e8s grand cluster de 32 machines, par exemple. Ce cluster sera \u00e9galement factur\u00e9 uniquement pour les minutes et heures pendant lesquelles votre \u00e9norme requ\u00eate y est ex\u00e9cut\u00e9e.<\/p>\n<p>La capacit\u00e9 d\u00e9crite ci-dessus permet de s\u00e9parer les charges en clusters, non seulement pour 2, mais \u00e9galement pour davantage de types de charges (ETL, monitoring, mat\u00e9rialisation de rapports,\u2026).<\/p>\n<p>R\u00e9sumons notre propos sur Snowflake. La base combine une belle id\u00e9e avec une r\u00e9alisation fonctionnelle. Chez ManyChat, nous utilisons Snowflake pour analyser toutes nos donn\u00e9es. Nous avons non pas trois clusters comme dans l'exemple, mais entre 5 et 9, de tailles diff\u00e9rentes. Nous disposons de clusters dits de 16 machines, de 2 machines et m\u00eame de tr\u00e8s petits clusters de 1 machine pour certaines t\u00e2ches. Ils r\u00e9partissent la charge avec succ\u00e8s et nous permettent d'\u00e9conomiser consid\u00e9rablement.<\/p>\n<p>La base g\u00e8re avec succ\u00e8s la charge de lecture et d'\u00e9criture. C'est une grande diff\u00e9rence et un \u00e9norme progr\u00e8s par rapport \u00e0 l'Aurora, qui ne supportait que la charge de lecture. Snowflake permet de scalabiliser cette charge d'\u00e9criture avec ces clusters de calcul. Ainsi, comme je l'ai mentionn\u00e9, plusieurs clusters sont utilis\u00e9s chez ManyChat, les petits et super petits clusters \u00e9tant principalement destin\u00e9s \u00e0 l'ETL pour le chargement des donn\u00e9es. Les analystes utilisent d\u00e9j\u00e0 des clusters de taille moyenne, qui ne sont absolument pas affect\u00e9s par la charge ETL, ce qui leur permet de fonctionner tr\u00e8s rapidement. <\/p>\n<p>Par cons\u00e9quent, la base est bien adapt\u00e9e aux t\u00e2ches OLAP. Malheureusement, elle n'est pas encore applicable aux charges OLTP. Premi\u00e8rement, cette base est colonne, avec toutes les cons\u00e9quences qui en d\u00e9coulent. Deuxi\u00e8mement, le principe m\u00eame selon lequel vous levez un cluster de calcul pour chaque requ\u00eate selon les besoins et versez des donn\u00e9es dessus n'est malheureusement pas encore assez rapide pour les charges OLTP. Des secondes d'attente pour les t\u00e2ches OLAP sont normales, mais inacceptables pour les charges OLTP, il vaudrait mieux avoir 100 ms, et encore mieux \u2014 10 ms.<\/p>\n<h2>Conclusion<\/h2>\n<p>\nUne base de donn\u00e9es sans serveur est possible gr\u00e2ce \u00e0 la division de la base de donn\u00e9es en parties Stateless et Stateful. Vous avez d\u00fb remarquer que dans tous les exemples donn\u00e9s, 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\u00e9tadonn\u00e9es, le traitement des questions de s\u00e9curit\u00e9, qui peuvent \u00eatre activ\u00e9es en tant que services Stateless l\u00e9gers et ind\u00e9pendants.<\/p>\n<p>L'ex\u00e9cution des requ\u00eates SQL peut \u00e9galement \u00eatre per\u00e7ue comme des services avec un \u00e9tat l\u00e9ger, qui peuvent surgir en mode sans serveur, comme les clusters de calcul Snowflake, t\u00e9l\u00e9charger uniquement les donn\u00e9es n\u00e9cessaires, ex\u00e9cuter la requ\u00eate et \"s'\u00e9teindre\".<\/p>\n<p>Des bases de donn\u00e9es serverless de niveau production sont d\u00e9j\u00e0 disponibles et fonctionnent. Ces bases serverless sont pr\u00eates \u00e0 g\u00e9rer des t\u00e2ches OLAP. Malheureusement, pour les t\u00e2ches OLTP, elles sont utilis\u00e9es... avec des nuances, car il existe des limitations. D'un c\u00f4t\u00e9, c'est un inconv\u00e9nient. Mais d'un autre c\u00f4t\u00e9, c'est une opportunit\u00e9. Peut-\u00eatre que certains lecteurs trouveront une fa\u00e7on de rendre une base de donn\u00e9es OLTP compl\u00e8tement serverless, sans les limitations d'Aurora.<\/p>\n<p>J'esp\u00e8re que vous avez trouv\u00e9 cela int\u00e9ressant. Vers un avenir serverless \ud83d\ude42<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/514298\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0410\u0432\u0438\u0442\u043e \u0438 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u043b Data Platform, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438: \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (Vertica, ClickHouse), \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0438 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91635","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sur la voie des bases de donn\u00e9es sans serveur \u2014 comment et pourquoi | ProHoster","description":"Bonjour \u00e0 tous ! Je m'appelle Nikolai Golov.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-15T17:42:23+00:00","article:modified_time":"2020-08-15T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91635","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:23:25","updated":"2022-09-27 17:18:10","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}