sql >> Base de Datos >  >> RDS >> PostgreSQL

Streaming de PostgreSQL frente a replicación lógica:comparación

La replicación de la información almacenada en su base de datos es esencial para distribuir los datos y garantizar que tenga una copia de seguridad que pueda usarse para la recuperación ante desastres, en caso de que algo salga mal.

La replicación de PostgreSQL viene en dos formas, y ambas tienen sus usos específicos. Comprender cómo aplicar uno o ambos de estos métodos de replicación de datos puede optimizar sus procesos de distribución de datos. Lo último que desea es perder el trabajo crucial que ha realizado en una base de datos.

Echemos un vistazo a los pros, los contras y los casos de uso de la replicación de transmisión y la lógica en PostgreSQL.

Definición de la replicación de datos en PostgreSQL

Si ya está familiarizado con lo que es la replicación de datos, puede continuar y desplazarse hacia abajo a la siguiente sección. Pero en caso de que sea nuevo en la ingeniería de bases de datos, queremos sentar las bases muy rápido.

Como sugiere el nombre, la replicación es el proceso de copiar datos con frecuencia de una base de datos en un servidor de computadora a otra base de datos en un servidor diferente, para que todos los usuarios tengan acceso al mismo nivel de información. En informática, la replicación se utiliza para eliminar fallas en un sistema digital.

La replicación elimina los silos de datos, protege la información valiosa y agiliza el desarrollo.

En PostgreSQL, hay dos opciones para la replicación:replicación lógica y de transmisión. Estos métodos son excelentes para diferentes casos de uso y, como desarrollador, es posible que se sienta más inclinado a usar uno sobre el otro. Pero es bueno entender cómo usar ambos para que pueda decidir cuál aplicar en diferentes escenarios.

Replicación lógica en PostgreSQL


Se introdujo la replicación de transmisión para su uso con PostgreSQL v10.0. La replicación lógica funciona copiando/replicando objetos de datos y sus cambios en función de su identidad de replicación.

En muchos casos, la identidad de los datos es una clave principal. En PostgreSQL, brinda a los usuarios un control detallado sobre los datos replicados y la seguridad de la información.

El término lógico se utiliza para distinguirlo de la replicación física, que utiliza la replicación byte a byte y las direcciones de bloque exactas. Lea más en la documentación oficial de PostgreSQL aquí.

A través de un modelo de publicación y suscripción, funciona al permitir que uno o más suscriptores se suscriban a una o más publicaciones en un nodo de publicación. Los suscriptores pueden extraer información de las publicaciones y volver a publicar los datos para la replicación en cascada o una configuración más compleja.

La replicación de datos lógicos también puede adoptar la forma de replicación transaccional. Si el ingeniero desea copiar una tabla, puede usar este método de replicación para tomar una instantánea de los datos del lado del editor y enviarla a la base de datos del suscriptor.

A medida que los suscriptores realizan cambios en los datos originales, la base de datos del editor recibe actualizaciones en tiempo real. Para garantizar la consistencia transaccional en publicaciones con una sola suscripción, el suscriptor debe aplicar los datos en el mismo orden que el editor.

Ventajas de la replicación lógica en PostgreSQL

La replicación lógica permite a los usuarios emplear un servidor de destino para escrituras y permite a los desarrolladores tener diferentes índices y definiciones de seguridad. Esto proporciona una mayor flexibilidad para la transferencia de datos entre editores y suscriptores.

Soporte de versiones cruzadas

Además, viene con soporte de versiones cruzadas y se puede configurar entre diferentes versiones de PostgreSQL. También proporciona filtrado basado en eventos. Las publicaciones pueden tener varias suscripciones, lo que facilita compartir datos en una red amplia.

Carga mínima del servidor

En comparación con las soluciones basadas en disparadores, tiene una carga de servidor mínima y proporciona flexibilidad de almacenamiento mediante la replicación de conjuntos más pequeños. Como se mencionó anteriormente, la replicación de datos lógicos puede incluso copiar datos contenidos en tablas particionadas básicas.

También es esencial mencionar que la replicación lógica de datos permite la transformación de datos incluso cuando se está configurando y permite la transmisión paralela entre editores.

Desventajas de la replicación lógica en PostgreSQL

La replicación lógica no copiará secuencias, objetos grandes, vistas materializadas, tablas raíz de partición y tablas foráneas.

En PostgreSQL, la replicación de datos lógicos solo es compatible con operaciones DML. Los desarrolladores no pueden usar DDL o truncar, y el esquema debe definirse de antemano. Además, no admite la replicación mutua (bidireccional).

