Teorema de CAP

menu icon

Teorema de CAP

En esta guía, examinamos el teorema de CAP y su relevancia a la hora de diseñar aplicaciones distribuidas y elegir un almacén de datos relacional o NoSQL.

¿Qué es el teorema de CAP?

¿Ha visto alguna vez un anuncio de un jardinero, un pintor u otro profesional que empiece por el titular "Bueno, rápido y barato: elija dos"?

El teorema de CAP aplica un tipo de lógica similar a los sistemas distribuidos, es decir, que un sistema distribuido puede entregar sólo dos de tres características deseadas: coherencia, disponibilidad y tolerancia a la partición (CAP, en inglés).

Un sistema distribuido es una red que almacena datos en más de un nodo (físico o máquinas virtuales) al mismo tiempo. Como todas las aplicaciones de cloud son sistemas distribuidos, es fundamental entender el teorema de CAP al diseñar una aplicación de cloud, para que pueda elegir un sistema de gestión de datos que ofrezca las características que más necesita la aplicación.

El teorema de CAP también se denomina Teorema de Brewer, porque fue desarrollado primero por el profesor Eric A. Brewer durante una charla que dio sobre sistemas distribuidos en 2000. Dos años más tarde, los profesores de MIT Seth Gilbert y Nancy Lynch publicaron una prueba de la "Conjetura de Brewer".

Explicación de ‘CAP’ en el teorema de CAP

Vamos a ver detalladamente las tres características del sistema distribuido a las que hace referencia el teorema de CAP.

Coherencia

La coherencia significa que todos los clientes ven los mismos datos al mismo tiempo, independientemente del nodo al que se conecten. Para que esto suceda, siempre que se escriban datos en un nodo, se debe reenviar o replicar al instante en los demás nodos del sistema antes de que la escritura se considere 'satisfactoria'.

Disponibilidad

Disponibilidad significa que cualquier cliente que realiza una solicitud de datos obtiene una respuesta, aunque uno o varios nodos estén inactivos. Otra forma de describirlo: todos los nodos de trabajo del sistema distribuido devuelven una respuesta válida para cualquier solicitud, sin excepción.

Tolerancia a las particiones

Una partición es una interrupción de la comunicación dentro de un sistema distribuido: una conexión perdida o temporalmente retardada entre dos nodos. La tolerancia a las particiones significa que el clúster debe continuar trabajando a pesar de las interrupciones de comunicación que se produzcan entre los nodos del sistema.

Tipos de base de datos NoSQL del teorema de CAP

Las bases de datos NoSQL (no relacionales) son ideales para las aplicaciones de red distribuidas. A diferencia de sus equivalentes SQL (relacionales) verticalmente escalables, las bases de datos NoSQL son horizontalmente escalables y están distribuidas por diseño: pueden escalarse rápidamente en una red creciente formada por múltiples nodos interconectados. (Consulte "Bases de datos SQL o NoSQL: ¿cuál es la diferencia?" para obtener más información).

Actualmente, las bases de datos NoSQL se clasifican en función de las dos características de CAP a las que dan soporte:

  • Base de datos CP: una base de datos CP ofrece coherencia y tolerancia a las particiones a expensas de la disponibilidad. Cuando se produce una partición entre dos nodos, el sistema tiene que cerrar el nodo no coherente (es decir, hacer que no esté disponible) hasta que se resuelva la partición.
  • Base de datos AP: una base de datos AP ofrece disponibilidad y tolerancia a las particiones a expensas de la coherencia. Cuando se produce una partición, todos los nodos permanecen disponibles, pero los que están en el extremo incorrecto de una partición pueden devolver una versión de los datos más antigua que los otros. (Cuando se resuelve la partición, las bases de datos AP suelen resincronizar los nodos para reparar todas las incoherencias del sistema).
  • Base de datos CA: una base de datos CA ofrece coherencia y disponibilidad en todos los nodos. Sin embargo, no podrá hacerlo si hay una partición entre dos nodos en el sistema; por lo tanto, no puede ofrecer tolerancia a errores.

Listamos este tipo por una razón: en un sistema distribuido, las particiones no se pueden evitar. Por lo tanto, aunque podemos analizar una base de datos CA distribuida en teoría, a efectos prácticos, una base de datos CA distribuida no puede existir. Sin embargo, esto no significa que no pueda tener una base de datos CA para su aplicación distribuida, si necesita una. Muchas bases datos relacionales, como PostgreSQL, proporcionan coherencia y disponibilidad y se pueden desplegar en varios nodos utilizando la réplica.

