Logo Google Cloud con Eduardo

Google Cloud con Eduardo

Recibe el código de la lección en tu correo
Te enviaremos el enlace directo al archivo (.zip) y te sumaremos a nuestra newsletter de Google Cloud.

Información básica de protección de datos: Responsable: Eduardo Martínez Agrelo. Finalidad: Facilitar el recurso solicitado y enviar comunicaciones periódicas de valor sobre Google Cloud. Legitimación: Consentimiento del interesado (Art. 6.1.a RGPD). Destinatarios: Plataforma Odoo y proveedores de infraestructura técnica (Google Cloud / Firebase). Derechos: Acceso, rectificación y supresión en eduardomartinezagrelo@gmail.com.
✦ Guía de Arquitectura & Resiliencia

Google Cloud SQL: Arquitectura Enterprise, Alta Disponibilidad y Resiliencia en Producción

Cómo diseñar, operar y proteger motores relacionales PostgreSQL, MySQL y SQL Server en Google Cloud Platform sin cuellos de botella de latencia ni pérdidas accidentales de datos.

Lo que Aprenderás en esta Guía de Arquitectura:

✓ Diferencias arquitectónicas reales entre Alta Disponibilidad regional (HA) y Read Replicas.
✓ Mecánica profunda de Point-In-Time Recovery (PITR) y recuperación quirúrgica ante fallos humanos.
✓ Conexión Zero-Trust mediante Cloud SQL Auth Proxy y Workload Identity sin contraseñas estáticas.
✓ Estrategias FinOps críticas: control de auto-incremento de disco y comparación Enterprise vs Enterprise Plus.
Google Cloud SQL PostgreSQL 16 MySQL 8.4 High Availability (HA) Read Replicas Point-In-Time Recovery (PITR) Cloud SQL Auth Proxy FinOps & CUDs Terraform IaC

¿Qué es Google Cloud SQL y Por Qué Fallan las Bases de Datos Relacionales en Producción?

Google Cloud SQL es el servicio de bases de datos relacionales totalmente administrado de Google Cloud Platform para motores PostgreSQL, MySQL y Microsoft SQL Server. A diferencia de desplegar un motor de base de datos sobre una máquina virtual en Compute Engine —donde el equipo de ingeniería debe aprovisionar el sistema operativo, gestionar réplicas a bajo nivel, rotar certificados SSL manualmente y configurar cronjobs frágiles para backups—, Cloud SQL externaliza la capa operativa hacia la infraestructura automatizada de Google.

Sin embargo, existe una desconexión peligrosa entre entender Cloud SQL como un mero "MySQL en la nube" y operarlo como una pieza central de arquitectura empresarial. En nuestras auditorías de datos en clientes empresariales, el 80% de las incidencias de rendimiento en Cloud SQL no son causadas por saturación del hardware, sino por un antipatrón fundamental: sobrecargar la instancia primaria transaccional (OLTP) con cargas analíticas o reportes pesados.

Cuando una aplicación web o API comparte la misma base de datos con consultas analíticas complejas (joins masivos, agrupaciones temporales o escaneos completos de tablas), se produce una competencia feroz por los hilos de CPU, el búfer de memoria y las conexiones concurrentes. El agotamiento del pool de conexiones bloquea las transacciones críticas de negocio, disparando los tiempos de respuesta y provocando caídas en cascada.

Para cargas analíticas masivas que superan los cientos de gigabytes o requieren exploración multidimensional, la base de datos relacional debe desacoplarse hacia un almacén de datos especializado; aquí es donde entra la complementariedad con la arquitectura analítica y optimización FinOps en Google BigQuery. No obstante, para la capa transaccional pura, la clave radica en diseñar correctamente la Alta Disponibilidad (HA) y segregar el tráfico mediante Read Replicas.

Alta Disponibilidad (HA) vs Read Replicas: Diseñando para Resiliencia y Cero Latencia