Si los usuarios entran en conflicto con las restricciones de los datos replicados en una tabla, la replicación se detendrá. La única manera de reanudar la replicación es si se resuelve la causa del conflicto.

Un conflicto no intencional puede detener el impulso de su equipo, por lo que debe comprender cómo resolver cualquier problema rápidamente.

Si el conflicto no se soluciona rápidamente, la ranura de replicación se congelará en su estado actual, el nodo publicador comenzará a acumular registros de escritura anticipada (WAL) y, finalmente, el nodo se quedará sin espacio en disco.

Casos de uso para la replicación lógica en PostgreSQL

Muchos ingenieros utilizarán la replicación lógica para:

  • Distribución de cambios dentro de una sola base de datos o subconjunto de base de datos a los suscriptores en tiempo real
  • Fusión de múltiples bases de datos en una base de datos central (a menudo para uso analítico)
  • Creación de replicaciones en varias versiones de PostgreSQL
  • Implementación de replicaciones entre instancias de PostgreSQL en diferentes plataformas, como Linux a Windows
  • Compartir datos replicados con otros usuarios o grupos
  • Distribuir un subconjunto de base de datos entre varias bases de datos

Replicación de Streaming en PostgreSQL


Se introdujo la replicación de transmisión para su uso con PostgreSQL 9.0. El proceso envía y aplica archivos de registro de escritura anticipada (WAL) desde un servidor de base de datos maestro o principal a una réplica o base de datos receptora. Los WAL se utilizan para la replicación y para garantizar la integridad de los datos.

Cómo funciona la replicación de transmisiones

La replicación de transmisión funciona para cerrar la brecha entre las transferencias de datos inherentes al envío de registros basado en archivos, que espera hasta que un WAL alcanza la capacidad máxima para enviar datos.

Al transmitir registros WAL, los servidores de bases de datos transmiten registros WAL en fragmentos para sincronizar los datos. El servidor en espera se conecta a la réplica y recibe los fragmentos de WAL a medida que se envían.

Con la replicación de transmisión, el usuario debe decidir si configurar la replicación asíncrona o síncrona. Cuando la replicación de transmisión se implementa inicialmente, se establecerá de forma predeterminada en la replicación asíncrona.

Esto indica que hay un retraso entre el cambio inicial en el principal y el reflejo de ese cambio en la réplica. La asincronización abre la puerta a una posible pérdida de datos si el maestro falla antes de que se copien los cambios o si la réplica está tan desincronizada con el original que ya descartó los datos pertinentes para realizar los cambios.

La replicación síncrona es una opción mucho más segura porque realiza cambios en tiempo real. La transferencia del maestro a la réplica se considera incompleta hasta que ambos servidores verifiquen la información. Una vez que se confirman los cambios de datos, la transferencia se registra en los WAL de ambos servidores.

Ya sea que use replicación asíncrona o síncrona, las réplicas deben estar conectadas al maestro a través de una conexión de red. Además, es esencial que los usuarios configuren privilegios de acceso para las secuencias WAL de la réplica, de modo que la información no se vea comprometida.

Ventajas de la replicación de transmisión en PostgreSQL

Una de las ventajas más importantes de usar la replicación de transmisión es que la única forma de perder datos es si tanto el servidor principal como el receptor fallan al mismo tiempo. Si está entregando información importante, la replicación de transmisión casi garantiza que se guardará una copia de su trabajo.

Los usuarios pueden conectar más de un servidor en espera al principal y los registros se transmitirán desde el principal a cada uno de los servidores en espera conectados. Si una de las réplicas se retrasa o se desconecta, la transmisión continuará a las otras réplicas.

La configuración del envío de registros a través de la replicación de transmisión no interferirá con nada que el usuario esté ejecutando actualmente en la base de datos principal. Si es necesario apagar el servidor de datos primario, esperará hasta que los registros actualizados se hayan enviado a la réplica antes de apagarse.

Desventajas de la replicación de transmisión en PostgreSQL

La replicación de transmisión no copiará información en una versión o arquitectura diferente, no cambiará la información de los servidores en espera y no ofrece replicación granular.

Especialmente con la replicación de datos de transmisión asincrónica, los archivos WAL más antiguos que aún no se copian en la réplica pueden reciclarse cuando el usuario realiza cambios en el maestro. Para asegurarse de que los archivos vitales no se pierdan, el usuario puede configurar wal_keep_segments en un valor más alto.

Sin las credenciales de autenticación de usuario configuradas para los servidores de réplica, puede ser fácil extraer datos confidenciales. Para que se produzcan actualizaciones en tiempo real entre el maestro y la réplica, el usuario debe cambiar el método de replicación de la replicación asíncrona predeterminada a la replicación síncrona.

Casos de uso para la replicación de transmisión en PostgreSQL

