Teorema CAP: disponibilidad y tolerancia de partición


207

Si bien trato de entender la "Disponibilidad" (A) y la "Tolerancia de partición" (P) en CAP, me resultó difícil entender las explicaciones de varios artículos.

Tengo la sensación de que A y P pueden ir juntas (sé que este no es el caso, ¡y es por eso que no lo entiendo!).

Explicando en términos simples, ¿cuáles son A y P y la diferencia entre ellos?


1
Aquí hay un artículo que explica CAP en inglés simple ksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha

2
no vayas por las respuestas preparadas. Lea, visualice y comprenda cada C, A, P por separado. Diseñe una arquitectura de clúster distribuido (quizás 3 DB) y ahora aplique su comprensión. Vea lo que le sucede a C, A, P cuando ocurren fallas de los distribuidos (DB). Una vez que comprenda, busque respuestas y aplique con su lógica. Recuerde: incluso si comprende, puede que no esté claro. entonces, piense y aplique su comprensión. Gracias
Doncella

1
De alguna manera, el enlace ksat.me anterior va a la url 404 porque termina con '/'. ksat.me/a-plain-english-introduction-to-cap-theorem Esto funciona bien y es una explicación muy detallada de cada una de 'C', 'A', 'P'
vivek.m

Respuestas:


402

La coherencia significa que los datos son los mismos en todo el clúster, por lo que puede leer o escribir desde / hacia cualquier nodo y obtener los mismos datos.

Disponibilidad significa la capacidad de acceder al clúster incluso si un nodo en el clúster se cae.

La tolerancia de partición significa que el clúster continúa funcionando incluso si hay una "partición" (interrupción de comunicación) entre dos nodos (ambos nodos están activos, pero no pueden comunicarse).

Para obtener disponibilidad y tolerancia de partición, debe renunciar a la coherencia. Considere si tiene dos nodos, X e Y, en una configuración maestro-maestro. Ahora, hay una interrupción entre la comunicación de red entre X e Y, por lo que no pueden sincronizar las actualizaciones. En este punto puedes:

A) Permitir que los nodos se desincronicen (dando consistencia), o

B) Considere que el clúster está "inactivo" (renunciando a la disponibilidad)

Todas las combinaciones disponibles son:

  • CA : los datos son consistentes entre todos los nodos, siempre que todos los nodos estén en línea, y puede leer / escribir desde cualquier nodo y asegurarse de que los datos sean los mismos, pero si alguna vez desarrolla una partición entre nodos, los datos serán fuera de sincronización (y no se volverá a sincronizar una vez que se resuelva la partición).
  • CP : los datos son consistentes entre todos los nodos y mantienen la tolerancia de partición (evitando la desincronización de datos) al no estar disponible cuando un nodo se cae.
  • AP : los nodos permanecen en línea incluso si no pueden comunicarse entre sí y volverán a sincronizar los datos una vez que se resuelva la partición, pero no se garantiza que todos los nodos tengan los mismos datos (durante o después de la partición)

Debe tener en cuenta que los sistemas de CA prácticamente no existen (incluso si algunos sistemas afirman serlo).


1
En AP, ¿por qué no hemos garantizado que todos los nodos tengan los mismos datos? Ok, debido a que no tenemos "C", pero .. esto no está claro para mí ... quiero saber por qué sucede esto ...
grep

3
@grep Perdón por la respuesta tardía. Si tiene disponibilidad (el clúster no se cae) y tolerancia de partición (la base de datos puede sobrevivir a los nodos sin poder comunicarse), entonces no puede garantizar que todos los nodos siempre tengan todos los datos (consistencia), porque están arriba y aceptan escrituras, pero no pueden comunicarse esas escrituras entre sí.
Chris Heald

44
Tarde a la fiesta, pero vale la pena mostrar algunos ejemplos en cada categoría, por ejemplo. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

Sería realmente útil incluir una ilustración / ejemplo simple sobre clústeres de nodos aquí. ¿Es un sistema o una tabla de datos / colecciones distribuidas en diferentes sistemas o algo más?
shrotavre

Pragmáticamente, los nodos son a menudo sistemas individuales (o software que se ejecuta en esos sistemas) conectados por algún mecanismo de red.
Chris Heald

43

Considerar P en términos iguales con C y A es un poco un error, más bien la noción '2 de 3' entre C, A, P es engañosa. La forma sucinta en que explicaría el teorema de CAP es: "En un almacén de datos distribuidos, en el momento de la partición de la red, debe elegir Consistencia o Disponibilidad y no puede obtener ambos". Los sistemas NoSQL más nuevos están tratando de enfocarse en la Disponibilidad, mientras que las bases de datos tradicionales de ACID se enfocaron más en la Consistencia.

