CAP theorem: coherencia, disponibilidad y tolerancia a la partición
La computación en la nube ha abierto muchos caminos nuevos en el mundo digital. En particular, la disponibilidad de recursos informáticos en internet permite innovar rápidamente, utilizar los recursos de manera flexible y, por lo tanto, adaptar las consiguientes posibilidades de escalabilidad a las necesidades individuales. No obstante, el teorema CAP demuestra que esta flexibilidad puede poner trabas a otros aspectos. Te explicamos qué hay detrás del teorema CAP (también llamado teorema de Brewer o Brewers theorem) y te presentamos algunos ejemplos de modelos que siguen este teorema sobre los sistemas distribuidos.
Bajo la división Arsys Cloud Solutions, diseñamos Soluciones a tu medida.
¿En qué consiste el teorema CAP?
El teorema CAP (en inglés, CAP theorem) sostiene que no es posible que un sistema distribuido cumpla o garantice a la vez más de dos de las tres propiedades siguientes:
- Consistency (coherencia): todos los clientes ven los mismos datos simultáneamente.
- Availability (disponibilidad): todos los clientes disponen de acceso de lectura y escritura en cualquier momento, ya que el sistema siempre responde.
- Partition tolerance (tolerancia a la partición): el sistema continúa funcionando como un todo incluso cuando los nodos de la red fallan o no se comunican entre sí.
El teorema CAP surgió de una suposición del informático Eric Brewer, que la mencionó durante su conferencia en el Simposio sobre Principios de Computación Distribuida (PODC, por sus siglas en inglés) en el año 2000. Por ello, esta propuesta sobre las limitaciones de las características de los sistemas distribuidos también se conoce como teorema de Brewer o Brewers theorem. En 2002, Seth Gilbert y Nancy Lynch, del MIT, demostraron su validez con evidencia axiomática, estableciéndola como teorema.
Actualmente, a la hora de diseñar un nuevo sistema distribuido se sigue este teorema y se elige un modelo básico concreto que presenta dos de las tres propiedades. De esta manera, la conexión de varios ordenadores independientes en un solo sistema de red puede clasificarse en las siguientes tres categorías, de acuerdo con el teorema CAP:
- Sistema CP (coherencia y tolerancia a la partición)
- Sistema AP (disponibilidad y tolerancia a la partición)
- Sistema CA (coherencia y disponibilidad)
El teorema CAP en la práctica
Para que los principios del teorema CAP te queden un poco más claros, te presentamos algunos ejemplos de sistemas distribuidos que demuestran su validez. En cada caso también resaltamos de qué manera se aplica el teorema de Brewer.
Ejemplo de sistema AP: sistema de nombres de dominio
Un ejemplo bien conocido de sistema AP es el DNS (del inglés domain name system o sistema de nombres de dominio). Este componente de red central se encarga de asociar los nombres de dominio a las direcciones IP correspondientes y se basa en las propiedades de disponibilidad y tolerancia a la partición. Gracias a la gran cantidad de servidores que existen, el sistema está disponible casi sin excepción: si falla un servidor DNS, el siguiente se hace cargo. No obstante, de acuerdo con el teorema CAP, el DNS no ofrece coherencia: si se modifica un registro en el DNS, pueden pasar incluso varios días hasta que el cambio se transmita a toda la jerarquía del sistema y todos los clientes puedan verlo.
Ejemplo de sistema CA: sistemas de gestión de bases de datos relacionales
Los sistemas de gestión de bases de datos que siguen el modelo de base de datos relacional son un buen ejemplo de sistema CA. Estos sistemas se caracterizan sobre todo por su gran coherencia y por ofrecer la máxima disponibilidad posible. Sin embargo, hay que tener en cuenta que, en caso de conflicto, la disponibilidad puede disminuir en favor de la coherencia. En este caso, la seguridad en términos de partición tiene un papel secundario.
Ejemplo de sistema CP: aplicaciones financieras o bancarias
La disponibilidad es una de las propiedades más importantes de la mayoría de los sistemas distribuidos, por lo que los sistemas CP son poco habituales en la práctica. No obstante, estos sistemas demuestran ser muy útiles en ámbitos como el de las finanzas: las aplicaciones bancarias, que deben cargar y transferir dinero de manera fiable, dependen de la coherencia y la seguridad de partición para descartar cualquier posibilidad de efectuar anotaciones incorrectas, incluso si se interrumpe el tráfico de datos.