Muchos ingenieros utilizarán la replicación de transmisión para:

  • Crear una copia de seguridad de su base de datos principal en caso de falla del servidor o pérdida de datos
  • Fomentar una solución de alta disponibilidad con el menor retraso de replicación posible
  • Descarga de grandes consultas para aliviar parte del estrés en el sistema principal
  • Distribuir las cargas de trabajo de la base de datos entre varias máquinas, especialmente para formatos de solo lectura

¿Qué nos depara el futuro?

El grupo de desarrollo global de PostgreSQL anunció el lanzamiento de PostgreSQL 14 el 30 de septiembre de 2021. La nueva versión vino cargada de actualizaciones tanto en transmisión como en replicaciones lógicas a través de la plataforma.

Para la replicación de transmisión, la versión 14 permite a los usuarios:

  • Establezca el parámetro del servidor log_recovery_conflict_waits para informar tiempos de espera de conflictos de recuperación prolongados automáticamente
  • Pause la recuperación en un servidor en espera activo cuando modifique los parámetros en un servidor principal (en lugar de apagar el servidor en espera inmediatamente)
  • Usar la función pg_get_wal_replay_pause_state() para informar el estado de recuperación con más detalle
  • Proporcione un parámetro de servidor de solo lectura in_hot_standby
  • Trunca rápidamente tablas pequeñas durante la recuperación en clústeres que tienen una gran cantidad de búferes compartidos
  • Permitir la sincronización del sistema de archivos al inicio de la recuperación de fallas a través de Linux
  • Usar la función pg_xact_commit_timestamp_origin() en una transacción específica para devolver la marca de tiempo de confirmación y el origen de replicación
  • Usar la función pg_last_committed_xact() para agregar el origen de replicación en el registro devuelto
  • Emplee controles de permiso de funciones estándar para modificar las funciones de origen de la replicación (el valor predeterminado aún limita el acceso a los superusuarios)

Para la replicación lógica, la versión 14 permite a los usuarios:

  • Transmita largas transacciones en curso a los suscriptores con la API de replicación lógica
  • Permitir múltiples transacciones durante las replicaciones de tablas
  • Generar subtransacciones de registro WAL inmediatas y asociaciones XID de nivel superior
  • Usar la función pg_create_logical_replication_slot() para mejorar las API de decodificación lógica para confirmaciones de dos fases
  • Agregue mensajes de invalidación de caché a WAL durante la finalización del comando para permitir la transmisión lógica de transacciones en curso
  • Controle qué mensajes de decodificación lógica se envían al flujo de replicación
  • Utilice el modo de transferencia binaria para replicaciones más rápidas
  • Filtrar la decodificación por XID

PostgreSQL ya está trabajando en la versión 15, que se lanzará en el tercer trimestre de 2022. Uno de los problemas relacionados con la replicación que se abordará en la versión más reciente incluye evitar el uso de variables heredadas del entorno del servidor en la replicación de transmisión. Pero a medida que más usuarios se adapten a la versión 14, es probable que PostgreSQL agregue más tareas para mejorar las funciones de replicación.

Una comparación rápida de replicación de PostgreSQL:replicación lógica frente a replicación de transmisión

Replicación lógica Replicación de transmisión
Modelo Editor a suscriptor Maestro a réplica
Replicación transaccional No
Vacíos en la replicación Un conflicto detendrá la replicación Asíncrono:puede provocar un retraso entre la transferencia de datos entre el principal y la réplica; sincrónico:los datos solo se pierden si todos los servidores conectados fallan simultáneamente
Replicación en diferentes plataformas o versiones de PostgreSQL No
Seguridad El acceso a los datos está limitado a los suscriptores Debe configurar las credenciales de acceso para mantener los datos seguros
Tamaño de las replicaciones Mejor para replicaciones granulares Mejor para replicaciones a gran escala
Especialmente útil para Fusión de múltiples sistemas en una base de datos Creación de una base de datos de respaldo

Conclusión

Esperamos que esta guía le resulte útil cuando configure sus funciones de replicación. Si tiene alguna pregunta o hay algo más que le gustaría saber sobre cómo ScaleGrid puede ayudarlo con sus implementaciones de PostgreSQL, comuníquese con uno de nuestros muchos expertos en bases de datos.

¿Interesado en aprender más sobre ScaleGrid?

Para obtener más información sobre cómo ScaleGrid puede ayudarlo a administrar sus bases de datos, comuníquese con nosotros y le mostraremos todo lo que nuestro DBaaS tiene para ofrecer. Obtenga más información sobre cómo ScaleGrid puede permitirle concentrarse más en desarrollar su producto y menos en administrar bases de datos.