Si queremos entender las garantías de diseño que ofrecen las bases de datos deberemos estudiar el teorema CAP. Este teorema nos ayudará a clasificar los sistemas distribuidos y las bases de datos para tomar mejores decisiones al elegir la solución que mejor se adapta a nuestro problema.
Contenidos
¿Qué es el Teorema CAP?
El teorema CAP o Conjetura de Brewer formulado en el año 2000 describe tres características que puede tener cualquier sistema distribuido como las bases de datos:
- Consistencia (C): Es la capacidad del sistema que garantiza devolver el último valor que ha sido escrito a cualquier operación de lectura. Por ejemplo, si actualizamos un registro con valor 2 a valor 3, las bases de datos y sistemas consistentes deberán devolver a todos los lectores el nuevo valor 3 a partir de ese momento. Cualquier otro resultado es considerado como una violación de la consistencia.
- Disponibilidad (A): Capacidad del sistema de garantizar el procesamiento de cualquier operación de lectura sin producir ningún error.
- Tolerancia a la partición (P): Capacidad del sistema de garantizar su funcionamiento en caso de partición de la red o incomunicación entre sus nodos. Para ello, el retraso o la pérdida de mensajes de comunicación no deberán impedir que el sistema funcione y responda a las peticiones.El sistema es tolerante a las particiones si los mensajes que se pierden o se retrasan no impiden su funcionamiento.
El teorema usa estas definiciones para afirmar que no es posible ofrecer las tres garantías de forma simultánea. O lo que es lo mismo, en cada instante se debe sacrificar alguna de ellas para garantizar las otras dos.
Como aplicación práctica, todos los sistemas distribuidos como las bases de datos sufren fallos e interrupciones de red y es necesario que sigan funcionando. Por esta razón, los sistemas deben elegir entre ser consistentes o disponibles y balancear estas dos garantías.
Si un sistema favorece la consistencia frente a la disponibilidad en el caso de una partición de red, será CP, mientras que si favorece la disponibilidad en este caso será AP. Los sistemas ACID como las bases de datos relacionales, eligen la consistencia sobre disponibilidad, mientras que los sistemas BASE eligen la disponibilidad.
Ejemplos de sistemas CP
Los sistemas CP pasarán a un estado de indisponibilidad en el caso de sufrir una caída de red. Cuando un cliente pida realizar una lectura de un valor, no devolverá ninguno y mostrará un error de no disponible.
Ejemplos de sistemas AP
Los sistemas AP en el ejemplo anterior podrán devolver algún valor que consideren el más reciente. El cliente debe asumir que el sistema no garantiza la consistencia y por tanto actuar en consecuencia, sin asumir que este valor es consistente con la última escritura.
Del Teorema CAP a PACELC
Las críticas al teorema CAP explican que además de los factores anteriores, se debe tener en cuenta la latencia. Si un sistema sufre una partición en la red, debemos valorar cómo compensar la disponibilidad y consistencia, pero en el caso de que no exista esta partición, lo que deberemos analizar es la latencia frente a la consistencia.
Esta extensión del teorema CAP se denomina PACELC y puede aplicarse a numerosos sistemas distribuidos como bases de datos actuales. Cuando estos sistemas eligen garantizar la disponibilidad en el caso de partición de red, también la suelen garantizar en el caso de partición.
Cassandra y DynamoDB son ejemplos de PA/EL: En el caso de partición de red eligen disponibilidad. En el caso de que no exista partición de red eligen una menor latencia frente a la consistencia.
Las bases de datos ACID son PC/EC. En todo caso garantizan la consistencia frente a disponibilidad y latencia.
Curso Introducción a Bases de Datos NoSQL
Este curso de Coursera está impartido por IBM. Explica los conceptos técnicos de bases de datos NoSQL desde cero. También aprenderás sobre las 4 categorías de bases de datos SQL y sus características y ejemplos. Por último, te explicará nociones de herramientas de administración para realizar consultas, replicación, índices, particionado y permisos.
Preguntas Frecuentes – FAQ
¿Por qué es imposible garantizar Consistencia, Disponibilidad y Tolerancia a Particiones al mismo tiempo en un sistema distribuido?
Es imposible garantizar simultáneamente Consistencia, Disponibilidad y Tolerancia a Particiones debido a las limitaciones de la comunicación y sincronización en sistemas distribuidos. Cuando ocurre una partición, los nodos aislados deben elegir entre responder solicitudes (Disponibilidad) y arriesgar la inconsistencia, o rechazar solicitudes hasta que se resuelva la partición para mantener la Consistencia. Este dilema forzado por la presencia de particiones hace que no sea posible satisfacer las tres propiedades simultáneamente.
¿Qué es un sistema CA y por qué es raro en sistemas distribuidos?
Un sistema CA (Consistencia y Disponibilidad) prioriza la consistencia y disponibilidad de los datos, a expensas de la tolerancia a particiones. Sin embargo, este tipo de sistema es raro en entornos distribuidos porque no puede manejar eficientemente las particiones de red, lo que significa que puede fallar o comportarse de manera impredecible cuando ocurre una partición. Los sistemas CA son más comunes en entornos centralizados donde las particiones de red no son una preocupación.
¿Cómo puede un sistema distribuido manejar las limitaciones impuestas por el teorema CAP?
Los diseñadores de sistemas pueden implementar estrategias como la consistencia eventual, donde el sistema garantiza que, dado suficiente tiempo, todos los nodos convergerán hacia el mismo estado, permitiendo cierta flexibilidad en la consistencia temporal. También pueden usar técnicas de replicación y reconciliación de datos para minimizar los efectos de las particiones de red, y diseñar mecanismos de fallback y recuperación para mantener la disponibilidad y consistencia dentro de lo posible.