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?
database
nosql
consistency
availability
Manikandan Kannan
fuente
fuente
Respuestas:
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:
Debe tener en cuenta que los sistemas de CA prácticamente no existen (incluso si algunos sistemas afirman serlo).
fuente
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.
fuente
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
fuente
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.
fuente de la imagen
fuente
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
A :
P :
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.
fuente
En un simple teorema de CAP, es imposible que un sistema distribuido proporcione simultáneamente las tres garantías:
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 .
fuente
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/
fuente
Manera simple de entender el teorema CAP:
Esta explicación es de este excelente artículo . Espero que ayude.
fuente
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
fuente