Realmente no puede elegir CA, la partición de red no es algo que a nadie le gustaría tener, es solo una realidad indeseable de un sistema distribuido, las redes pueden fallar. La pregunta es qué compensación elige para su aplicación cuando eso sucede. Este artículo del hombre que formuló ese término por primera vez parece explicar esto muy claramente.


18

Así es como estoy discutiendo CAP, con respecto a P en particular.

CA solo es posible si está de acuerdo con una base de datos monolítica de un solo servidor (tal vez con replicación pero todos los datos en un "bloque de falla" - no se considera que los servidores fallen parcialmente).

Si su problema requiere escalamiento horizontal, distribuido y multiservidor, pueden ocurrir particiones de red. Ya está requiriendo P. Pocos problemas que abordo son susceptibles a los paradigmas de servidor único siempre (o, como dijo Stonebraker, "distribuido son apuestas de tabla"). Si puede encontrar un problema de CA, las soluciones como un RDBMS tradicional sin escalamiento ofrece muchos beneficios.

Para mí, raro: entonces pasamos a discutir AP vs CP.

Solo elige entre la operación AP y CP cuando tiene una partición. Si la red y el hardware funcionan correctamente, obtienes tu pastel y también te lo comes.

Discutamos la distinción AP / CP.

AP: cuando hay una partición de red, deje que las partes independientes operen libremente.

CP: cuando hay una partición de red, apague los nodos o no permita las lecturas y escrituras para que haya fallas deterministas.

Me gustan las arquitecturas que pueden hacer ambas cosas, porque algunos problemas son AP y otros son CP, y algunas bases de datos pueden hacer ambas cosas. Entre las soluciones de CP y AP, también hay sutilezas.

Por ejemplo, en un conjunto de datos AP, tiene la posibilidad de lecturas inconsistentes y generar conflictos de escritura: estos son dos modos AP posibles diferentes. ¿Se puede configurar su sistema para AP con alta disponibilidad de lectura pero no permite conflictos de escritura? ¿O puede su sistema AP aceptar conflictos de escritura, con un sistema de resolución fuerte y flexible? ¿Necesitará ambos eventualmente o puede elegir un sistema que solo tenga uno?

En un sistema CP, ¿cuánta falta de disponibilidad obtiene con particiones pequeñas (servidor único), si las hay? Una mayor replicación puede aumentar la indisponibilidad en un sistema CP, ¿cómo maneja el sistema esas compensaciones?

Estas son todas las preguntas para hacer con CP vs AP.

Una gran lectura en esta área en este momento es la publicación de Brewer "12 años después". Creo que esto avanza el debate de la PAC con claridad, y lo recomiendo altamente.

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed


El sistema de CA es realmente confuso, tengo una pregunta con respecto a su ejemplo de CA de una base de datos monolítica. Si es solo un servidor único, ¿de dónde viene la "A", ya que me parece que la falla de dicho servidor dará como resultado que no haya ningún servicio disponible?
chaooder

1
Buena pregunta. Los servidores pueden tener fallas en el disco, o incluso fallas en los DIMM, o fallas en las fuentes de alimentación si están diseñadas para alta disponibilidad. Incluso imagina estar en múltiples redes eléctricas. Obtiene una disponibilidad cada vez mayor, pero nunca hay una "red" dentro que tenga la capacidad de particionarse y ejecutarse con componentes en desacuerdo. Si bien existe más hardware esotérico (busque SQL NO PARADA), los ejemplos de matrices RAID con componentes que fallan y se reanudan todavía son comunes en estos días y proporcionan una disponibilidad muy alta en un solo servidor.
Brian Bulkowski

13

Teorema de la PAC

Consistencia:

Se garantiza que una lectura devolverá la escritura más reciente (como ACID) para un cliente determinado. Si alguna solicitud llega durante ese tiempo, tiene que esperar hasta que la sincronización de datos se complete en / en los nodos.


Disponibilidad:

cada nodo (si no falla) siempre ejecuta consultas y siempre debe responder a las solicitudes. No importa si devuelve la última copia o no.


Tolerancia de partición:

El sistema continuará funcionando cuando ocurran particiones de red.


En cuanto a AP , la disponibilidad (siempre accesible) puede existir con ( Cassendra ) o sin tolerancia de partición ( RDBMS )

fuente de la imagen


2

Siento que la tolerancia de partición no se explica bien en ninguna de las respuestas, por lo que solo para explicar las cosas con más detalle el teorema de CAP significa:

C : (linealidad o consistencia fuerte) significa aproximadamente

Si la operación B comenzó después de que la operación A se completó con éxito, entonces la operación B debe ver el sistema en el mismo estado en que se encontraba al finalizar la operación A, o un estado más nuevo (pero nunca un estado anterior).

A :

"Cada solicitud recibida por un nodo [base de datos] que no falla en el sistema debe dar como resultado una respuesta [sin error]". No es suficiente que un nodo pueda manejar la solicitud: cualquier nodo que no falle debe poder manejarlo. Muchos de los llamados sistemas de "alta disponibilidad" (es decir, tiempo de inactividad bajo) en realidad no cumplen con esta definición de disponibilidad.

