{"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\/es\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hola, habitantes de Habr. Hoy comienzan las clases en el primer grupo del curso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. En este sentido, queremos hablarles sobre c\u00f3mo fue el seminario web abierto sobre este curso.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">en la pr\u00f3xima clase abierta<\/a><\/noindex> hablamos sobre los desaf\u00edos que enfrentan las bases de datos SQL en la era de las nubes y Kubernetes. Adem\u00e1s, examinamos c\u00f3mo las bases de datos SQL se adaptan y mutan bajo la influencia de estos desaf\u00edos.<\/p>\n<p>El seminario web fue conducido por <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valery Bezrukov<\/a><\/noindex>, Gerente de Entrega de Pr\u00e1ctica en Google Cloud en EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Cuando los \u00e1rboles eran peque\u00f1os\u2026<\/h3>\n<p>\nPara empezar, recordemos c\u00f3mo comenz\u00f3 la elecci\u00f3n del SGBD a finales del siglo pasado. Sin embargo, esto no ser\u00e1 dif\u00edcil, ya que la elecci\u00f3n del SGBD en esos d\u00edas comenzaba y terminaba <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA finales de los 90 y principios de los 2000, realmente no hab\u00eda muchas opciones si hablamos de bases de datos escalables industriales. S\u00ed, exist\u00edan IBM DB2, Sybase y algunas otras bases de datos que aparec\u00edan y desaparec\u00edan, pero en general no eran tan notables en comparaci\u00f3n con Oracle. Por lo tanto, las habilidades de los ingenieros de esos tiempos estaban, de una manera u otra, ligadas a esa \u00fanica opci\u00f3n que exist\u00eda.<\/p>\n<p>Un DBA de Oracle deb\u00eda saber:<\/p>\n<ul>\n<li> instalar Oracle Server desde el paquete de distribuci\u00f3n;<\/li>\n<li> configurar 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 crear:<\/p>\n<ul>\n<li>espacios de tabla;<\/li>\n<li>esquemas;<\/li>\n<li>usuarios;<\/li>\n<\/ul>\n<p>\u2014 realizar copias de seguridad y recuperaci\u00f3n;<br \/>\n\u2014 llevar a cabo la monitorizaci\u00f3n;<br \/>\n\u2014 combatir las consultas no \u00f3ptimas.<\/p>\n<p>Sin embargo, no se exig\u00eda mucho de un DBA de Oracle:<\/p>\n<ul>\n<li>saber elegir el SGBD \u00f3ptimo u otra tecnolog\u00eda de almacenamiento y procesamiento de datos;<\/li>\n<li>garantizar la alta disponibilidad y escalabilidad horizontal (esto no siempre era una cuesti\u00f3n del DBA);<\/li>\n<li>tener un buen conocimiento del \u00e1rea tem\u00e1tica, infraestructura, arquitectura de aplicaciones, sistemas operativos;<\/li>\n<li>realizar carga y descarga de datos, migraci\u00f3n de datos entre diferentes SGBD.<\/li>\n<\/ul>\n<p>En resumen, si hablamos de la elecci\u00f3n en esos tiempos, se asemeja a la elecci\u00f3n en una tienda sovi\u00e9tica a finales de los 80:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Nuestro tiempo<\/h3>\n<p>\nDesde entonces, por supuesto, los \u00e1rboles han crecido, el mundo ha cambiado, y ahora es algo as\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTambi\u00e9n ha cambiado el mercado de los SGBD, como se puede ver en el reciente informe de la empresa Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY aqu\u00ed no se puede dejar de notar que su nicho ha sido ocupado por las nubes, cuya popularidad est\u00e1 en aumento. Si leemos el mismo informe de la empresa Gartner, veremos las siguientes conclusiones:<\/p>\n<ol>\n<li>Muchos clientes est\u00e1n en el proceso de migrar aplicaciones a la nube. <\/li>\n<li>Las nuevas tecnolog\u00edas primero aparecen en la nube y no est\u00e1 garantizado que alguna vez se trasladen a una infraestructura no nube.<\/li>\n<li>Se ha vuelto habitual el modelo de fijaci\u00f3n de precios seg\u00fan el principio de pago por uso. Todos quieren pagar solo por lo que utilizan, y ya no es una tendencia, sino una simple constataci\u00f3n de la realidad. <\/li>\n<\/ol>\n<p><\/p>\n<h3>\u00bfQu\u00e9 pasa ahora?<\/h3>\n<p>\nHoy todos estamos en la nube. Las preguntas que surgen son cuestiones de elecci\u00f3n. Y hay una gran variedad, incluso si solo hablamos de la elecci\u00f3n de tecnolog\u00edas de bases de datos en formato On-premises. Tambi\u00e9n tenemos servicios gestionados y SaaS. As\u00ed que, la elecci\u00f3n se complica con cada a\u00f1o que pasa.<\/p>\n<p>Junto a las cuestiones de elecci\u00f3n, tambi\u00e9n hay <b>factores restrictivos<\/b>:<\/p>\n<ul>\n<li><b>precio<\/b>. Muchas tecnolog\u00edas siguen costando dinero;<\/li>\n<li><b>habilidades<\/b>. Si hablamos de software libre, surge la cuesti\u00f3n de las habilidades, ya que el software gratuito requiere de competencias suficientes de las personas que lo implementan y operan;<\/li>\n<li><b>funcionalidad<\/b>. No todos los servicios disponibles en la nube, incluso aquellos construidos sobre la misma base de Postgres, poseen las mismas caracter\u00edsticas que Postgres On-premises. Este es un factor importante que hay que conocer y entender. A\u00fan m\u00e1s, este factor adquiere una importancia mayor que conocer alguna caracter\u00edstica oculta de una base de datos espec\u00edfica. <\/li>\n<\/ul>\n<p>\n<b>\u00bfQu\u00e9 se espera actualmente de DA\/DE:<\/b><\/p>\n<ul>\n<li>buena comprensi\u00f3n del dominio y arquitectura aplicada;<\/li>\n<li>capacidad para elegir correctamente la tecnolog\u00eda de base de datos adecuada seg\u00fan la tarea establecida;<\/li>\n<li>capacidad para seleccionar el m\u00e9todo \u00f3ptimo de implementaci\u00f3n de la tecnolog\u00eda elegida considerando las restricciones existentes;<\/li>\n<li>capacidad para realizar la transferencia y migraci\u00f3n de datos;<\/li>\n<li>capacidad para implementar y operar soluciones elegidas.<\/li>\n<\/ul>\n<p>\nEl siguiente ejemplo <b>basado en GCP<\/b> demuestra c\u00f3mo se lleva a cabo la elecci\u00f3n de una tecnolog\u00eda para trabajar con datos seg\u00fan su estructura:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTenga en cuenta que PostgreSQL no aparece en el esquema, porque se oculta bajo la terminolog\u00eda de <b>Cloud SQL<\/b>. Y cuando llegamos a Cloud SQL, debemos hacer otra elecci\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCabe se\u00f1alar que esta elecci\u00f3n no siempre es clara, por lo que los desarrolladores de aplicaciones a menudo se gu\u00edan por la intuici\u00f3n. <\/p>\n<p><b>Total:<\/b><\/p>\n<ol>\n<li>Cuanto m\u00e1s lejos, m\u00e1s relevante se vuelve la cuesti\u00f3n de la elecci\u00f3n. Y aunque solo se mire a GCP, servicios administrados y SaaS, alguna menci\u00f3n de RDBMS aparece solo en el cuarto paso (y all\u00ed est\u00e1 Spanner al lado). Adem\u00e1s, la elecci\u00f3n de PostgreSQL solo aparece en el quinto paso, y all\u00ed est\u00e1n MySQL y SQL Server, es decir, <b>hay muchas opciones, pero hay que elegir<\/b>. <\/li>\n<li>No se puede olvidar las limitaciones frente a las tentaciones. En general, todos quieren Spanner, pero es caro. En definitiva, una consulta t\u00edpica se ve m\u00e1s o menos as\u00ed: <i>\u00abPor favor, h\u00e1ganos Spanner, pero al precio de Cloud SQL, \u00a1ustedes son profesionales!\u00bb<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00bfY qu\u00e9 hacer?<\/h3>\n<p>\nSin pretender tener la verdad absoluta, digamos lo siguiente:<\/p>\n<p><b>Es necesario cambiar el enfoque del aprendizaje:<\/b><\/p>\n<ul>\n<li>no tiene sentido ense\u00f1ar como se ense\u00f1aba antes a los DBA;<\/li>\n<li>conocer un solo producto ahora ya no es suficiente;<\/li>\n<li>y conocer decenas al nivel de uno es imposible.<\/li>\n<\/ul>\n<p>\nEs necesario conocer no solo el producto, sino tambi\u00e9n:<\/p>\n<ul>\n<li>el caso de uso de su aplicaci\u00f3n;<\/li>\n<li>los diferentes m\u00e9todos de despliegue;<\/li>\n<li>las ventajas y desventajas de cada m\u00e9todo;<\/li>\n<li>productos similares y alternativos, para hacer una elecci\u00f3n consciente y \u00f3ptima y no siempre a favor del producto conocido.<\/li>\n<\/ul>\n<p>\nAdem\u00e1s, es necesario saber migrar datos y comprender los principios b\u00e1sicos de integraci\u00f3n con ETL.<\/p>\n<h3>Caso real<\/h3>\n<p>\nRecientemente, se tuvo que desarrollar un backend para una aplicaci\u00f3n m\u00f3vil. En el momento en que se comenz\u00f3 a trabajar en \u00e9l, el backend ya estaba desarrollado y listo para la implementaci\u00f3n, y el equipo de desarrolladores hab\u00eda dedicado alrededor de dos a\u00f1os a este proyecto. Se establecieron las siguientes tareas:<\/p>\n<ul>\n<li>construir CI\/CD;<\/li>\n<li>realizar revisi\u00f3n de la arquitectura;<\/li>\n<li>poner todo esto en producci\u00f3n. <\/li>\n<\/ul>\n<p>\nLa aplicaci\u00f3n en s\u00ed era microservicios, y el c\u00f3digo en Python\/Django fue desarrollado desde cero y directamente en GCP. En cuanto al p\u00fablico objetivo, se supuso que habr\u00eda dos regiones: EE. UU. y UE, y el tr\u00e1fico se distribu\u00eda a trav\u00e9s del balanceador de carga global. Todas las cargas de trabajo y la carga computacional funcionaban en Google Kubernetes Engine. <\/p>\n<p>En cuanto a los datos, hab\u00eda 3 estructuras:<\/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=\"C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPuede surgir la pregunta de por qu\u00e9 se eligi\u00f3 Cloud SQL. A decir verdad, tal pregunta en los \u00faltimos a\u00f1os provoca una especie de pausa inc\u00f3moda: da la sensaci\u00f3n de que la gente ha comenzado a sentirse avergonzada de las bases de datos relacionales, \u00a1pero aun as\u00ed contin\u00faan us\u00e1ndolas activamente! ;-). <\/p>\n<p>En cuanto a nuestro caso, se eligi\u00f3 Cloud SQL por las siguientes razones:<\/p>\n<ol>\n<li>Como se mencion\u00f3, la aplicaci\u00f3n fue desarrollada con Django, y contiene un modelo que muestra datos persistentes de una base de datos SQL en objetos de Python (Django ORM).<\/li>\n<li>El propio framework soportaba una lista bastante limitada de sistemas de gesti\u00f3n de bases de datos:<\/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>\nPor lo tanto, elegimos PostgreSQL de esta lista m\u00e1s por intuici\u00f3n (no se iba a elegir Oracle, la verdad).<\/p>\n<p><b>Lo que faltaba:<\/b><\/p>\n<ul>\n<li>la aplicaci\u00f3n estaba desplegada solo en 2 regiones, y estaba en planes a\u00f1adir una tercera (Asia);<\/li>\n<li>la base de datos estaba ubicada en la regi\u00f3n norteamericana (Iowa);<\/li>\n<li>hab\u00eda preocupaciones por parte del cliente sobre posibles <b>retrazos en el acceso<\/b> desde Europa y Asia y <b>interrupciones <\/b><b>en el servicio<\/b> en caso de un tiempo de inactividad de la base de datos. <\/li>\n<\/ul>\n<p>\nAunque Django puede trabajar con varias bases de datos de manera paralela y dividirlas entre lectura y escritura, no hab\u00eda tantas grabaciones en la aplicaci\u00f3n (m\u00e1s del 90 % eran lecturas). En general, si se pudiera hacer <b>una r\u00e9plica de lectura de la base de datos principal en Europa y Asia,<\/b>ser\u00eda una soluci\u00f3n comprometida. Pero, \u00bfqu\u00e9 tiene de complicado?<\/p>\n<p>La complejidad radicaba en que el cliente no quer\u00eda renunciar al uso de servicios gestionados y Cloud SQL. Las capacidades de Cloud SQL en este momento son limitadas. Cloud SQL soporta alta disponibilidad (HA) y r\u00e9plica de lectura (RR), pero la misma RR se soporta solo en una regi\u00f3n. Al crear la base de datos en la regi\u00f3n americana, no es posible hacer una r\u00e9plica de lectura en la regi\u00f3n europea utilizando las herramientas de Cloud SQL, aunque PostgreSQL no lo impida. La correspondencia con empleados de Google no llev\u00f3 a nada y termin\u00f3 en promesas del tipo \"sabemos del problema y estamos trabajando en ello, alg\u00fan d\u00eda se resolver\u00e1\". <\/p>\n<p>Si enumeramos las capacidades de Cloud SQL de forma resumida, se ver\u00eda algo as\u00ed:<\/p>\n<p><b>1. Alta disponibilidad (HA):<\/b><\/p>\n<ul>\n<li>dentro de una regi\u00f3n;<\/li>\n<li>mediante replicaci\u00f3n de discos;<\/li>\n<li>no se utilizan mecanismos de PostgreSQL;<\/li>\n<li>posible gesti\u00f3n autom\u00e1tica y manual \u2014 failover\/failback;<\/li>\n<li>durante el cambio, la base de datos no est\u00e1 disponible durante unos minutos.<\/li>\n<\/ul>\n<p>\n<b>2. R\u00e9plica de lectura (RR):<\/b><\/p>\n<ul>\n<li>dentro de una regi\u00f3n;<\/li>\n<li>hot standby;<\/li>\n<li>replicaci\u00f3n en streaming de PostgreSQL.<\/li>\n<\/ul>\n<p>\nAdem\u00e1s, como es habitual, al elegir una tecnolog\u00eda siempre te enfrentas a alguna <b>limitaci\u00f3n.<\/b>:<\/p>\n<ul>\n<li>el cliente no quer\u00eda crear entidades y usar IaaS, salvo a trav\u00e9s de GKE;<\/li>\n<li>el cliente no querr\u00eda desplegar PostgreSQL\/MySQL de autoservicio;<\/li>\n<li>De hecho, Google Spanner ser\u00eda bastante adecuado, si no fuera por su precio, aunque con \u00e9l Django ORM no puede trabajar, pero es una buena herramienta.<\/li>\n<\/ul>\n<p>\nDada la situaci\u00f3n, el cliente plante\u00f3 una pregunta complicada: <i>\u00ab\u00bfPueden hacer algo similar, que funcione como Google Spanner, pero que tambi\u00e9n sea compatible con Django ORM?\u00bb<\/i><\/p>\n<h3>Opci\u00f3n de soluci\u00f3n n\u00ba 0<\/h3>\n<p>\nLo primero que se me ocurri\u00f3 fue:<\/p>\n<ul>\n<li>permanecer en el marco de CloudSQL;<\/li>\n<li>no habr\u00e1 replicaci\u00f3n integrada entre regiones de ninguna manera;<\/li>\n<li>intentar conectar una r\u00e9plica a la instancia existente de Cloud SQL by PostgreSQL;<\/li>\n<li>en alg\u00fan lugar y de alguna manera lanzar una instancia de PostgreSQL, pero al menos no tocar el master.<\/li>\n<\/ul>\n<p>\nLamentablemente, result\u00f3 que no se pod\u00eda hacer, ya que no hay acceso al host (est\u00e1 en otro proyecto) \u2014 pg_hba y dem\u00e1s, y adem\u00e1s no hay acceso como superusuario.<\/p>\n<h3>Opci\u00f3n de soluci\u00f3n n\u00ba 1<\/h3>\n<p>\nDespu\u00e9s de m\u00e1s reflexiones y teniendo en cuenta las circunstancias anteriores, la l\u00ednea de pensamiento cambi\u00f3 un poco:<\/p>\n<ul>\n<li>a\u00fan intentamos permanecer en el marco de CloudSQL, pero cambiamos a MySQL, ya que Cloud SQL by MySQL tiene un master externo, que:<\/li>\n<\/ul>\n<p>\n\u2014 es un proxy para MySQL externo;<br \/>\n\u2014 se presenta como una instancia de MySQL;<br \/>\n\u2014 fue dise\u00f1ado para migrar datos de otras nubes o On-premises.<\/p>\n<p>Dado que la configuraci\u00f3n de replicaci\u00f3n de MySQL no requiere acceso al host, en principio todo funcionaba, pero era muy inestable y poco pr\u00e1ctico. Y al avanzar, se volvi\u00f3 a\u00fan m\u00e1s aterrador, ya que est\u00e1bamos desplegando toda la estructura con terraform, y de repente result\u00f3 que el master externo no era compatible con terraform. S\u00ed, Google tiene CLI, pero por alguna raz\u00f3n aqu\u00ed tambi\u00e9n todo funcionaba de manera intermitente \u2014 a veces se creaba, a veces no. Tal vez porque CLI fue dise\u00f1ado para migrar datos externamente y no para r\u00e9plicas.<\/p>\n<p>En realidad, en este punto qued\u00f3 claro que Cloud SQL no es adecuado en absoluto. Como se suele decir, hicimos todo lo que pudimos. <\/p>\n<h3>Opci\u00f3n de soluci\u00f3n n\u00ba 2<\/h3>\n<p>\nComo no pudimos permanecer en el marco de Cloud SQL, intentamos formular los requisitos para una soluci\u00f3n de compromiso. Los requisitos resultaron ser los siguientes:<\/p>\n<ul>\n<li>trabajo en Kubernetes, m\u00e1ximo aprovechamiento de recursos y capacidades de Kubernetes (DCS, &#8230;) y GCP (LB, &#8230;);<\/li>\n<li>ausencia de lastre de un mont\u00f3n de cosas innecesarias en la nube como HA proxy;<\/li>\n<li>posibilidad de ejecutar HA PostgreSQL o MySQL en la regi\u00f3n principal; en las otras regiones \u2014 HA del RR de la regi\u00f3n principal m\u00e1s su copia (para fiabilidad);<\/li>\n<li>multi master (no quer\u00eda conectarme a \u00e9l, pero no era muy cr\u00edtico)<\/li>\n<\/ul>\n<p>. <br \/>\nComo resultado de estos requisitos, por fin apareci\u00f3 un horizonte p<b>opciones adecuadas de SGBD y enlace<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>herramientas de PostgreSQL<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nLa tecnolog\u00eda MySQL Galera fue desarrollada por Codership y es un plugin para InnoDB. Caracter\u00edsticas:<\/p>\n<ul>\n<li>multi maestro;<\/li>\n<li>replicaci\u00f3n sincronizada;<\/li>\n<li>lectura desde cualquier nodo;<\/li>\n<li>escritura en cualquier nodo;<\/li>\n<li>mecanismo de HA integrado;<\/li>\n<li>existe un Helm chart de Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nDe acuerdo con la descripci\u00f3n, es una herramienta absolutamente impresionante y se presenta como un proyecto de c\u00f3digo abierto, escrito en Go. El principal participante es Cockroach Labs (fundada por ex-empleados de Google). Este SGBD relacional fue creado para ser distribuido (con escalabilidad horizontal 'de f\u00e1brica') y tolerante a fallos. Sus autores han establecido como objetivo 'combinar la riqueza de la funcionalidad SQL con la disponibilidad horizontal, habitual en soluciones NoSQL'.<\/p>\n<p>Como un agradable bono, admite el protocolo de conexi\u00f3n de PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nEs una capa sobre PostgreSQL, de hecho, una nueva entidad que acepta todas las conexiones y las gestiona. Tiene su propio balanceador de carga y parser, y est\u00e1 licenciada bajo la licencia BSD. Ofrece amplias posibilidades, pero puede parecer algo intimidante, ya que la existencia de una nueva entidad podr\u00eda ser fuente de algunas aventuras adicionales. <\/p>\n<h3>Patroni<\/h3>\n<p>\nEsto es lo \u00faltimo que llam\u00f3 mi atenci\u00f3n y, como result\u00f3, no sin raz\u00f3n. Patroni es una utilidad de c\u00f3digo abierto que, en esencia, es un demonio en Python que permite gestionar autom\u00e1ticamente cl\u00fasteres de PostgreSQL con diversos tipos de replicaci\u00f3n y conmutaci\u00f3n autom\u00e1tica de roles. Result\u00f3 ser muy interesante, ya que se integra bien con Kubernetes y no introduce ninguna nueva entidad. <\/p>\n<h3>Entonces, \u00bfqu\u00e9 elegimos al final?<\/h3>\n<p>\nLa elecci\u00f3n no fue f\u00e1cil:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 est\u00e1 bien, pero es arriesgado;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 tambi\u00e9n est\u00e1 bien, se utiliza en muchos lugares, pero MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 muchas entidades innecesarias, integraci\u00f3n regular con la nube y K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 excelente integraci\u00f3n con K8s, sin entidades innecesarias, se integra bien con GCP LB.<\/li>\n<\/ol>\n<p>\nAs\u00ed, la decisi\u00f3n se tom\u00f3 por Patroni. <\/p>\n<h3>Conclusiones<\/h3>\n<p>\nHa llegado el momento de resumir brevemente. S\u00ed, el mundo de la infraestructura de TI ha cambiado significativamente, y esto es solo el comienzo. Y si antes las nubes eran solo otro tipo de infraestructura, ahora todo es diferente. Adem\u00e1s, las innovaciones en la nube est\u00e1n apareciendo constantemente, seguir\u00e1n apareciendo y, quiz\u00e1s, solo aparecer\u00e1n en la nube y, posteriormente, a trav\u00e9s de startups, ser\u00e1n trasladadas a On-premises.<\/p>\n<p>En cuanto a SQL, SQL seguir\u00e1 existiendo. Esto significa que es necesario conocer PostgreSQL y MySQL y saber trabajar con ellos, pero a\u00fan m\u00e1s importante es saber aplicar correctamente estas herramientas.<br \/>\n<br \/>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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\udd47C\u00f3mo sobrevivir a una base de datos SQL en el siglo XXI: nubes, Kubernetes y PostgreSQL multimaster | ProHoster","description":"Hola, comunidad de Habr. Hoy comienzan las clases del primer grupo del curso de 'PostgreSQL'.","canonical_url":"https:\/\/prohoster.info\/es\/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":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}