2012-08-28 34 views
21

Las bases de datos similares a Dynamo (p. Ej., Cassandra) pueden imponer consistencia por quórum, es decir, varias réplicas escritas sincrónicamente (W) y varias réplicas para leer (R) deben elegirse de forma que W + R> N donde N es un factor de replicación. Por otro lado, los sistemas basados ​​en PAXOS como Zookeeper también se usan como un almacenamiento consistente tolerante a fallas.¿Cuál es la diferencia entre Paxos y W + R> = N en Cassandra?

¿Cuál es la diferencia entre estos dos enfoques? ¿PAXOS proporciona garantías que no son proporcionadas por el esquema W + R> N?

+7

FWIW, Zookeeper no se basa en Paxos, es un protocolo de confirmación de dos fases (sin interrupciones) con un protocolo de elección de líder personalizado independiente cuando el maestro se cae. Por supuesto, puedes considerar eso como una implementación de Paxos verticales, pero al final, todos los algoritmos de consenso correctos se pueden mapear en Paxos. –

Respuesta

7

Paxos no es trivial de implementar, y es lo suficientemente caro como para que muchos sistemas que lo usan también lo utilicen, o solo para la elección del líder, o algo así. Sin embargo, proporciona una consistencia garantizada en presencia de fallas, sujeto por supuesto a los límites de su modelo particular de falla.

Los primeros sistemas basados ​​en el quórum que vi asumieron algún tipo de infraestructura de líder o transacción que garantizaría la consistencia suficiente en la que podía confiar que funcionaba el mecanismo del quórum. Esta infraestructura bien podría estar basada en Paxos.

Mirando maneras, tales como https://cloudant.com/blog/dynamo-and-couchdb-clusters/, parecería que no Dynamo es basado en una infraestructura que garantiza la consistencia de su sistema de quórum - por lo que es de ser muy inteligente o abaratamiento de costos? Según http://muratbuffalo.blogspot.co.uk/2010/11/dynamo-amazons-highly-available-key.html, "el sistema Dynamo enfatiza la disponibilidad hasta el punto de sacrificar consistencia. El resumen dice" Dynamo sacrifica consistencia bajo ciertos escenarios de falla. "En realidad, más tarde se vuelve claro que Dynamo sacrifica consistencia incluso en ausencia de fallas: Dynamo puede volverse inconsistente en presencia de múltiples solicitudes de escritura simultáneas ya que las réplicas pueden divergir debido a múltiples coordinadores ". (Fin de cita)

Parece que en el caso de los quórumes implementados en Dynamo, Paxos ofrece garantías de fiabilidad más sólidas.

11

Paxos y el quórum W + R> N intentan resolver problemas ligeramente diferentes. Paxos generalmente se describe como una forma de replicar una máquina de estado, pero de hecho es más un registro distribuido: cada elemento escrito en el registro obtiene un índice, y los diferentes servidores eventualmente tienen los mismos elementos de registro + su índice. (La máquina de estado replicada se puede lograr escribiendo en el registro las entradas a la máquina de estado y cada servidor reproduce la máquina de estado en las entradas acordadas según su índice). Puedes leer más sobre Paxos en una publicación de blog que escribí here.

El quórum W + R> N resuelve el problema de compartir un único valor entre varios servidores. En la academia se llama "registro compartido". Un registro compartido tiene dos operaciones: leer y escribir, donde esperamos que la lectura devuelva el valor de la escritura anterior.

Entonces, Paxos y el quórum W + R> N viven en diferentes dominios y tienen diferentes propiedades (por ejemplo, Paxos guarda una lista ordenada de elementos). Sin embargo, Paxos se puede usar para implementar un registro compartido, y se puede usar un quórum W + R> N para implementar un registro distribuido (aunque de manera muy ineficiente).

Dicho todo lo anterior, a veces los quórumes W + R> N no se implementan en su forma "totalmente robusta", ya que requerirá más de una ronda de comunicación. Por lo tanto, en sistemas que desean baja latencia, es posible que su implementación de quórumes W + R> N proporcione propiedades más débiles (por ejemplo, pueden existir valores en conflicto).