P :

La tolerancia de partición (terriblemente mal llamada) básicamente significa que se está comunicando a través de una red asincrónica que puede retrasar o descartar mensajes. Internet y todos nuestros centros de datos tienen esta propiedad, por lo que realmente no tiene otra opción en este asunto.

Fuente: impresionante de Martin kleppmann trabajo

Solo para tomar un ejemplo: Cassandra puede ser como máximo un sistema AP. Pero si lo configura para leer o escribir en base al Quórum, entonces no permanece CAP disponible (disponible según la definición del teorema CAP) y es solo el sistema P.


1

En un simple teorema de CAP, es imposible que un sistema distribuido proporcione simultáneamente las tres garantías:

ingrese la descripción de la imagen aquí

Consistencia

Cada nodo contiene los mismos datos al mismo tiempo.

Disponibilidad

Al menos un nodo debe estar disponible para servir datos cada vez

Tolerancia de partición

La falla del sistema es muy rara

Casi todos los sistemas solo pueden garantizar un mínimo de dos funciones, CA, AP o CP .


0

Consistencia: cuando enviamos la solicitud de lectura, si está devolviendo el resultado, debería devolver la escritura más reciente dada por la solicitud del cliente. Disponibilidad: su solicitud de lectura / escritura siempre debe tener éxito. Tolerancia de partición: cuando hay una partición de red (se produce un problema para que algunas máquinas se comuniquen entre sí), el sistema aún debería funcionar.

En una distribución, hay posibilidades de que se produzca una partición de red y no podemos evitar la "P" de CAP. Así que elegimos entre "Consistencia" y "Disponibilidad".

http://bigdatadose.com/understanding-cap-theorem/


0

Manera simple de entender el teorema CAP:

En caso de partición de red, uno debe elegir entre disponibilidad perfecta y consistencia perfecta.

Elegir la coherencia significa no poder responder la consulta de un cliente, ya que el sistema no puede garantizar la devolución de la escritura más reciente. Esto sacrifica la disponibilidad.

Elegir disponibilidad significa poder responder a la solicitud de un cliente, pero el sistema no puede garantizar la coherencia, es decir, el valor escrito más reciente. Los sistemas disponibles proporcionan la mejor respuesta posible en las circunstancias dadas.

Esta explicación es de este excelente artículo . Espero que ayude.


0

He pasado por muchos enlaces, pero ninguno de ellos me pudo dar una respuesta satisfactoria, excepto uno.

Por lo tanto, estoy describiendo CAP en palabras muy simples.

  • Consistencia : debe devolver los mismos datos , independientemente de qué nodo provenga.

  • Disponibilidad : el nodo debe responder (debe estar disponible).

  • Tolerancia de partición : el clúster debe responder (debe estar disponible), incluso si hay una partición (es decir, falla de red) entre nodos.

(También una razón principal por la que confunde más es la convención de nombres erróneos. Si tuviera razón, podría haber dado el teorema DNC en su lugar: Consistencia de datos , Disponibilidad de nodos , Disponibilidad de clúster , donde cada uno corresponde a la Consistencia , Disponibilidad y Tolerancia de partición respectivamente)

Base de datos CP: una base de datos CP ofrece consistencia y tolerancia de partición a expensas de la disponibilidad. Cuando se produce una partición entre dos nodos, el sistema debe cerrar el nodo no coherente (es decir, dejarlo no disponible) hasta que se resuelva la partición.

Base de datos AP: una base de datos AP ofrece disponibilidad y tolerancia de partición a expensas de la coherencia. Cuando se produce una partición, todos los nodos permanecen disponibles, pero aquellos en el extremo incorrecto de una partición pueden devolver una versión de datos más antigua que otras. (Cuando se resuelve la partición, las bases de datos AP normalmente vuelven a sincronizar los nodos para reparar todas las inconsistencias en el sistema).

Base de datos de CA: una base de datos de CA ofrece coherencia y disponibilidad en todos los nodos. Sin embargo, no puede hacer esto si hay una partición entre dos nodos en el sistema y, por lo tanto, no puede ofrecer tolerancia a fallas. En un sistema distribuido, las particiones no se pueden evitar. Entonces, si bien podemos discutir una base de datos distribuida de CA en teoría, a todos los efectos prácticos, una base de datos distribuida de CA puede existir pero no debería existir.

Por lo tanto, esto no significa que no pueda tener una base de datos de CA para su aplicación distribuida si la necesita. Muchas bases de datos relacionales, como PostgreSQL, ofrecen consistencia y disponibilidad y pueden implementarse en múltiples nodos mediante la replicación.

Fuente: https://www.ibm.com/cloud/learn/cap-theorem

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.