0Pricing
SQL Academy · Lección

Réplicas de lectura y enrutamiento de conexiones

Enrute el tráfico de solo lectura a las réplicas con PgBouncer o un controlador inteligente y acepte el compromiso de trabajar con datos no completamente actualizados.

Réplicas de lectura y enrutamiento de conexiones es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Por qué usar réplicas de lectura?

Las cargas de trabajo con muchas lecturas pueden descargar los SELECT en las réplicas:

  • La instancia principal gestiona las escrituras
  • Las réplicas gestionan la mayoría de las lecturas
  • Escalado horizontal de lecturas sin fragmentación

La salvedad de la consistencia eventual

Las réplicas quedan rezagadas respecto a la instancia principal. Es posible que un usuario que acaba de realizar un pedido todavía no lo vea en la réplica. Puede hacer lo siguiente:

  • Enrutar las lecturas posteriores a escrituras a la instancia principal
  • Esperar a que la réplica se ponga al día
  • Almacenar en caché en la aplicación el estado posterior a la escritura

Estrategias de enrutamiento

  1. Enrutamiento en el nivel de la aplicación: el código de la aplicación elige entre la instancia principal y la réplica
  2. Enrutamiento en el nivel del controlador: JDBC, pgjdbc y pgxpool gestionan el grupo de conexiones teniendo en cuenta la instancia principal y las réplicas
  3. Enrutamiento en el nivel del proxy: pgpool, pgbouncer y HAProxy detectan lecturas y escrituras

Enrutamiento de la aplicación

Dos grupos de conexiones, uno por rol:

const primary = new Pool({ host: 'primary', ... });
const replica = new Pool({ host: 'replica', ... });

// reads go to replica:
await replica.query('SELECT ...');

// writes (and read-your-writes) go to primary:
await primary.query('INSERT ...');

PgPool-II

Proxy que analiza SQL y dirige los SELECT a las réplicas y las escrituras al primario. Admite balanceo de carga y agrupación de conexiones:

# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = on

HAProxy con comprobaciones mediante pg_isready

HAProxy no entiende SQL, pero puede enrutar por puerto: un frontend para las escrituras (al primario) y otro para las lecturas (a las réplicas con comprobaciones de estado):

frontend writes
  bind *:5432
  default_backend primary_pool

frontend reads
  bind *:5433
  default_backend replicas_pool
  balance roundrobin

Endpoints de AWS RDS

RDS proporciona un único endpoint de escritura y un endpoint de lectura que distribuye la carga entre todas las réplicas; es la opción más sencilla en la nube.

Consideraciones sobre el retraso de replicación

Supervise el retraso y evite enrutar a réplicas que estén demasiado desactualizadas:

-- On primary:
SELECT client_addr, replay_lag FROM pg_stat_replication;

-- HAProxy / pgpool can use a custom health check that fails if replay_lag > threshold.

Patrón de sesión persistente

Para «leer sus propias escrituras»: mantenga la sesión del usuario vinculada al primario durante N segundos después de una escritura. Como alternativa, registre el LSN de la escritura y espere a que la réplica reproduzca los cambios antes de responder.

Espera basada en LSN

Después de una escritura, capture el LSN; antes de leer en la réplica, espere hasta que esta haya reproducido los cambios hasta ese LSN:

-- After write on primary:
SELECT pg_current_wal_lsn();        -- save this

-- Before read on replica:
SELECT pg_last_wal_replay_lsn() >= $saved_lsn;
-- spin or wait until true

La caché como réplica

A veces Redis / Memcache actúa como una «réplica» para escalar las lecturas; es mucho más rápido que otra instancia de Postgres para las claves de acceso frecuente.

Cuándo NO usar réplicas

Si la carga de trabajo tiene muchas escrituras, las réplicas principalmente añaden costes sin aportar velocidad. Si las lecturas ya son rápidas en el primario, quizá no las necesite.

Recuperación ante desastres frente a escalado de lecturas

Las réplicas para la conmutación por error de alta disponibilidad responden a una necesidad distinta de las réplicas para escalar las lecturas. A menudo se utilizan ambas.

Resumen

Las réplicas de lectura permiten escalar las lecturas, pero tienen retraso.

  • Enrutamiento desde la aplicación, el controlador o el proxy
  • El retraso de replicación implica consistencia eventual
  • Vinculación temporal al primario o espera basada en LSN para leer sus propias escrituras
  • Supervise el retraso y vuelva al primario si es demasiado grande

Comprobación rápida

Un usuario publica un comentario y actualiza la página inmediatamente. La página lee desde una réplica y no muestra el comentario. ¿Cuál es el problema y cuál es una solución?

Preguntas frecuentes

¿La lección «Réplicas de lectura y enrutamiento de conexiones» es gratis?

Sí — el texto completo de «Réplicas de lectura y enrutamiento de conexiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Réplicas de lectura y enrutamiento de conexiones»?

Enrute el tráfico de solo lectura a las réplicas con PgBouncer o un controlador inteligente y acepte el compromiso de trabajar con datos no completamente actualizados. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Réplicas de lectura y enrutamiento de conexiones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Replicación en streaming y WAL
  2. Replicación lógica para fragmentación
  3. Failover y elección del líder (Patroni, Stolon)
  4. Réplicas de lectura y enrutamiento de conexiones
← Volver a SQL Academy