Uno de los errores conceptuales más frecuentes en exámenes de certificación y en salas de arquitectura es confundir una configuración de Alta Disponibilidad (High Availability) con una arquitectura de Réplicas de Lectura (Read Replicas). Aunque ambas utilizan instancias secundarias, sus objetivos operativos, mecánicas de sincronización y comportamientos ante fallos son radicalmente distintos:

Parámetro de Arquitectura Alta Disponibilidad Regional (HA) Réplicas de Lectura (Read Replicas)
Propósito Principal Resiliencia ante caídas de zona y continuidad de negocio (Failover). Escalabilidad horizontal del rendimiento y descarga de lecturas.
Topología Instancia primaria (Zona A) + Instancia Standby pasiva (Zona B). Instancia primaria + N instancias de lectura (misma región o cross-region).
Mecanismo de Replicación Síncrono a nivel de almacenamiento compartido de disco persistente. Asíncrono a nivel de motor de base de datos (Binary Logs / WAL streaming).
Punto de Conexión (IP) IP única. El enrutamiento conmuta automáticamente a la Standby. IPs independientes por cada réplica de lectura.
Disponibilidad para Consultas No accesible. La standby no admite lecturas ni escrituras mientras es pasiva. Totalmente accesibles para consultas de solo lectura (SELECT).
RTO (Recovery Time Objective) 60 segundos (Enterprise) / <10 segundos (Enterprise Plus). N/A (debe promoverse manualmente a primaria si se desea failover).
RPO (Recovery Point Objective) Cero (RPO = 0). Cero pérdida de datos gracias al almacenamiento sincrónico. RPO > 0 (dependiente del retraso de replicación / replication lag).

El Problema Real de Latencia en Aplicaciones Transaccionales

En múltiples proyectos de migración hemos observado aplicaciones con picos de latencia de más de 1.500 ms por consulta simplemente porque las peticiones de lectura (listados, catálogos, generación de PDFs y consultas de dashboards internos) impactaban directamente contra el nodo primario de escritura.

Al implementar un patrón de segregación de lectura/escritura (Read/Write Splitting) mediante Read Replicas dedicadas y un balanceador de carga de capa 7 o bibliotecas de conexión con soporte multifuente (como Prisma, TypeORM o HikariCP en Java), el tráfico de consulta se descarga por completo del nodo primario. Las escrituras quedan aisladas con tiempos de respuesta consistentes de menos de 35 ms, mientras que las réplicas absorben miles de consultas concurrentes sin degradar la experiencia del usuario final.

✦ Regla de Oro para Arquitectos de Datos

Si tu aplicación experimenta bloqueos de tabla (lock contention) o subidas de uso de CPU por encima del 70% durante las horas de mayor actividad comercial, no aumentes ciegamente el tamaño de la máquina virtual primaria. Introduce una Read Replica y separa las conexiones de lectura en tu pool de aplicación.

Demostración en Vídeo: Configuración y Operaciones Críticas en Cloud SQL

En el siguiente vídeo de nuestro canal oficial de YouTube, analizamos paso a paso la consola de Google Cloud, el aprovisionamiento de instancias con resiliencia empresarial, la monitorización de métricas de replicación y las decisiones arquitectónicas que marcan la diferencia entre un entorno frágil y una base de datos lista para tráfico masivo:

Point-in-Time Recovery (PITR): La Estrategia que Salva tu Producción de un `DROP TABLE`

Muchos ingenieros creen erróneamente que tener activado un backup nocturno automático es suficiente para proteger una base de datos. Sin embargo, un backup diario tiene un RPO catastrófico de hasta 24 horas: si tu base de datos se corrompe a las 18:00 y restauras la instantánea de las 02:00 de la madrugada, habrás destruido irrevocablemente 16 horas de pedidos, pagos y registros de tus clientes.

Aquí es donde Point-in-Time Recovery (PITR) se convierte en el salvavidas indispensable de cualquier arquitecto de datos.

