Sistemas distribuidos – ¿Conoces que es el Teorema CAP?

Teorema CAP
Teorema CAP

Artículos relacionados

El teorema CAP, también conocido como el teorema de Brewer, fue introducido por Eric Brewer en el año 2000. Este teorema describe el comportamiento y la definición de un sistema distribuido. Esta definición indica que un sistema distribuido es un grupo de nodos conectados que comparten información entre sí. También señala que un cliente para escribir un dato en un sistema distribuido puede interactuar con cualquiera de sus nodos y para leer un dato puede interactuar con el mismo nodo o con uno diferente.

Sistemas distribuidos
Sistemas distribuidos

Este teorema indica que para un par de peticiones, una de escritura seguida por una de lectura, un sistema distribuido solo puede garantizar el cumplimiento de dos de los siguientes atributos y debe sacrificar uno:

  • Consistency (Consistencia): Todos los nodos ven los mismos datos al mismo tiempo, garantiza que no se devuelva data desactualizada.
Sistemas distribuidos - Consistency
Sistemas distribuidos – Consistency
  • Availability (Accesibilidad): Si un nodo se encuentra abajo, el sistema tiene que responder a las peticiones enviadas. Un nodo activo debe devolver una respuesta razonable en un monto de tiempo razonable (sin errores o timeout).
Sistemas distribuidos - Availability
Sistemas distribuidos – Availability
  • Partition tolerance (Tolerancia al particionado): Un sistema debe seguir funcionando aun cuando los nodos no se puedan comunicar entre sí (temporal o permanentemente).
Sistemas distribuidos - Partition tolerance
Sistemas distribuidos – Partition tolerance

Como ven el nombre del teorema CAP está formado por la primera letra de cada atributo: Consistency, Availability y Partition tolerance. Este teorema indica que un sistema distribuido solo se puede garantizar al mismo tiempo el cumplimiento de dos atributos en cualquier momento, pero no las tres.

Escenarios

Un cliente escribe datos en el nodo A y los lee desde el nodo B. Para lograr esto tenemos dos opciones:

  • Los datos se replican desde el nodo A al nodo B.
  • El nodo B los recupera desde el nodo A.
Escenario 1:

Si la red está operativa entonces la comunicación entre el nodo A y el nodo B debe ocurrir sin problemas, por lo tanto el sistema se comportara accesible y consistente, no tiene la necesidad de ser tolerante a particiones.

Accesible y consistente
Accesible y consistente
Escenario 2:

Si existe una falla en la red entonces el nodo B no puede recuperar la información del nodo A, esto ocasiona que el nodo B devuelva datos desactualizados. En este caso el sistema no es consistente.

Accesible pero no consistente
Accesible pero no consistente
Escenario 3:

Si existe una falla en la red entonces el  nodo A trata de conectarse al nodo B sin éxito, esto ocasiona que ocurra un error de timeout o que no se responda la petición en un monto de tiempo razonable. En este caso el sistema no es accesible.

Consistente y no accesible
Consistente y no accesible

Recomendaciones

Como menciona el teorema CAP solo podemos cumplir 2 de estos 3 atributos, así que según el escenario debemos decidir que atributos necesitamos garantizar. Debemos tener en cuenta que en la computación distribuida la red nunca es confiable las caídas de red ocurren siempre y no las podemos controlar, por lo tanto nos queda escoger entre mantener la consistencia o la accesibilidad

Consistency/Partition Tolerance sobre Availability

Aplica cuando el requerimiento necesita que se hagan lecturas y escrituras atómicas se puede devolver un error para informar que no se pudo procesar la petición.

Availability/Partition Tolerance sobre Consistency

Aplica cuando el requerimiento permita flexibilidad con respecto al sistema a sincronizar. También se puede aplicar esto cunado el sistema necesite seguir funcionando, por ejemplo un carrito de compras, aun si ocurren errores externos.

Conclusión

El teorema CAP define el comportamiento y la definición de un sistema distribuido. Además, indica que un sistema distribuido solo puede cumplir 2 de estas 3 características: Consistency, Availability o Partition tolerance, así que según el escenario debemos decidir que atributos necesitamos garantizar. Debemos tener en mente que al trabajar con sistemas distribuidos la red nunca es confiable, por lo tanto solo nos queda en asegurar la consistencia o la accesibilidad.

Referencias:
Metal Tip:

Este artículo lo escribí escuchando la canción Fire Upon the blade de la banda Hollenton de Austria, les comparto el enlace.

Happy coding and Stay Heavy lml

Anuncios

2 comentarios en “Sistemas distribuidos – ¿Conoces que es el Teorema CAP?

  1. Dos de las características (Consistencia y Tolerancia al particionado) de un sistema distribuido es posible asegurar desde su creación y podríamos atribuir dichas características al sistemas; sin embargo es complicado asegurar la “Accesibilidad” en los sistemas distribuidos debido a que no tenemos el control sobre las redes. ¿Entonces, es correcto decir que un sistema distribuido solo se puede atribuir las característica : Consistencia y Tolerancia al particionado, osea 2 de 2 y no 2 de 3? Debido a que la accesibilidad no solo depende del sistema distribuido.

    Le gusta a 1 persona

    1. Hola Alex, lo que podemos asegurar en nuestro sistema es la accesibilidad o la consistencia, ya que los problemas de red son algo que siempre van a ocurrir y esta fuera de nuestro alcance evitarlo, pero si podemos reducir su impacto. Saludos

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s