Saltar al contenido
aprendeaws.dev

Módulo 13 · Resiliencia y recuperación/Lección 81

Replicación y consistencia de datos

Síncrona o asíncrona, fuerte o eventual: qué se replica, con cuánto retraso y qué pasa con las transacciones en vuelo cuando todo falla.

Al terminar podrás

  • →Diferenciar replicación síncrona y asíncrona y su efecto en el RPO
  • →Explicar consistencia fuerte y eventual con ejemplos de AWS
  • →Elegir entre Aurora Global Database, réplicas entre regiones y tablas globales de DynamoDB

Replicar es mantener copias vivas de tus datos en otro lugar. Toda replicación responde dos preguntas: ¿cuándo confirma el primario que una escritura quedó guardada?, y ¿qué ve quien lee de la copia? De esas respuestas salen tu RPO, la latencia de cada escritura y los errores raros que aparecen el día del desastre.

Síncrona o asíncrona

CriterioReplicación síncronaReplicación asíncrona
Cuándo confirma la escrituraCuando la copia también la guardóCuando la guardó el primario; la copia la recibe después
Latencia de cada escrituraSuma el viaje de ida y vuelta a la copiaNo cambia
Si cae el primarioLa copia tiene todo lo confirmado: RPO ceroSe pierde lo que no alcanzó a cruzar: RPO igual al retraso
Si cae la copiaLas escrituras se frenan o el sistema debe dejar de esperarEl primario sigue normal
Distancia prácticaCerca: zonas de la misma regiónCualquiera: entre regiones o continentes

¿Por qué no replicar todo de forma síncrona entre regiones? Por la física. La luz en fibra óptica recorre unos 200 000 km por segundo. Con una región a 1 000 km, el viaje de ida y vuelta toma al menos 10 ms antes de sumar equipos de red, y cada escritura lo paga. Una transacción con diez escrituras seguidas ya suma 100 ms solo en esperar. Además, una falla en la región remota frena las escrituras de la principal. Por eso la replicación síncrona vive dentro de una región, entre zonas cercanas, y entre regiones domina la asíncrona. Repasa las distancias en comunicación entre zonas y regiones.

Consistencia fuerte o eventual

Con consistencia fuerte, toda lectura ve la última escritura confirmada. Con consistencia eventual, las copias terminan iguales, pero durante un rato una lectura puede devolver un valor viejo.

El problema clásico es leer lo que acabas de escribir (read-after-write). Un usuario cambia su dirección, recarga la página y ve la dirección vieja, porque la lectura fue a una réplica atrasada. Hay tres salidas: leer del primario justo después de escribir, mandar a cada usuario siempre a la región donde escribe, o usar un modo de lectura fuerte donde exista. Dentro de una región, S3 ya da consistencia fuerte de lectura después de escritura, y DynamoDB ofrece lecturas fuertes con ConsistentRead. Entre regiones, casi todo es eventual salvo que elijas lo contrario.

Las transacciones en vuelo

A las 14:39:59 el primario confirma el pedido 1001 y el cliente recibe su correo. El retraso de replicación es de 2 segundos. A las 14:40:00 cae la región. El secundario se promueve sin el pedido 1001. Pueden pasar dos cosas:

  • Se pierde: el cliente tiene un correo de un pedido que no existe en la base nueva.
  • Hay que reconciliarlo: cuando la región vieja vuelve, aparece un pedido que la base nueva nunca vio. Si la base nueva ya usó el número 1001 para otro cliente, tienes dos pedidos con el mismo número.

Por eso conviene usar identificadores que no dependan de un contador del primario (por ejemplo, UUID) y guardar en otro lugar la evidencia para reconciliar: el proveedor de pagos, una cola de eventos, los correos enviados. Aurora ayuda en este punto: tras un failover de Aurora Global Database intenta tomar un snapshot del volumen viejo en el momento de la falla, llamado rds:unplanned-global-failover-…, para que recuperes lo que no alcanzó a cruzar.

Otro concepto clave es el punto consistente. Una copia sirve si cada transacción está completa o ausente, nunca a medias. Las bases de datos lo garantizan al promover una réplica o restaurar un snapshot. Varios discos copiados por separado no: si una aplicación escribe en dos volúmenes, sus snapshots deben tomarse juntos. Y con DynamoDB global tables en modo eventual, una transacción solo es atómica en la región donde se ejecutó; otra región puede verla a medias mientras se replica.