Mecánica Interna: Instantáneas Base + Registros de Transacciones Continuos

PITR funciona combinando dos componentes sincronizados:

  1. Instantánea base periódica (Snapshot): Una copia a nivel de bloques de almacenamiento gestionada automáticamente por el hipervisor de Google.
  2. Flujo continuo de registros de escritura: Binary Logs en MySQL o Write-Ahead Logging (WAL) en PostgreSQL. Cada sentencia transaccional que muta datos se almacena de forma inmutable con su marca de tiempo exacta (timestamp con precisión de milisegundos).

Caso Real: El Día que un Script de Migración Vació una Tabla en Producción

Durante el despliegue de una refactorización crítica en un cliente de e-commerce, un desarrollador ejecutó accidentalmente un script de limpieza sobre la base de datos de producción a las 15:42:18 UTC. Una cláusula TRUNCATE TABLE sin el namespace adecuado purgó la tabla de carritos activos y sesiones de pago en cuestión de centésimas de segundo.

En una infraestructura tradicional sin registros continuos, el impacto económico habría sido devastador. Gracias a tener activado Point-in-Time Recovery en Cloud SQL, el procedimiento de contingencia fue quirúrgico:

  • Identificamos la hora exacta del incidente en los registros de auditoría de Cloud Logging: 15:42:18.120Z.
  • A través de Cloud SDK (gcloud), disparamos una clonación con restauración a un punto temporal fijada exactamente a las 15:42:15.000Z (tres segundos antes de la ejecución de la consulta destructiva).
  • Cloud SQL aprovisionó una nueva instancia clonada en cuestión de minutos, reprodujo la instantánea base y aplicó los archivos WAL hasta el segundo indicado.
  • Exportamos la tabla intacta desde la instancia clonada hacia Cloud Storage y la reinyectamos en la instancia primaria sin interrumpir el resto de las operaciones transaccionales del negocio.

Flujo de Restauración Quirúrgica con `gcloud`

El comando para clonar una instancia a un segundo exacto sin tocar la instancia en producción se ejecuta de la siguiente manera:

# Clonación quirúrgica a un punto temporal específico (PITR)
gcloud sql instances clone mi-instancia-primaria mi-instancia-recuperada-dr \
    --project="mi-proyecto-gcp" \
    --point-in-time="2026-10-23T15:42:15.000000Z"

# Verificar que la instancia restaurada está en estado RUNNABLE
gcloud sql instances describe mi-instancia-recuperada-dr \
    --format="value(state)"

Seguridad de Conectividad Enterprise: Cloud SQL Auth Proxy y Zero Trust sin Claves

Exponer una base de datos relacional con una IP pública y abrir el puerto 5432 o 3306 a 0.0.0.0/0 con una contraseña en texto plano es una de las vulnerabilidades más graves en seguridad cloud.

La arquitectura recomendada en Google Cloud se basa en el principio de Zero-Trust y consta de dos capas inquebrantables:

1. Red Privada con Private Service Connect (PSC) o VPC Peering

La instancia de Cloud SQL debe desplegarse únicamente con IP Privada dentro de la red VPC corporativa. Con Private Service Connect (PSC), los clientes acceden a la base de datos a través de un endpoint local en su propia subred, eliminando la necesidad de acuerdos de peering complejos y evitando solapamientos de rangos CIDR entre diferentes proyectos.

2. Cloud SQL Auth Proxy & Autenticación Nativa con IAM

El Cloud SQL Auth Proxy es un túnel seguro que se ejecuta como un contenedor sidecar (en Kubernetes GKE o Cloud Run) o como servicio en background en máquinas virtuales. Sus ventajas técnicas son definitivas:

  • Cifrado TLS 1.3 bidireccional obligatorio: El proxy negocia y rota certificados SSL/TLS automáticamente cada hora sin intervención humana.
  • Eliminación de contraseñas estáticas: En lugar de almacenar contraseñas en variables de entorno, la aplicación se autentica utilizando su Service Account mediante autenticación Zero-Trust mediante Workload Identity en Google Cloud.
  • Control granular por roles de IAM: El acceso a la instancia se concede únicamente a las identidades que disponen del rol roles/cloudsql.client y roles/cloudsql.instanceUser.

