{"id":54366,"date":"2019-12-24T00:00:00","date_gmt":"2019-12-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster"},"modified":"2020-02-18T14:02:22","modified_gmt":"2020-02-18T11:02:22","slug":"kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Bonjour, utilisateurs de Habr. Les cours de la premi\u00e8re groupe commencent aujourd'hui. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. \u00c0 ce sujet, nous souhaitons vous parler de la mani\u00e8re dont s'est d\u00e9roul\u00e9 le webinaire ouvert sur ce cours.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">le prochain cours ouvert<\/a><\/noindex> nous avons discut\u00e9 des d\u00e9fis auxquels les bases de donn\u00e9es SQL sont confront\u00e9es \u00e0 l'\u00e8re des clouds et de Kubernetes. Nous avons \u00e9galement examin\u00e9 comment les bases de donn\u00e9es SQL s'adaptent et \u00e9voluent face \u00e0 ces d\u00e9fis.<\/p>\n<p>Le webinaire a \u00e9t\u00e9 dirig\u00e9 par <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valery Bezrukov<\/a><\/noindex>, Google Cloud Practice Delivery Manager chez EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Quand les arbres \u00e9taient petits\u2026<\/h3>\n<p>\nPour commencer, rappelons-nous comment le choix des SGBD a commenc\u00e9 \u00e0 la fin du XXe si\u00e8cle. Cela ne devrait pas \u00eatre difficile, car le choix des SGBD \u00e0 cette \u00e9poque commen\u00e7ait et se terminait par <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c0 la fin des ann\u00e9es 90 et au d\u00e9but des ann\u00e9es 2000, il n'y avait essentiellement pas de choix, pour ce qui est des bases de donn\u00e9es \u00e9volutives industrielles. Oui, il y avait IBM DB2, Sybase et quelques autres bases de donn\u00e9es qui apparaissaient et disparaissaient, mais dans l'ensemble, elles \u00e9taient moins remarquables face \u00e0 Oracle. Par cons\u00e9quent, les comp\u00e9tences des ing\u00e9nieurs de cette \u00e9poque \u00e9taient in\u00e9vitablement li\u00e9es \u00e0 ce seul choix qui existait.<\/p>\n<p>Un DBA Oracle devait savoir :<\/p>\n<ul>\n<li> installer Oracle Server \u00e0 partir d'un distributeur ;<\/li>\n<li> configurer Oracle Server :<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora ;<\/li>\n<li>listener.ora ;<\/li>\n<\/ul>\n<p>\n\u2014 cr\u00e9er :<\/p>\n<ul>\n<li>espace de tables ;<\/li>\n<li>sch\u00e9mas ;<\/li>\n<li>utilisateurs ;<\/li>\n<\/ul>\n<p>\u2014 effectuer des sauvegardes et des restaurations ;<br \/>\n\u2014 effectuer un suivi ;<br \/>\n\u2014 lutter contre les requ\u00eates non optimales.<\/p>\n<p>Cependant, on n'attendait pas particuli\u00e8rement d'un DBA Oracle :<\/p>\n<ul>\n<li>d'\u00eatre capable de choisir le SGBD optimal ou une autre technologie de stockage et de traitement des donn\u00e9es ;<\/li>\n<li>de garantir une haute disponibilit\u00e9 et une \u00e9volutivit\u00e9 horizontale (ce n'\u00e9tait pas toujours une question pour le DBA) ;<\/li>\n<li>de bien conna\u00eetre le domaine, l'infrastructure, l'architecture applicative, le syst\u00e8me d'exploitation ;<\/li>\n<li>d'effectuer le chargement et le d\u00e9chargement des donn\u00e9es, la migration des donn\u00e9es entre diff\u00e9rents SGBD.<\/li>\n<\/ul>\n<p>En gros, si l'on parle des choix de cette \u00e9poque, cela rappele le choix dans un magasin sovi\u00e9tique \u00e0 la fin des ann\u00e9es 80 :<\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Notre \u00e9poque<\/h3>\n<p>\nDepuis, en effet, les arbres ont grandi, le monde a chang\u00e9 et cela a \u00e9volu\u00e9 comme suit :<\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe march\u00e9 des SGBD a \u00e9galement chang\u00e9, ce qui est bien visible dans le dernier rapport de Gartner :<\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt il est impossible de ne pas noter que les clouds ont trouv\u00e9 leur niche, dont la popularit\u00e9 augmente. Si l'on lit le m\u00eame rapport de Gartner, on y voit les conclusions suivantes :<\/p>\n<ol>\n<li>Beaucoup de clients sont en train de migrer leurs applications vers le cloud. <\/li>\n<li>Les nouvelles technologies apparaissent d'abord dans le cloud, et il n'est pas certain qu'elles passent un jour \u00e0 une infrastructure non cloud.<\/li>\n<li>Le mod\u00e8le de tarification au principe du pay-as-you-go est devenu habituel. Tout le monde souhaite ne payer que pour ce qu'il utilise, et ce n'est m\u00eame plus une tendance, mais simplement un constat. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Et maintenant ?<\/h3>\n<p>\nAujourd'hui, nous sommes tous dans le cloud. Les questions qui se posent sont des questions de choix. Et ce choix est \u00e9norme, m\u00eame si l'on parle uniquement des technologies de SGBD en mode On-premises. De plus, nous avons des services g\u00e9r\u00e9s et du SaaS. Ainsi, le choix ne fait que devenir plus complexe chaque ann\u00e9e.<\/p>\n<p>En parall\u00e8le des questions de choix, il existe aussi des <b>facteurs limitants<\/b>:<\/p>\n<ul>\n<li><b>le prix<\/b>. De nombreuses technologies co\u00fbtent encore de l'argent ;<\/li>\n<li><b>les comp\u00e9tences<\/b>. Si nous parlons de logiciels libres, la question des comp\u00e9tences se pose, car les logiciels gratuits demandent aux personnes qui les d\u00e9ploient et les exploitent une comp\u00e9tence suffisante ;<\/li>\n<li><b>les fonctionnalit\u00e9s<\/b>. Tous les services disponibles dans le cloud, m\u00eame construits sur la base de Postgres, ne poss\u00e8dent pas les m\u00eames fonctionnalit\u00e9s que Postgres On-premises. C'est un facteur essentiel \u00e0 conna\u00eetre et \u00e0 comprendre. De plus, ce facteur rev\u00eat une importance croissante par rapport \u00e0 la connaissance de certaines fonctionnalit\u00e9s cach\u00e9es d'un SGBD donn\u00e9. <\/li>\n<\/ul>\n<p>\n<b>Ce que l'on attend actuellement des DA\/DE :<\/b><\/p>\n<ul>\n<li>une bonne compr\u00e9hension du domaine d'activit\u00e9 et de l'architecture applicative ;<\/li>\n<li>la capacit\u00e9 \u00e0 choisir correctement la technologie de SGBD en fonction de la t\u00e2che assign\u00e9e ;<\/li>\n<li>la capacit\u00e9 \u00e0 s\u00e9lectionner la m\u00e9thode d'impl\u00e9mentation optimale de la technologie choisie dans le contexte des contraintes existantes ;<\/li>\n<li>la capacit\u00e9 \u00e0 effectuer des transferts et des migrations de donn\u00e9es ;<\/li>\n<li>la capacit\u00e9 \u00e0 r\u00e9aliser et exploiter les solutions choisies.<\/li>\n<\/ul>\n<p>\nL'exemple ci-dessous <b>bas\u00e9 sur GCP<\/b> d\u00e9montre comment le choix d'une technologie de traitement des donn\u00e9es est influenc\u00e9 par leur structure :<\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNotez que dans le sch\u00e9ma, PostgreSQL est absent, car il est cach\u00e9 derri\u00e8re la terminologie <b>Cloud SQL<\/b>. Et lorsque nous acc\u00e9dons \u00e0 Cloud SQL, nous devons \u00e0 nouveau faire un choix :<\/p>\n<p><img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl convient de noter que ce choix n'est pas toujours clair, c'est pourquoi les d\u00e9veloppeurs d'application se basent souvent sur leur intuition. <\/p>\n<p><b>Total :<\/b><\/p>\n<ol>\n<li>Plus on avance, plus la question du choix devient pertinente. Et m\u00eame en se concentrant uniquement sur GCP, les services g\u00e9r\u00e9s et le SaaS, on ne mentionne les SGBD relationnels qu'\u00e0 la quatri\u00e8me \u00e9tape (et l\u00e0, Spanner est \u00e0 c\u00f4t\u00e9). De plus, le choix de PostgreSQL n'appara\u00eet qu'\u00e0 la cinqui\u00e8me \u00e9tape, avec MySQL et SQL Server juste \u00e0 c\u00f4t\u00e9, ce qui signifie <b>qu'il y a beaucoup d'options, mais il faut faire un choix<\/b>. <\/li>\n<li>Il ne faut pas oublier les limitations face aux tentations. En g\u00e9n\u00e9ral, tout le monde veut Spanner, mais il est co\u00fbteux. Au final, une demande typique ressemble \u00e0 ceci : <i>\u00ab Faites-nous, s'il vous pla\u00eet, un Spanner mais au prix de Cloud SQL, vous \u00eates des professionnels apr\u00e8s tout ! \u00bb<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Et que faire alors ?<\/h3>\n<p>\nSans pr\u00e9tendre avoir la v\u00e9rit\u00e9 absolue, disons ceci :<\/p>\n<p><b>Il faut changer d'approche en mati\u00e8re de formation :<\/b><\/p>\n<ul>\n<li>former comme on formait auparavant les DBA n'a pas de sens ;<\/li>\n<li>la connaissance d'un seul produit est d\u00e9sormais insuffisante ;<\/li>\n<li>et conna\u00eetre des dizaines de produits au niveau d'un seul est impossible.<\/li>\n<\/ul>\n<p>\nIl faut savoir non seulement quel produit, mais aussi :<\/p>\n<ul>\n<li>les cas d'utilisation de son application ;<\/li>\n<li>les diff\u00e9rentes m\u00e9thodes de d\u00e9ploiement ;<\/li>\n<li>les avantages et les inconv\u00e9nients de chaque m\u00e9thode ;<\/li>\n<li>des produits similaires et alternatifs, afin de faire un choix \u00e9clair\u00e9 et optimal et pas toujours en faveur d'un produit familier.<\/li>\n<\/ul>\n<p>\nEt il faut \u00e9galement savoir migrer les donn\u00e9es et comprendre les principes de base de l'int\u00e9gration avec l'ETL.<\/p>\n<h3>Un cas r\u00e9el<\/h3>\n<p>\nDans un pass\u00e9 r\u00e9cent, j'ai d\u00fb cr\u00e9er le backend d'une application mobile. Au moment o\u00f9 j'ai commenc\u00e9 \u00e0 travailler dessus, le backend \u00e9tait d\u00e9j\u00e0 d\u00e9velopp\u00e9 et pr\u00eat \u00e0 \u00eatre int\u00e9gr\u00e9, et l'\u00e9quipe de d\u00e9veloppeurs avait pass\u00e9 environ deux ans sur ce projet. Les t\u00e2ches suivantes avaient \u00e9t\u00e9 d\u00e9finies :<\/p>\n<ul>\n<li>mettre en place un CI\/CD ;<\/li>\n<li>r\u00e9aliser une revue de l'architecture ;<\/li>\n<li>mettre tout cela en production. <\/li>\n<\/ul>\n<p>\nL'application elle-m\u00eame \u00e9tait microservices, et le code en Python\/Django avait \u00e9t\u00e9 d\u00e9velopp\u00e9 de z\u00e9ro et directement dans GCP. En ce qui concerne le public cible, on supposait qu'il y aurait deux r\u00e9gions - les \u00c9tats-Unis et l'UE, et le trafic \u00e9tait r\u00e9parti via un \u00e9quilibreur de charge global. Tous les Workloads et la charge de calcul fonctionnaient dans Google Kubernetes Engine. <\/p>\n<p>Concernant les donn\u00e9es, il y avait trois structures :<\/p>\n<ul>\n<li>Cloud Storage ;<\/li>\n<li>Datastore ;<\/li>\n<li>Cloud SQL (PostgreSQL).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Comment survivre \u00e0 une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOn peut se demander pourquoi Cloud SQL a \u00e9t\u00e9 choisi ? Pour \u00eatre honn\u00eate, une telle question cr\u00e9e une sorte de malaise ces derni\u00e8res ann\u00e9es - on a l'impression que les gens commencent \u00e0 avoir honte des bases de donn\u00e9es relationnelles, mais n\u00e9anmoins, elles continuent d'\u00eatre activement utilis\u00e9es ;-). <\/p>\n<p>Pour notre cas, Cloud SQL a \u00e9t\u00e9 choisi pour les raisons suivantes :<\/p>\n<ol>\n<li>Comme mentionn\u00e9, l'application a \u00e9t\u00e9 d\u00e9velopp\u00e9e avec Django, et elle dispose d'un mod\u00e8le qui affiche des donn\u00e9es persistantes depuis une base de donn\u00e9es SQL sous forme d'objets Python (Django ORM).<\/li>\n<li>Le framework prend en charge une liste finale assez limit\u00e9e de SGBD :<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>PostgreSQL ;<\/li>\n<li>MariaDB ;<\/li>\n<li>MySQL ;<\/li>\n<li>Oracle ;<\/li>\n<li>SQLite.<\/li>\n<\/ul>\n<p>\nPar cons\u00e9quent, PostgreSQL a \u00e9t\u00e9 choisi intuitivement parmi cette liste (apr\u00e8s tout, il n'\u00e9tait pas question de choisir Oracle).<\/p>\n<p><b>Ce qui manquait :<\/b><\/p>\n<ul>\n<li>l'application n'\u00e9tait d\u00e9ploy\u00e9e que dans 2 r\u00e9gions, et un 3\u00e8me (Asie) \u00e9tait pr\u00e9vu ;<\/li>\n<li>la base de donn\u00e9es se trouvait en r\u00e9gion nord-am\u00e9ricaine (Iowa) ;<\/li>\n<li>le client avait des inqui\u00e9tudes concernant d'\u00e9ventuels <b>retards d'acc\u00e8s<\/b> en provenance d'Europe et d'Asie et <b>des interruptions <\/b><b>de service<\/b> en cas de temps d'arr\u00eat de la SGBD. <\/li>\n<\/ul>\n<p>\nBien que Django puisse travailler avec plusieurs bases de donn\u00e9es en parall\u00e8le et les s\u00e9parer par lecture et \u00e9criture, le nombre d'\u00e9critures dans l'application n'\u00e9tait pas si \u00e9lev\u00e9 (plus de 90 % \u00e9tant des lectures). En g\u00e9n\u00e9ral, s'il \u00e9tait possible de cr\u00e9er <b>une r\u00e9plication de lecture de la base principale en Europe et en Asie,<\/b>ce serait une solution de compromis. Et qu'est-ce qui est si compliqu\u00e9 ?<\/p>\n<p>La difficult\u00e9 r\u00e9sidait dans le fait que le client ne voulait pas renoncer \u00e0 l'utilisation des services g\u00e9r\u00e9s et de Cloud SQL. Les capacit\u00e9s de Cloud SQL sont actuellement limit\u00e9es. Cloud SQL prend en charge la haute disponibilit\u00e9 (HA) et la r\u00e9plication de lecture (RR), mais la RR n'est prise en charge que dans une seule r\u00e9gion. En cr\u00e9ant une base de donn\u00e9es dans la r\u00e9gion am\u00e9ricaine, il n'est pas possible de faire une r\u00e9plication de lecture dans la r\u00e9gion europ\u00e9enne avec les outils de Cloud SQL, bien que PostgreSQL le permette. La correspondance avec les employ\u00e9s de Google n'a abouti \u00e0 rien et s'est termin\u00e9e par des promesses du type \u00ab nous connaissons le probl\u00e8me et travaillons dessus, la question sera r\u00e9solue un jour \u00bb. <\/p>\n<p>Pour \u00e9num\u00e9rer les capacit\u00e9s de Cloud SQL en bullet points, cela ressemblerait approximativement \u00e0 :<\/p>\n<p><b>1. Haute disponibilit\u00e9 (HA) :<\/b><\/p>\n<ul>\n<li>dans une seule r\u00e9gion ;<\/li>\n<li>via la r\u00e9plication des disques ;<\/li>\n<li>les m\u00e9canismes de PostgreSQL ne sont pas utilis\u00e9s ;<\/li>\n<li>gestion automatique et manuelle possible \u2014 basculement\/retour ;<\/li>\n<li>lors du basculement, la SGBD est inaccessible pendant plusieurs minutes.<\/li>\n<\/ul>\n<p>\n<b>2. R\u00e9plication de lecture (RR) :<\/b><\/p>\n<ul>\n<li>dans une seule r\u00e9gion ;<\/li>\n<li>hot standby ;<\/li>\n<li>r\u00e9plication en continu de PostgreSQL.<\/li>\n<\/ul>\n<p>\nDe plus, comme c'est souvent le cas, lors du choix d'une technologie, on se heurte \u00e0 certaines <b>limitations<\/b>:<\/p>\n<ul>\n<li>le client ne voulait pas cr\u00e9er de nouvelles entit\u00e9s et utiliser l'IaaS, sauf par le biais de GKE ;<\/li>\n<li>le client ne souhaitait pas d\u00e9ployer PostgreSQL\/MySQL en libre-service ;<\/li>\n<li>En fait, Google Spanner conviendrait parfaitement, si ce n'\u00e9tait son prix. Cependant, il ne peut pas \u00eatre utilis\u00e9 avec Django ORM, mais c'est tout de m\u00eame un bon outil.<\/li>\n<\/ul>\n<p>\nCompte tenu de la situation, le client a pos\u00e9 une question originale : <i>\u00ab Pouvez-vous faire quelque chose de similaire, qui fonctionne comme Google Spanner, mais qui fonctionne aussi avec Django ORM ? \u00bb<\/i><\/p>\n<h3>Option de solution n\u00b0 0<\/h3>\n<p>\nLa premi\u00e8re pens\u00e9e qui m'est venue :<\/p>\n<ul>\n<li>rester dans le cadre de CloudSQL ;<\/li>\n<li>il n'y aura pas de r\u00e9plication int\u00e9gr\u00e9e entre les r\u00e9gions, sous aucune forme ;<\/li>\n<li>essayer d'ajouter une r\u00e9plique \u00e0 l'existant Cloud SQL bas\u00e9 sur PostgreSQL ;<\/li>\n<li>installer quelque part une instance PostgreSQL, mais ne pas toucher au minimum \u00e0 la master.<\/li>\n<\/ul>\n<p>\nMalheureusement, il s'est av\u00e9r\u00e9 que cela n'\u00e9tait pas possible car il n'y a pas d'acc\u00e8s au serveur (il se trouve dans un autre projet) - pg_hba et ainsi de suite, et en plus, il n'y a pas d'acc\u00e8s en tant que superutilisateur.<\/p>\n<h3>Option de solution n\u00b0 1<\/h3>\n<p>\nApr\u00e8s d'autres r\u00e9flexions et en tenant compte des circonstances pr\u00e9c\u00e9dentes, le raisonnement a quelque peu chang\u00e9 :<\/p>\n<ul>\n<li>nous essayons toujours de rester dans le cadre de CloudSQL, mais nous passons \u00e0 MySQL, car Cloud SQL bas\u00e9 sur MySQL a un master externe, qui :<\/li>\n<\/ul>\n<p>\n\u2014 sert de proxy pour un MySQL externe ;<br \/>\n\u2014 ressemble \u00e0 une instance de MySQL ;<br \/>\n\u2014 a \u00e9t\u00e9 con\u00e7u pour la migration de donn\u00e9es depuis d'autres clouds ou sur site.<\/p>\n<p>Comme la configuration de la r\u00e9plication MySQL ne n\u00e9cessite pas d'acc\u00e8s au serveur, cela a g\u00e9n\u00e9ralement fonctionn\u00e9, mais tr\u00e8s de mani\u00e8re instable et peu pratique. Et lorsque nous avons progress\u00e9, cela est devenu effrayant, car nous d\u00e9ployions toute la structure avec terraform, et s'est av\u00e9r\u00e9 que le master externe n'\u00e9tait pas support\u00e9 par terraform. Oui, Google a un CLI, mais curieusement, cela fonctionnait parfois \u2014 parfois il se cr\u00e9ait, parfois non. Peut-\u00eatre parce que le CLI a \u00e9t\u00e9 con\u00e7u pour la migration de donn\u00e9es depuis l'ext\u00e9rieur et non pour les r\u00e9pliques.<\/p>\n<p>Il est donc devenu clair que Cloud SQL ne convient pas du tout. Comme on dit, nous avons fait tout ce que nous pouvions. <\/p>\n<h3>Option de solution n\u00b0 2<\/h3>\n<p>\nPuisque nous n'avons pas pu rester dans le cadre de Cloud SQL, nous avons essay\u00e9 de formuler les exigences pour une solution de compromis. Les exigences \u00e9taient les suivantes :<\/p>\n<ul>\n<li>travail dans Kubernetes, utilisation maximale des ressources et des possibilit\u00e9s de Kubernetes (DCS, &#8230;) et GCP (LB, &#8230;);<\/li>\n<li>absence de ballast avec une multitude de choses inutiles dans le cloud comme HA proxy ;<\/li>\n<li>possibilit\u00e9 de lancer HA PostgreSQL ou MySQL dans la r\u00e9gion principale ; dans les autres r\u00e9gions - HA des RR de la r\u00e9gion principale plus sa copie (pour la fiabilit\u00e9) ;<\/li>\n<li>multi master (bien que nous ne voulions pas trop nous y attacher, ce n'\u00e9tait pas tr\u00e8s essentiel)<\/li>\n<\/ul>\n<p>. <br \/>\nEn r\u00e9sultat de ces exigences, enfin, une apparition de p<b>options de SGBD appropri\u00e9s et de liaison<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>outils PostgreSQL<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nLa technologie MySQL Galera a \u00e9t\u00e9 d\u00e9velopp\u00e9e par Codership et constitue un plugin pour InnoDB. Caract\u00e9ristiques :<\/p>\n<ul>\n<li>multi ma\u00eetre;<\/li>\n<li>r\u00e9plication synchrone;<\/li>\n<li>lecture depuis n'importe quel n\u0153ud;<\/li>\n<li>\u00e9criture sur n'importe quel n\u0153ud;<\/li>\n<li>m\u00e9canisme HA int\u00e9gr\u00e9;<\/li>\n<li>il existe un chart Helm de Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nDe la description, c'est un projet absolument incroyable et repr\u00e9sente un projet open source, \u00e9crit en Go. Le participant principal est Cockroach Labs (fond\u00e9 par des anciens de Google). Ce SGBD relationnel a \u00e9t\u00e9 con\u00e7u d\u00e8s le d\u00e9part pour \u00eatre distribu\u00e9 (avec un scaling horizontal \u2018out-of-the-box\u2019) et tol\u00e9rant aux pannes. Ses auteurs ont affirm\u00e9 vouloir \u00ab combiner la richesse des fonctionnalit\u00e9s SQL avec la disponibilit\u00e9 horizontale, typique des solutions NoSQL \u00bb.<\/p>\n<p>Comme avantage agr\u00e9able \u2014 support du protocole de connexion PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nC'est une surcouche \u00e0 PostgreSQL, en r\u00e9alit\u00e9, une nouvelle entit\u00e9, prenant en charge toutes les connexions et les traitant. Dispose de son propre load balancer et parser, licenci\u00e9 sous la licence BSD. Offre de larges possibilit\u00e9s, mais para\u00eet un peu effrayant, car la pr\u00e9sence d'une nouvelle entit\u00e9 pouvait devenir une source de complications suppl\u00e9mentaires. <\/p>\n<h3>Patroni<\/h3>\n<p>\nC'est le dernier sur quoi j'ai jet\u00e9 mon d\u00e9volu, et il s'av\u00e8re que ce n'\u00e9tait pas en vain. Patroni est un utilitaire open source qui est, en r\u00e9alit\u00e9, un daemon en Python, permettant de g\u00e9rer automatiquement des clusters PostgreSQL avec diff\u00e9rents types de r\u00e9plication et un basculement automatique des r\u00f4les. \u00c7a s'est r\u00e9v\u00e9l\u00e9 tr\u00e8s int\u00e9ressant, car \u00e7a s'int\u00e8gre bien avec Kubernetes et n'implique pas de nouvelles entit\u00e9s. <\/p>\n<h3>Donc, que soumettons-nous ?<\/h3>\n<p>\nLe choix n'a pas \u00e9t\u00e9 facile :<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 g\u00e9nial, mais risqu\u00e9;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 pas mal non plus, utilis\u00e9 dans de nombreux endroits, mais MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 beaucoup d'entit\u00e9s superflues, int\u00e9gration m\u00e9diocre avec le cloud et K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 excellente int\u00e9gration avec K8s, pas d'entit\u00e9s superflues, bien int\u00e9gr\u00e9 avec GCP LB.<\/li>\n<\/ol>\n<p>\nAinsi, le choix s'est port\u00e9 sur Patroni. <\/p>\n<h3>Conclusions<\/h3>\n<p>\nIl est temps de faire un bref r\u00e9sum\u00e9. Oui, le monde des infrastructures IT a consid\u00e9rablement chang\u00e9, et ce n'est que le d\u00e9but. Et si auparavant, les clouds n'\u00e9taient qu'un autre type d'infrastructure, maintenant c'est tout diff\u00e9rent. De plus, les innovations dans les clouds apparaissent constamment, et resteront, et peut-\u00eatre qu'elles n'appara\u00eetront que dans les clouds et seront ensuite, par la force des startups, transf\u00e9r\u00e9es en On-premises.<\/p>\n<p>En ce qui concerne SQL, SQL est l\u00e0 pour rester. Cela signifie qu'il est n\u00e9cessaire de conna\u00eetre et de savoir travailler avec PostgreSQL et MySQL, mais il est encore plus important de savoir les appliquer correctement.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/481644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c SQL-\u0431\u0430\u0437\u044b \u0432 \u044d\u0440\u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0438 Kubernetes. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQL \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54366","post","type-post","status-publish","format-standard","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\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\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\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\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\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=\"2019-12-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:22+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\udd47Comment faire survivre une base de donn\u00e9es SQL au XXIe si\u00e8cle : clouds, Kubernetes et PostgreSQL multimaster | ProHoster","description":"Bonjour, membres de Habr. Aujourd'hui, les cours de la premi\u00e8re groupe du cours \u00ab PostgreSQL \u00bb commencent.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","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\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","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":"2019-12-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54366","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":"2026-01-24 11:06:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:30:12","updated":"2026-01-24 11:06:21","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\/54366","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=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}