Las opciones de AWS

  • RDS Multi-AZ

    Copia síncrona en otra zona de la misma región y failover automático. Protege de la caída de una instancia o una zona, no de una región. Detalles en RDS y Aurora.
  • Réplica de lectura de RDS en otra región

    Asíncrona. Al promoverla se vuelve una base independiente y la replicación se corta: no hay vuelta atrás automática.
  • Aurora Global Database

    Replica a nivel de almacenamiento, con retraso típico de menos de 1 segundo. Un solo clúster primario escribe; los secundarios leen.
  • DynamoDB global tables

    Réplicas en varias regiones que aceptan lecturas y escrituras. Eliges el modo de consistencia al crear la tabla y no se puede cambiar después.
  • Replicación de S3

    Asíncrona entre buckets, en otra región (CRR) o la misma (SRR). Requiere versionado. Con Replication Time Control tienes un tiempo comprometido y métricas.
  • ElastiCache Global Datastore

    Para Valkey y Redis OSS en clústeres basados en nodos. Un clúster primario escribe y los secundarios, en otras regiones, solo leen. Puedes promover un secundario.

Aurora Global Database tiene dos formas de cambiar de región. El switchover (antes llamado «managed planned failover») espera a que el secundario esté al día y luego cambia los roles: RPO cero, para mantenimiento o simulacros. El failover no espera y puede perder lo que no se replicó: es para desastres, y en la CLI exige el parámetro --allow-data-loss. Con Aurora PostgreSQL puedes poner un tope al RPO con el parámetro rds.global_db_rpo: si todos los secundarios van más atrasados que ese valor, Aurora frena los commits en el primario hasta que uno se ponga al día. Cambias disponibilidad por un RPO acotado.

DynamoDB global tables tiene dos modos. En consistencia eventual multirregión (MREC, el modo por defecto), cada región escribe localmente, los cambios se propagan normalmente en un segundo o menos y, si dos regiones modifican el mismo ítem a la vez, gana la escritura con la marca de tiempo más reciente (last writer wins). En consistencia fuerte multirregión (MRSC), cada escritura se replica de forma síncrona a al menos otra región antes de confirmarse: RPO cero, a cambio de más latencia. MRSC exige exactamente tres regiones (tres réplicas, o dos réplicas y un testigo), no admite transacciones, TTL ni índices secundarios locales, y si dos regiones modifican el mismo ítem a la vez una recibe ReplicatedWriteConflictException y debe reintentar.

Para llevar cambios a un sistema externo o a otro motor (por ejemplo, de Aurora a un almacén analítico), AWS DMS ofrece replicación continua con captura de cambios (CDC). También es asíncrona. Lo verás en migrar bases de datos.

Comparación rápida

CriterioRDS Multi-AZRéplica entre regionesAurora Global DatabaseGlobal tables MRECGlobal tables MRSC
AlcanceUna región, varias zonasVarias regionesVarias regionesVarias regionesExactamente tres regiones
ReplicaciónSíncronaAsíncronaAsíncrona, por almacenamientoAsíncronaSíncrona hacia al menos otra región
RPO si cae la regiónNo cubre ese casoEl ReplicaLagSegundos (cero con switchover planeado)Normalmente pocos segundosCero
Dónde se escribeSolo el primarioSolo el primarioSolo el clúster primarioEn todas las regionesEn todas las regiones
Lectura en la copiaNo en el standby clásicoEventualEventualEventual entre regionesFuerte
Cambio de primarioAutomáticoManual: promoverSwitchover o failover administradoNo hay primario: mueves el tráficoNo hay primario: mueves el tráfico

Quiz

Pon a prueba lo que aprendiste

0 de 5 correctas · 5 sin responder

  1. 1.Un equipo quiere replicación síncrona entre dos regiones separadas por 3 000 km para lograr RPO cero en su base PostgreSQL. ¿Cuál es el problema principal?

  2. 2.Un usuario guarda su perfil y, al recargar, ve los datos viejos. Las lecturas van a una réplica de lectura. ¿Qué describe el problema?

  3. 3.Necesitas RPO cero entre regiones para una tabla de saldos en DynamoDB y aceptas más latencia de escritura. ¿Qué eliges?

  4. 4.Vas a mover el primario de Aurora Global Database a otra región durante un mantenimiento planeado y no quieres perder datos. ¿Qué operación usas?

  5. 5.Una base asíncrona confirma una transacción y la región cae un segundo después, antes de replicarla. Tras el failover, ¿qué pasa con esa transacción?