Tabla de contenido
PalancaPrefacio
A medida que aumente la cantidad de datos y aumente el tráfico de lectura y escritura de la base de datos, comenzarán a aparecer los cuellos de botella comunes de las bases de datos tradicionales. La replicación de datos es un método eficaz para resolver cuellos de botella y mejorar el rendimiento, la escalabilidad y la disponibilidad de la base de datos mediante la replicación de datos en múltiples nodos. Este artículo presentará los tres modelos principales de replicación de datos: replicación maestro-esclavo (replicación de un solo líder), replicación de múltiples líderes (replicación de múltiples líderes) y replicación punto a punto (replicación sin líder), y analizará sus ventajas y desventajas.
Los lectores que no estén familiarizados con los conocimientos básicos de bases de datos pueden consultar este artículo. Introducción a los conceptos básicos de bases de datos: diseño de sistemas 08. Los lectores que no estén familiarizados con la escalabilidad y la usabilidad también pueden consultar este artículo. Características no funcionales del diseño de software – Diseño de sistemas 03.
Copia de datos (Datos Replicación)
La replicación de datos es una tecnología que mantiene copias de datos en múltiples nodos, principalmente para lograr los siguientes propósitos:
- Rendimiento mejorado: al distribuir los datos entre varios nodos, puede mejorar el rendimiento de lectura y escritura de la base de datos.
- Escalabilidad mejorada: a medida que crece la cantidad de datos, la base de datos se puede ampliar agregando más nodos.
- Disponibilidad mejorada: si un nodo falla, otros nodos aún pueden proporcionar servicios de datos.
La replicación de datos se utiliza en muchas aplicaciones, como por ejemplo:
- Procesamiento de transacciones en línea (OLTP): en los sistemas OLTP, la replicación de datos se puede utilizar para mejorar el rendimiento y la disponibilidad de la base de datos para satisfacer las necesidades de lectura y escritura de alta concurrencia (alta concurrencia).
- Recuperación ante desastres: en un desastre sin previo aviso, la replicación de datos se puede utilizar para copiar datos a una copia de seguridad externa para evitar la pérdida de datos.
clon(Replicación)
La replicación se refiere a conservar múltiples copias de seguridad de datos en cada nodo, y preferiblemente en nodos geográficamente diferentes, como copias de seguridad de bases de datos en diferentes países. Estos datos se replican para lograr disponibilidad, escalabilidad y rendimiento.
Los lectores pueden pensar en un escenario si hoy, en el caso de una sola base de datos, cuando la base de datos se daña, todo el sistema se vería afectado. Por el contrario, si hay varias copias de datos copiados en diferentes bases de datos, incluso si una base de datos está dañada, no afectará a todo el sistema.
Sin embargo, las anteriores son todas las ventajas de la replicación de datos, pero la replicación de datos también trae complejidad. El siguiente es un ejemplo simple de complejidad que di:
- ¿Cómo mantener varios datos coherentes entre sí?
- ¿Debería utilizar replicación sincrónica o asincrónica?
- ¿Cómo manejar escrituras simultáneas?
Este artículo entrará en detalles sobre la replicación de datos, comenzando con una explicación de la replicación sincrónica y asincrónica.
Replicación síncrona versus asíncrona
Si se va a implementar la replicación, se dividirá en los dos tipos siguientes: replicación sincrónica y replicación asincrónica.
¿Cuáles son las principales diferencias entre los dos?
En la replicación síncrona, el nodo principal (nodo líder) espera una solicitud de confirmación del nodo secundario (nodo seguidor) para actualizar los datos. Cuando el nodo maestro reciba la confirmación de todos los nodos secundarios, informará una confirmación exitosa al cliente (lado del cliente). En la replicación asincrónica, el nodo primario no espera la confirmación del nodo secundario, sino que actualiza directamente los datos e informa el éxito al cliente.
Pros y contras sincrónicos Pros y contras sincrónicos
La ventaja de la replicación sincrónica es que todos los nodos secundarios (nodo seguidor) están completamente sincronizados con el nodo principal (nodo líder). Sin embargo, las ventajas a menudo conllevan desventajas. Si el nodo secundario (nodo seguidor) no confirma debido a una falla u otras razones, el nodo maestro no podrá responder al usuario hasta que se reciba una confirmación exitosa. Por lo tanto, tales deficiencias conducirán a una alta latencia (alta latencia) en la respuesta del nodo maestro al cliente.
Pros y contras asincrónicos
La ventaja de la replicación asincrónica es que incluso si todos los nodos secundarios (nodo seguidor) están inactivos, el nodo principal (nodo líder) puede continuar funcionando. La desventaja inversa es que si el nodo principal falla, se perderán las escrituras que no se replican en el nodo secundario.
Aquí hay una ilustración de la biblia de bases de datos Diseño de aplicaciones con uso intensivo de datos, en la que el líder es el nodo principal y el seguidor es el nodo auxiliar.
Modelos de replicación de datos
A continuación compararé las ventajas y desventajas de los modelos copiados de las siguientes bases de datos:
Líder único/Replicación primaria-secundaria
En la replicación maestro-esclavo, un nodo se designa como nodo maestro. El nodo principal maneja las escrituras y envía todas las escrituras a los nodos secundarios y las mantiene sincronizadas.
La replicación maestro-esclavo es muy adecuada cuando la carga de lectura es grande, por ejemplo: Youtube tiene miles de personas que necesitan ver videos en cualquier momento, pero en comparación con ver videos, la cantidad de videos cargados no es muy grande, por lo que maestro- replicación esclava El modelo es muy adecuado para situaciones como esta. También podemos utilizar este modelo para ampliar la base de datos a medida que aumenta el número de usuarios y mejorar la escalabilidad del sistema. Por supuesto, también puede haber cuellos de botella si los datos se replican en muchos nodos secundarios. Finalmente, si nuestra carga de escritura es pesada, la replicación maestro-esclavo no es apropiada.
Otra ventaja de la replicación maestro-esclavo es que es resistente a la lectura, por ejemplo: en caso de falla del nodo primario, el nodo secundario aún puede manejar solicitudes de lectura, por lo que es una buena opción para sistemas con grandes volúmenes de lectura. Una buena solución para el modelo de base de datos.
Además, si utilizamos la replicación asincrónica, provocará el problema de la replicación de datos inconsistente. Puede imaginar una situación en la que, si el nodo principal falla y no puede entregar datos actualizados al nodo secundario, los datos leídos de diferentes bases de datos pueden mostrar datos inconsistentes. Por lo tanto, si el nodo principal falla, cualquier actualización de replicación de datos puede perderse si el nodo secundario aún no las ha recibido ni respondido.
Métodos de replicación primaria-secundaria.
La replicación maestro-esclavo se puede implementar de muchas maneras diferentes:
Replicación basada en declaraciones
La replicación basada en declaraciones se denominará (SBR) en lo sucesivo, porque realmente no puedo encontrar una traducción para el chino tradicional. SBR es el método utilizado en la base de datos MySQL. En esta implementación, el nodo maestro puede ejecutar INSERTAR, ACTUALIZAR, ELIMINAR, etc. sintaxis SQL y luego escribir estas sintaxis en el archivo de registro. A continuación, los archivos de registro se envían al nodo secundario para su ejecución.
Aunque SBR puede resolver el problema de copiar datos del nodo primario al nodo secundario, en realidad tiene desventajas. Por ejemplo, el uso de una función no determinista puede provocar que las escrituras en los nodos primario y secundario sean diferentes.
¿Qué es una función no determinista? Por ejemplo: NOW () obtiene la hora actual, RAND () obtiene un número aleatorio, todas son funciones inciertas y se obtendrán resultados diferentes cada vez que se ejecute la función.
registro de escritura anticipada (Registro de escritura anticipada)
El registro de escritura anticipada se denominará (WAL) a continuación. WAL es la tecnología de replicación de datos utilizada en PostgreSQL y Oracle. En WAL, cuando ocurre una transacción, inicialmente se registra en un archivo de registro de transacciones, que luego se escribe en la base de datos. A continuación, la operación de registro se realiza en la base de datos primaria y luego se transfiere al nodo secundario para su ejecución.
A diferencia de SBR, WAL procesa registros de transacciones en lugar de sintaxis SQL. Esto tiene la ventaja de garantizar la coherencia cuando se encuentran funciones no deterministas. Además, WAL escribe datos directamente en el disco para facilitar la recuperación en caso de falla.
Por ejemplo: al realizar operaciones como ACTUALIZAR en PostgreSQL, primero escribirá el archivo de registro de transacciones y el disco antes de procesar la base de datos. El registro de transacciones contiene el ID de la transacción, el tipo de datos y la tabla afectada, y luego los cambios se copian en el nodo auxiliar.
Por supuesto, existen ventajas y desventajas. La desventaja de WAL es que está estrechamente relacionado con la estructura interna de la base de datos. Si el nodo primario y el nodo secundario necesitan actualizar el software, será complicado.
copia lógica (Replicación lógica)
copia lógica (Replicación lógica) Algunas personas también lo llaman replicación basada en filas (Row-Based). Este método se utiliza en varias bases de datos relacionales, incluidas PostgreSQL y MySQL. En este método, las operaciones y modificaciones realizadas en la base de datos se registran y luego se copian al nodo secundario.
Por ejemplo, cuando se realiza una operación como INSERTAR o ACTUALIZAR, toda la Fila afectada se recupera en el nodo principal, que contiene todos los valores de columna para la Fila especificada. Luego, los cambios recuperados se ejecutan en el nodo secundario para garantizar que los datos sean coherentes con los datos del nodo principal.
Replicación de múltiples líderes
Después de presentar la replicación maestro-esclavo anteriormente, también debería encontrar que la replicación maestro-esclavo que utiliza la replicación asincrónica tiene un defecto fatal. Cuando solo hay un nodo maestro, todas las operaciones de escritura deben pasar por él, lo que dificulta enormemente su rendimiento. Si el nodo principal falla, es posible que el nodo secundario no actualice la base de datos.
La replicación de múltiples líderes es otro modelo que se puede utilizar para resolver el problema de sistemas de alta concurrencia. Replicación de múltiples líderes, como sugiere el nombre, hay múltiples nodos primarios que manejan las escrituras y las envían a otros nodos primarios y secundarios para su replicación.
Este modelo de replicación es muy ventajoso para sistemas que pueden continuar operando sin conexión. También podemos utilizar este modelo cuando mantenemos y operamos múltiples centros de datos, de modo que cada centro de datos tenga un nodo maestro.
conflicto
La replicación de múltiples líderes proporciona mejor rendimiento y escalabilidad que la replicación de un solo líder, pero este modelo también tiene un inconveniente. Debido a que todos los nodos maestros pueden procesar solicitudes de escritura al mismo tiempo, pueden modificar los mismos datos. Esta situación se denomina conflicto.
Por ejemplo: supongamos que dos usuarios editan el mismo campo de datos al mismo tiempo. En este caso, no tenemos forma de saber la exactitud de los datos finales sin un procesamiento adicional de la situación. A continuación se muestran algunas formas comunes de manejar los conflictos:
evitar conflictos
Una idea muy simple: si vamos a abordar un conflicto, debemos evitar que suceda en primer lugar. Si el sistema puede garantizar que todas las escrituras en un registro específico pasen por el mismo nodo maestro, no habrá problemas de conflicto. Podemos dirigir las solicitudes de los clientes al mismo centro de datos, de modo que dos usuarios en diferentes centros de datos no modifiquen el mismo documento.
Sin embargo, si el usuario se muda a una ubicación diferente y ahora se encuentra cerca de un centro de datos diferente, aún se producirá un conflicto. Si esto sucede, debemos reprocesar el tráfico solicitado. En este caso, el método para evitar conflictos falla y da como resultado escrituras simultáneas.
La última escritura gana
Todos los nodos utilizan la hora local del nodo para asignar una marca de tiempo (Timestamp) a cada actualización. Cuando ocurre un conflicto, se selecciona la última marca de tiempo para actualizar. Sin embargo, este método también tiene puntos ciegos, porque en un sistema descentralizado, el tiempo entre nodos puede ser diferente y será difícil lograr la sincronización horaria. Además, debido a que los tiempos pueden ser diferentes, la desviación horaria puede provocar la pérdida de datos.
Topología de replicación de múltiples líderes (Topología)
Las siguientes son topologías para la replicación de múltiples líderes, que incluyen: topología en anillo, topología en estrella, topología todo a todos, etc. La más común es la topología todo-a-todo. En las topologías de estrella y círculo existen desventajas similares y si uno de los nodos falla, puede afectar a todo el sistema. Esta es la razón por la cual todo-a-todo es la topología más utilizada.
Replicación punto a punto/sin líder
En la replicación maestro-esclavo, si ocurre un problema en el nodo maestro, provocará una falla en la base de datos. Además de la replicación de múltiples líderes, existe otro modelo, la replicación de igual a igual, que también puede ayudar al sistema y la base de datos a lograr escalabilidad de lectura, pero no puede proporcionar escalabilidad de escritura. En otras palabras, se puede proporcionar escalabilidad para lecturas de alto tráfico.
El modelo de replicación punto a punto resuelve estos problemas mediante nodos no primarios. Todos los nodos tienen el mismo peso y pueden aceptar solicitudes de lectura y escritura. Cassandra utiliza este modelo de replicación de bases de datos.
Al igual que la replicación maestro-esclavo, este tipo de replicación también puede crear inconsistencias porque cuando varios nodos aceptan solicitudes de escritura, pueden producirse escrituras simultáneas.
Conclusión
La replicación de bases de datos es un método eficaz para resolver los cuellos de botella de las bases de datos y puede mejorar el rendimiento, la escalabilidad y la disponibilidad de la base de datos. Sin embargo, los diferentes modelos de replicación tienen diferentes ventajas y desventajas, por lo que al elegir un modelo de replicación, es necesario sopesar las ventajas y desventajas en función de sus necesidades específicas. Los lectores a los que les guste el contenido de diseño de sistemas pueden consultar otros artículos relacionados.
Artículos relacionados
Introducción a los conceptos básicos de bases de datos: diseño de sistemas 08
Explicación del equilibrador de carga: diseño del sistema 07
¿Qué es DNS? Introducción al sistema de nombres de dominio – Diseño del sistema 06
Introducción al bloque de construcción de componentes de diseño de sistemas: diseño de sistemas 05
Cálculo del reverso del sobre: diseño del sistema 04
Características no funcionales del diseño de software – Diseño de sistemas 03
Aplicación de la abstracción en el diseño de sistemas – Diseño de sistemas 02
Introducción al diseño de sistemas modernos – Diseño de sistemas 01
Cita
Diseño de aplicaciones con uso intensivo de datos
¿Qué es la replicación de bases de datos?