MongoDB y el teorema de CAP (CP)

MongoDB es un popular sistema de gestión de bases de datos NoSQL que almacena datos como documentos BSON (JSON binario). Se utiliza con frecuencia para aplicaciones de big data y en tiempo real que se ejecutan en varias ubicaciones diferentes. En relación con el teorema de CAP, MongoDB es un almacén de datos de CP: resuelve las particiones de red manteniendo la coherencia a expensas de la disponibilidad.

MongoDB es un sistemamaestro individual donde cada conjunto de réplicas (enlace externo a IBM) solo puede tener un nodo primario que reciba todas las operaciones de escritura. Los demás nodos del mismo conjunto de réplicas son nodos secundarios que replican el registro de operaciones del nodo primario y lo aplican a su propio conjunto de datos. De forma predeterminada, los clientes también leen en el nodo primario, pero también pueden especificar una preferencia de lectura (enlace externo a IBM) que les permite leer en nodos secundarios.

Cuando el nodo primario deja de estar disponible, el nodo secundario con el registro de operaciones más reciente se elegirá como el nuevo nodo primario. Una vez que los demás nodos secundarios se actualizan con el nuevo maestro, el clúster vuelve a estar disponible. Como los clientes no pueden realizar solicitudes de escritura en este intervalo, los datos permanecen coherentes en toda la red.

Cassandra y el teorema de CAP (AP)

Apache Cassandra es una base de datos NoSQL de código abierto mantenida por Apache Software Foundation. Es una base de datos de columna amplia que permite almacenar datos en una red distribuida. Sin embargo, a diferencia de MongoDB, Cassandra tiene una arquitectura sin nodo maestro y, como resultado, tiene múltiples puntos de error, en lugar de uno solo.

En relación con el teorema de CAP, Cassandra es una base de datos de AP: ofrece disponibilidad y tolerancia a las particiones, pero no puede garantizar la consistencia todo el tiempo. Puesto que Cassandra no tiene un nodo maestro, todos los nodos deben estar disponibles continuamente. No obstante, Cassandra proporciona coherencia final al permitir a los clientes escribir en cualquier nodo en cualquier momento y reconciliar las incoherencias lo antes posible.

Como los datos solo son incoherentes en el caso de una partición de red y las incoherencias se resuelven rápidamente, Cassandra ofrece una funcionalidad de "reparación" (enlace externo a IBM) para ayudar a los nodos a actualizarse con sus homólogos. Sin embargo, la disponibilidad constante da como resultado un sistema de gran rendimiento que podría compensar en muchos casos.

Trabajar con microservicios

Los microservicios son componentes de aplicación desplegables independientemente y de acoplamiento ligero que incorporan su propia pila, incluyendo su propia base de datos y su propio modelo de base de datos, y se comunican entre sí a través de una red. Como puede ejecutar microservicios en los servidores de cloud y en los centros de datos locales, se han vuelto muy populares para las aplicaciones híbridas y multicloud.

Comprender el teorema de CAP le ayudará a elegir la mejor base de datos cuando diseñe una aplicación basada en microservicios que se ejecuta en varias ubicaciones. Por ejemplo, si la capacidad de iterar rápidamente el modelo de datos y la escala horizontalmente es fundamental para la aplicación, pero puede tolerar una coherencia eventual (en lugar de estricta), una base de datos AP como Cassandra o Apache CouchDB puede satisfacer sus requisitos y simplificar el despliegue. Por otro lado, si la aplicación depende en gran medida de la coherencia de los datos, como ocurre en una aplicación de eCommerce o un servicio de pago, puede optar por una base de datos relacional como PostgreSQL.

Teorema de CAP e IBM Cloud

IBM ofrece un espectro completo de servicios de base de datos totalmente gestionadas. Además de los sistemas de gestión de bases de datos relacionales, también puede ejecutar MongoDB, Cloudant (otro almacén de datos distribuidos de AP), Elasticsearch, etcd y otras soluciones de base de datos en IBM Cloud.

Para consultar nuestra selección de base de datos completa (sin compromiso alguno), inscríbase para obtener un ID de IBM y cree su cuenta de IBM Cloud.