En resumen, teóricamente, Paxos y W + R> N pueden lograr los mismos objetivos. Prácticamente, sería muy ineficiente, y cada uno es mejor para algo ligeramente diferente. Incluso más prácticamente, W + R> N no siempre se implementa completamente, lo que reduce algunas propiedades de consistencia para la velocidad.

Actualización: Paxos admite un modelo de falla muy general: los mensajes se pueden descartar, los nodos pueden bloquearse y reiniciarse. El esquema de quórum W + R> N tiene diferentes implementaciones, muchas de las cuales suponen fallas menos generales. Entonces, la diferencia entre los dos también depende de la suposición sobre las posibles fallas que son compatibles.

14

Sí, Paxos ofrece garantías que no son proporcionadas por los sistemas Dynamo y sus quórumes de lectura y escritura. La diferencia es cómo se manejan las fallas y qué sucede durante una escritura. Después de una escritura exitosa, ambos tipos de sistemas se comportan de manera similar. Los datos se guardarán y estarán disponibles para su lectura posterior (hasta que se sobrescriban o eliminen) y así sucesivamente.

La diferencia aparece durante una escritura y después de fallas. Hasta que obtenga una respuesta exitosa de los nodos W al escribir algo en los sistemas eventualmente consistentes, entonces los datos pueden haber sido escritos en algunos nodos y no en otros, y no hay garantía de que todo el sistema esté de acuerdo con el valor actual. Si intenta volver a leer los datos en este punto, algunos clientes pueden recuperar los datos nuevos y recuperar algunos de los datos anteriores. En otras palabras, el sistema no es inmediatamente consistente. Esto se debe a que las escrituras no son atómicas en los nodos de estos sistemas. Generalmente hay mecanismos para "curar" una inconsistencia como esta y "eventualmente" el sistema volverá a ser consistente (es decir, las lecturas siempre devolverán el mismo valor, hasta que se escriba algo nuevo). Esta es la razón por la que a menudo se los llama "eventualmente consistentes". Las inconsistencias pueden aparecer (y lo harán), pero siempre serán tratadas y reconciliadas eventualmente.

Con Paxos, las escrituras pueden hacerse atómicas a través de los nodos y, por lo tanto, es posible evitar las incoherencias entre los nodos. El algoritmo de Paxos permite garantizar que los nodos no defectuosos nunca estén en desacuerdo con el resultado de una escritura, en cualquier momento. O la escritura tuvo éxito en todas partes o en ninguna parte. Nunca habrá lecturas inconsistentes en ningún punto (si se implementa correctamente y si todas las suposiciones son válidas, por supuesto). Sin embargo, esto tiene un costo. Principalmente, el sistema puede necesitar retrasar algunas solicitudes y no estar disponible cuando, por ejemplo, demasiados nodos (o la comunicación entre ellos) no funcionan. Esto es necesario para asegurar que no se den respuestas inconsistentes.

En resumen: la principal diferencia es que los sistemas similares a Dynamo pueden devolver resultados inconsistentes durante las escrituras o después de fallas por algún tiempo (pero eventualmente se recuperarán), mientras que los sistemas basados ​​en Paxos pueden garantizar que nunca inconsistencias por estar a veces no disponible y retrasar las solicitudes en su lugar.

1

No hay diferencia. La definición de quórum dice que la intersección de los dos quórumes no está vacía. El quórum de mayoría simple es un ejemplo NO una definición. Eche un vistazo al documento posterior del Dr. Lamport "Vertical Paxos", donde dio otra configuración posible de quórumes.

Protocolo multi-decreto paxos (AKA Multi-Paxos), en estado estable es solo confirmación de dos fases. Los cambios en el número de boletas solo son necesarios cuando el líder falla.

Zookeeper's replication protocol (ZAB), y RAFT están basados ​​en Paxos. Las diferencias están en la detección de fallas y la transición después de que falla un líder.

Cuestiones relacionadas