databases - de qué se compone el teorema cap
Teorema CAP-Disponibilidad y tolerancia de partición (6)
Mientras trato de entender la "Disponibilidad" (A) y la "Tolerancia de partición" (P) en CAP, me resulta 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 entiendo!).
Explicando en términos simples, ¿qué son A y P y la diferencia entre ellos?
Así es como estoy discutiendo CAP, con respecto a P en particular.
La CA solo es posible si está bien con una base de datos monolítica de servidor único (tal vez con replicación pero con todos los datos en un "bloque de fallas"; no se considera que los servidores fallen parcialmente).
Si su problema requiere escalar, distribuido, y multi-servidor --- particiones de red pueden suceder. Ya estás pidiendo P. Pocos problemas que abordo son susceptibles de paradigmas de servidor único (o, como dijo Stonebraker, "distribuido está en juego"). Si puede encontrar un problema de CA, las soluciones como RDBMS tradicional sin escala proporcionan muchos beneficios.
Para mí, raro: así que pasamos a hablar de AP vs CP.
Solo elige entre operación AP y CP cuando tiene una partición. Si la red y el hardware funcionan correctamente, obtienes tu torta y te la comes también.
Discutamos la distinción AP / CP.
AP: cuando hay una partición de red, permita que las partes independientes funcionen libremente.
CP: cuando hay una partición de red, cierra los nodos o no permite las lecturas y escrituras para que haya fallas determinísticas.
Me gustan las arquitecturas que pueden hacer ambas cosas, porque algunos problemas son AP y algunos 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 de generar conflictos de escritura; estos son dos modos AP posibles diferentes. ¿Puede configurar su sistema para AP con alta disponibilidad de lectura pero no permite conflictos de escritura? ¿O su sistema AP puede aceptar conflictos de escritura con un sistema de resolución fuerte y flexible? ¿Necesitará ambos eventualmente, o puede elegir un sistema que solo hace uno?
En un sistema CP, ¿cuánta indisponibilidad obtiene con particiones pequeñas (servidor único), si hay alguna? 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 encarecidamente.
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 breve en que explicaría el teorema de CAP es: "En un almacén de datos distribuido, en el momento de la partición de red debe elegir Coherencia o Disponibilidad y no puede obtener ambos". Los sistemas NoSQL más nuevos intentan enfocarse en la Disponibilidad, mientras que las bases de datos tradicionales de ACI tenían un mayor enfoque en la Coherencia.
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é intercambio escoges para tu aplicación cuando eso sucede. Este article del hombre que primero formuló ese término parece explicar esto muy claramente.
Consistencia: cuando estamos enviando la solicitud de lectura, si está devolviendo el resultado, debe 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 hablen entre sí), el sistema debería funcionar.
En una distribución, existen posibilidades de que se produzca una partición de red y no podemos evitar "P" de CAP. Entonces elegimos entre "Consistencia" y "Disponibilidad".
En el teorema CAP simple establece que es imposible que un sistema distribuido brinde 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
El fracaso del sistema es muy raro
La mayoría de los sistemas solo pueden garantizar un mínimo de dos funciones, ya sea CA, AP o CP .
La consistencia 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 la comunicación) entre dos nodos (ambos nodos están activos, pero no pueden comunicarse).
Para obtener la disponibilidad y la tolerancia de partición, debe renunciar a la coherencia. Considere si tiene dos nodos, X e Y, en una configuración maestra maestra. 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, puede:
A) Permita que los nodos se desincronicen (renunciando a la consistencia), o
B) Considere que el clúster está "abajo" (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 son 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).
- Los datos de CP son consistentes entre todos los nodos y mantienen la tolerancia de partición (evitan la desincronización de datos) al dejar de estar disponibles cuando un nodo deja de funcionar.
- AP : los nodos permanecen en línea incluso si no se pueden comunicar entre sí y resincronizarán 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 que sí).
Consistencia:
Se garantiza que una lectura devuelve la escritura más reciente (como ACID) para un cliente determinado. Si llega alguna solicitud durante ese tiempo, debe 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.
Con respecto a AP , la disponibilidad (siempre accesible) puede existir con ( Cassendra ) o sin tolerancia de partición ( RDBMS )