Esta misma capa de acceso transaccional seguro es la que permite desacoplar la ingesta continua hacia almacenes analíticos y orquestadores cuando construyes un diseño de data pipelines end-to-end en Google Cloud.

Antipatrones de Producción y FinOps: Evita Fugas de Presupuesto en Cloud SQL

La flexibilidad de la nube puede convertirse en una trampa de facturación si no se comprenden los mecanismos de aprovisionamiento de Google Cloud SQL. En nuestras revisiones de optimización de costes, estos son los tres focos críticos de fuga financiera:

⚠ Advertencia Crítica: El Crecimiento Automático de Almacenamiento es Irreversible

Cloud SQL ofrece la opción "Automatic storage increase", muy útil para evitar que una base de datos se detenga si se llena el disco. Sin embargo, en Google Cloud los discos SSD persistentes de Cloud SQL solo pueden crecer, jamás reducirse. Si un proceso batch defectuoso genera gigabytes de tablas temporales no optimizadas o logs descontrolados y el disco escala de 100 GB a 2 TB, la empresa quedará obligada a pagar la cuota de 2 TB de almacenamiento SSD para siempre, a menos que clone manualmente toda la base de datos a una instancia nueva.

Enterprise vs Enterprise Plus: Cuándo Justificar el Salto de Coste

Google Cloud ofrece dos familias principales para Cloud SQL: Enterprise y Enterprise Plus. La edición Plus ofrece ventajas formales insustituibles para entornos críticos, pero su coste por vCPU y memoria es aproximadamente un 30% a 40% superior:

  • Elige Enterprise cuando: Tus aplicaciones tienen ventanas de mantenimiento flexibles los fines de semana, toleras conmutaciones por fallo de hasta 60 segundos y un RPO de retención de PITR de 7 días es suficiente para tus políticas de cumplimiento.
  • Elige Enterprise Plus cuando: Requieres un SLA del 99.99% con mantenimiento en caliente (cero downtime programado), tiempo de failover inferior a 10 segundos, caché local ultrarrápida NVMe (Data Cache para reducir la latencia de lectura en un 50%) y retención legal de PITR de hasta 35 días.

Ahorro del 37% al 55% con Committed Use Discounts (CUDs)

A diferencia de los entornos de desarrollo que deben apagarse fuera del horario laboral, las bases de datos primarias de producción funcionan 24/7 los 365 días del año. Mantenerlas bajo facturación On-Demand es un desperdicio financiero. La adquisición de Committed Use Discounts (CUDs) de Cloud SQL por 1 o 3 años reduce el coste de vCPU y memoria entre un 37% y un 55%, amortizando de inmediato el coste operativo del departamento de datos.

Código de Producción: Aprovisionamiento Resiliente con Terraform

A continuación se presenta un manifiesto de infraestructura como código (IaC) con Terraform listo para producción. Configura una instancia primaria con Alta Disponibilidad regional, activación estricta de Point-In-Time Recovery (PITR), red privada y una réplica de lectura para escalado horizontal:

# Definición de Instancia Primaria Cloud SQL con HA y PITR
resource "google_sql_database_instance" "primary" {
  name             = "prod-db-primary"
  database_version = "POSTGRES_16"
  region           = "europe-west1"
  project          = var.project_id

  settings {
    tier              = "db-custom-4-16384" # 4 vCPU, 16 GB RAM
    edition           = "ENTERPRISE"
    availability_type = "REGIONAL"          # Alta Disponibilidad (Zona A + Zona B)
    disk_type         = "PD_SSD"
    disk_size         = 100
    disk_autoresize   = true
    disk_autoresize_limit = 500             # Tope FinOps de seguridad

    backup_configuration {
      enabled                        = true
      start_time                     = "03:00"
      location                       = "eu"
      point_in_time_recovery_enabled = true # Activación obligatoria de PITR
      transaction_log_retention_days = 7
      backup_retention_settings {
        retained_backups = 30
      }
    }

    ip_configuration {
      ipv4_enabled    = false               # Sin IP Pública
      private_network = var.vpc_network_id  # Conexión Privada VPC
      require_ssl     = true
    }

    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"                          # Autenticación IAM Zero-Trust
    }
  }

  deletion_protection = true                 # Protección contra borrado accidental
}

# Réplica de Lectura Dedicada para Descargar la Primaria
resource "google_sql_database_instance" "read_replica" {
  name                 = "prod-db-read-replica-01"
  master_instance_name = google_sql_database_instance.primary.name
  database_version     = "POSTGRES_16"
  region               = "europe-west1"
  project              = var.project_id

  settings {
    tier        = "db-custom-2-8192"        # 2 vCPU, 8 GB RAM
    disk_type   = "PD_SSD"
    disk_size   = 100

    ip_configuration {
      ipv4_enabled    = false
      private_network = var.vpc_network_id
      require_ssl     = true
    }
  }

  replica_configuration {
    failover_target = false
  }
}

Preguntas Frecuentes sobre Google Cloud SQL (FAQ)

¿Cuál es la diferencia entre un backup estándar y la recuperación a un punto temporal (PITR) en Cloud SQL?
Un backup estándar genera una instantánea (snapshot) estática del disco en un momento determinado del día, lo que implica un RPO (Recovery Point Objective) de hasta 24 horas si ocurre una falla catastrófica. PITR (Point-in-Time Recovery), por el contrario, combina la última instantánea base con la reproducción continua de binary logs (en MySQL) o Write-Ahead Logs (WAL en PostgreSQL). Esto permite restaurar la base de datos a un clon exacto en cualquier segundo específico dentro del periodo de retención, recuperando tablas borradas por error humano sin perder las transacciones legítimas posteriores.
¿Cómo afecta la creación de una Read Replica a la consistencia de mis datos?
La replicación entre la instancia primaria de Cloud SQL y sus Read Replicas es asíncrona. Esto significa que las escrituras son confirmadas en la primaria antes de transmitirse a las réplicas, introduciendo un desfase temporal mínimo (replication lag). Para cargas de reporting analítico, microservicios de lectura o dashboards, este desfase es despreciable y protege a la primaria de la contención de bloqueos. Sin embargo, para transacciones que exigen consistencia estricta inmediatamente tras una mutación ("read-your-own-writes"), la consulta debe dirigirse a la instancia primaria.
¿Qué diferencia crítica existe entre Cloud SQL Enterprise y Enterprise Plus a nivel de SLA y rendimiento?
Cloud SQL Enterprise ofrece un SLA de disponibilidad del 99.95% con conmutación por error en aproximadamente 60 segundos y retención máxima de PITR de 7 días. Por su parte, Cloud SQL Enterprise Plus incrementa el SLA al 99.99% (incluyendo ventanas de mantenimiento), reduce el tiempo de failover a menos de 10 segundos mediante optimizaciones de kernel y almacenamiento local NVMe SSD (Data Cache), y amplía la ventana de retención de PITR hasta 35 días, haciéndola indispensable para sistemas bancarios, telecomunicaciones y comercio electrónico crítico.
Eduardo Martínez Agrelo - AI & Data Architect

Sobre el Autor: Eduardo Martínez Agrelo

AI & Data Architect

Especialista en arquitectura cloud empresarial, ingeniería de datos y sistemas multi-agente en Google Cloud Platform. Instructor oficial, ponente internacional y consultor estratégico para organizaciones que buscan escalar sus operaciones de datos e IA con rigor técnico y eficiencia FinOps.