Todos los productos
Search
Centro de documentos

PolarDB:Separación de lectura y escritura

Última actualización: Sep 05, 2026

Cuando el tráfico de lectura aumenta, un solo nodo principal se convierte en un cuello de botella. Los clústeres de PolarDB for PostgreSQL incluyen separación de lectura y escritura integrada mediante PolarProxy. Si se conecta a través de un endpoint de clúster configurado en el modo Read and Write (Automatic Read-write Splitting), el clúster dirige automáticamente las solicitudes de escritura al nodo principal y las de lectura a los nodos de solo lectura. No es necesario modificar la aplicación.

Casos de uso

  • Alto volumen de lectura: descargue las consultas analíticas, los trabajos de informes y las operaciones de búsqueda en los nodos de solo lectura. De esta forma, el nodo principal queda libre para las escrituras.

  • Escalado elástico: agregue nodos de solo lectura para aumentar el throughput de lectura sin modificar la aplicación ni las cadenas de conexión.

  • Lecturas consistentes dentro de una sesión: garantice que las lecturas de una misma sesión reflejen las escrituras más recientes, incluso cuando las solicitudes se distribuyen entre varios nodos.

Funcionamiento del enrutamiento

PolarProxy intercepta todo el tráfico que pasa por el endpoint de clúster y enruta cada solicitud según su tipo:

Tipo de solicitud

Se enruta a

Instrucciones de escritura (INSERT, UPDATE, DELETE, DDL)

Nodo principal

Instrucciones de lectura (SELECT)

Nodo de solo lectura

Instrucciones dentro de una transacción

Nodo principal

Funciones con operaciones de escritura o mixtas

Nodo principal

Funciones de solo lectura, incluidas las personalizadas

Nodo de solo lectura

Instrucciones PREPARE con operaciones de escritura y sus EXECUTE relacionados

Solo al nodo principal

Instrucciones PREPARE con operaciones de solo lectura

Se transmiten a todos los nodos; EXECUTE se enruta según la carga

PolarProxy se ejecuta como un componente nativo del clúster, no como un proxy externo. Por lo tanto, agrega menos latencia que las soluciones de middleware de terceros.

Consistencia de lectura en la sesión

Dentro de una sesión, PolarProxy selecciona un nodo según el progreso de sincronización de datos de cada uno. Así garantiza que las lecturas siempre reflejen las últimas escrituras confirmadas. El balanceo de carga entre nodos se reanuda conforme avanza la sesión.

Comprobaciones de estado de los nodos

PolarProxy supervisa continuamente todos los nodos. Si un nodo falla o su latencia supera el umbral configurado, PolarProxy deja de enviarle solicitudes de lectura. Luego redistribuye las solicitudes de escritura y lectura entre los nodos sanos. El clúster sigue accesible aunque un nodo de solo lectura deje de funcionar. Cuando el nodo se recupera, PolarProxy lo vuelve a agregar automáticamente al pool de enrutamiento.

Anulación del enrutamiento con sugerencias SQL

Agregue /*FORCE_MASTER*/ o /*FORCE_SLAVE*/ justo antes de una instrucción SQL para anular el enrutamiento predeterminado:

-- Default: routed to a read-only node
SELECT * FROM test;

-- Force to primary node
/*FORCE_MASTER*/ SELECT * FROM test;

-- Force to a read-only node
/*FORCE_SLAVE*/ SELECT * FROM test;

Limitaciones

Método de conexión no compatible:

No se admite la conexión mediante el método de modo de replicación a través del endpoint de clúster. Para configurar un clúster de dos nodos basado en una arquitectura de replicación principal/secundaria, use directamente el endpoint del nodo principal.

Recursos temporales creados por funciones:

  • Consultar una tabla temporal creada dentro de una función puede devolver un error que indica que la tabla no existe.

  • Si una función contiene una instrucción PREPARE, ejecutar la instrucción EXECUTE relacionada puede devolver un error que indica que el nombre de la instrucción PREPARE no existe.

Sintaxis no compatible:

No se admite usar el nombre de una tabla temporal para declarar el atributo %ROWTYPE. Por ejemplo:

CREATE TEMP TABLE fullname (first text, last text);
SELECT '(Joe,von Blow)'::fullname, '(Joe,d''Blow)'::fullname;

Enrutamiento de transacciones:

Todas las instrucciones dentro de una transacción se enrutan al nodo principal. El balanceo de carga se reanuda cuando termina la transacción.

Configuración de un endpoint de clúster

Nota

Una vez creado el endpoint de clúster, configúrelo en su aplicación para habilitar la separación automática de lectura y escritura. No se requieren más cambios en la aplicación.

Siguientes pasos

Referencia de API

API

Descripción

CreateDBEndpointAddress

Crea un endpoint público para un clúster de PolarDB

DescribeDBClusterEndpoints

Consulta la información de los endpoints de un clúster de PolarDB

ModifyDBClusterEndpoint

Modifica la configuración de un endpoint de clúster

ModifyDBEndpointAddress

Modifica un endpoint de un clúster de PolarDB

DeleteDBEndpointAddress

Libera el endpoint público del endpoint principal, del endpoint de clúster predeterminado o de un endpoint de clúster personalizado de un clúster de PolarDB