Articulo de referencia

Paxos (informática)

En informática , Paxos es una familia de protocolos para resolver el consenso en una red de procesadores poco fiables o falibles. El consenso es el proceso de ponerse de acuerdo...

En informática , Paxos es una familia de protocolos para resolver el consenso en una red de procesadores poco fiables o falibles. El consenso es el proceso de ponerse de acuerdo sobre un resultado entre un grupo de participantes. Este problema se complica cuando los participantes o sus comunicaciones pueden sufrir fallos. [ 1 ]

Los protocolos de consenso constituyen la base del enfoque de replicación de máquinas de estado para la computación distribuida , tal como lo sugirió Leslie Lamport [ 2 ] y lo analizó Fred Schneider [ 3 ] . La replicación de máquinas de estado es una técnica para convertir un algoritmo en una implementación distribuida y tolerante a fallos. Las técnicas ad hoc pueden dejar sin resolver casos importantes de fallos. El enfoque basado en principios propuesto por Lamport et al. garantiza que todos los casos se gestionen de forma segura.

El protocolo de Paxos se presentó por primera vez en 1989 y recibió su nombre de un sistema ficticio de consenso legislativo utilizado en la isla griega de Paxos , donde Lamport escribió que el parlamento debía funcionar "aunque los legisladores entraban y salían continuamente de la Cámara parlamentaria". [ 4 ] Posteriormente se publicó como artículo de revista en 1998. [ 5 ]

La familia de protocolos Paxos abarca un espectro de compensaciones entre el número de procesadores, el número de retrasos en los mensajes antes de conocer el valor acordado, el nivel de actividad de los participantes individuales, el número de mensajes enviados y los tipos de fallos. Si bien ningún protocolo de consenso tolerante a fallos determinista puede garantizar el progreso en una red asíncrona (un resultado demostrado en un artículo de Fischer , Lynch y Paterson [ 6 ] ), Paxos garantiza la seguridad (consistencia) y las condiciones que podrían impedir su progreso son difíciles de provocar.

Paxos se suele utilizar cuando se requiere durabilidad (por ejemplo, para replicar un archivo o una base de datos ), donde la cantidad de estado persistente puede ser grande. El protocolo intenta avanzar incluso durante los períodos en que un número limitado de réplicas no responde. También existe un mecanismo para descartar una réplica que ha fallado permanentemente o para añadir una nueva.

Historia

En 1988, Lynch , Dwork y Stockmeyer demostraron la resolubilidad del consenso en una amplia familia de sistemas "parcialmente síncronos". [ 7 ] Paxos tiene similitudes con un protocolo utilizado para el acuerdo en la "replicación con marca de vista", publicado por primera vez por Oki y Liskov en 1988, en el contexto de transacciones distribuidas. [ 8 ] Paxos ofreció un formalismo elegante e incluyó una de las primeras pruebas de seguridad para un protocolo de consenso distribuido tolerante a fallos.

Las máquinas de estado reconfigurables tienen vínculos con trabajos previos sobre protocolos de multidifusión de grupo confiables que admiten la pertenencia dinámica a grupos, por ejemplo, el trabajo de Birman en 1985 y 1987 sobre el protocolo gbcast virtualmente síncrono [ 9 ] . gbcast es poco común en cuanto a la durabilidad y el manejo de fallas de particionamiento. La mayoría de los protocolos de multidifusión confiables no poseen estas propiedades, las cuales son necesarias para las implementaciones del modelo de replicación de máquinas de estado. Este punto se analiza en un artículo de Lamport , Malkhi y Zhou [ 10 ] .

Los protocolos Paxos pertenecen a una clase teórica de soluciones a un problema formalizado como acuerdo uniforme con fallos por caída. Keidar y Shraer demostraron cotas inferiores para este problema . [ 11 ] Derecho, [ 12 ] una biblioteca de software en C++ para la replicación de máquinas de estado a escala de nube, ofrece un protocolo Paxos integrado con membresía virtualmente síncrona autogestionada. Este protocolo cumple con las cotas de optimalidad de Keidar y Shraer y se adapta eficientemente al hardware moderno de centros de datos con DMA remoto (RDMA) . Utiliza TCP si RDMA no está disponible.

Supuestos

Para simplificar la presentación de Paxos, se explicitan las siguientes suposiciones y definiciones. En la literatura se conocen técnicas para ampliar su aplicabilidad, las cuales no se abordan en este artículo.

Procesadores

  • Los procesadores funcionan a velocidad arbitraria.
  • Los procesadores pueden sufrir fallos.
  • Los procesadores con almacenamiento estable pueden reincorporarse al protocolo después de fallos (siguiendo un modelo de recuperación ante fallos).
  • Los procesadores no se confabulan, mienten ni intentan subvertir el protocolo. (Es decir, no se producen fallos bizantinos . Véase Byzantine Paxos para una solución que tolera fallos derivados de un comportamiento arbitrario o malicioso de los procesos).

Red

  • Los procesadores pueden enviar mensajes a cualquier otro procesador.
  • Los mensajes se envían de forma asíncrona y su entrega puede tardar un tiempo arbitrariamente prolongado.
  • Los mensajes pueden perderse, reordenarse o duplicarse.
  • Los mensajes se entregan sin errores. (Es decir, no se producen fallos bizantinos. Consulte Byzantine Paxos para ver una solución que tolera mensajes corruptos derivados de un comportamiento arbitrario o malicioso de los canales de mensajería).

Número de procesadores

En general, un algoritmo de consenso puede progresar utilizandonorte=2F+1{\displaystyle n=2F+1}procesadores, a pesar del fallo simultáneo de cualquieraF{\displaystyle F}procesadores: [ 13 ] en otras palabras, el número de procesos sin fallos debe ser estrictamente mayor que el número de procesos con fallos. Sin embargo, mediante la reconfiguración, se puede emplear un protocolo que sobreviva a cualquier número de fallos totales siempre que no fallen simultáneamente más de F. Para los protocolos Paxos, estas reconfiguraciones se pueden gestionar como configuraciones separadas . [ 14 ]

Propiedades de seguridad y habitabilidad

Para garantizar la seguridad (también llamada "consistencia"), Paxos define tres propiedades y asegura que las dos primeras se cumplan siempre, independientemente del patrón de fallos:

Validez (o no trivialidad )
Solo se pueden elegir y aprender los valores propuestos. [ 15 ]
Acuerdo (o coherencia , o seguridad )
No puede haber dos aprendices distintos aprender valores diferentes (o no puede haber más de un valor decidido). [ 15 ] [ 16 ]
Terminación (o vitalidad)
Si se ha propuesto el valor C, entonces eventualmente el aprendiz L aprenderá algún valor (si quedan suficientes procesadores sin fallas). [ 16 ]

Cabe destacar que Paxos no garantiza la terminación y, por lo tanto, carece de la propiedad de vivacidad. Esto se confirma con el resultado de imposibilidad de Fischer-Lynch-Paterson (FLP) [ 6 ] , que establece que un protocolo de consistencia solo puede tener dos de las siguientes propiedades: seguridad , vivacidad y tolerancia a fallos . Dado que el objetivo de Paxos es garantizar la tolerancia a fallos y la seguridad, no puede garantizar también la vivacidad.

Despliegue típico

En la mayoría de las implementaciones de Paxos, cada proceso participante actúa en tres roles: Proponente, Aceptador y Aprendiz. [ 17 ] Esto reduce significativamente la complejidad del mensaje, sin sacrificar la corrección:

En Paxos, los clientes envían comandos a un líder. Durante el funcionamiento normal, el líder recibe el comando de un cliente y le asigna un nuevo número de comando.i{\displaystyle i}y luego comienza eli{\displaystyle i}la instancia del algoritmo de consenso mediante el envío de mensajes a un conjunto de procesos aceptadores. [ 16 ]

Al fusionar roles, el protocolo "colapsa" en un despliegue eficiente de estilo cliente-maestro-réplica, típico de la comunidad de bases de datos. [ 18 ] El beneficio de los protocolos Paxos (incluidas las implementaciones con roles fusionados) es la garantía de sus propiedades de seguridad .

El flujo de mensajes de una implementación típica se describe en la sección Multi-Paxos .

Paxos básico

Este protocolo es el más básico de la familia Paxos. Cada instancia (o ejecución) del protocolo Paxos básico determina un único valor de salida. El protocolo se desarrolla en varias rondas. Una ronda exitosa consta de dos fases: la fase 1 (dividida en partes a y b ) y la fase 2 (también dividida en partes a y b ). A continuación se describe cada fase. Cabe recordar que se asume un modelo asíncrono, por lo que, por ejemplo, un procesador puede estar en una fase mientras otro se encuentra en otra.

Fase 1

Fase 1a: Preparación

Un proponente crea un mensaje, al que llamamos " Preparar" . El mensaje se identifica con un número único, n , que debe ser mayor que cualquier número utilizado previamente en un mensaje "Preparar" por este proponente. Cabe destacar que n no es el valor que se propone; es simplemente un identificador único de este mensaje inicial del proponente. De hecho, el mensaje "Preparar" no tiene por qué contener el valor propuesto (que suele denotarse con la letra v ).
El proponente elige al menos un quórum de aceptadores y les envía el mensaje Prepare que contiene n . Un proponente no debe iniciar Paxos si no puede comunicarse con suficientes aceptadores para constituir un quórum.

Fase 1b: Promesa

Los Aceptadores esperan un mensaje Prepare de cualquiera de los Proponentes. Cuando un Aceptador recibe un mensaje Prepare, debe examinar el número de identificador, n , de ese mensaje. Hay dos casos:
  1. Si n es mayor que cualquier número de propuesta anterior recibida por el Aceptador (de cualquier Proponente), entonces el Aceptador debe devolver un mensaje (llamado Promesa ) al Proponente, indicando que ignorará todas las propuestas futuras con un número menor o igual a n . La Promesa debe incluir el número más alto entre las Propuestas que el Aceptador haya aceptado previamente, junto con el valor de aceptación correspondiente. El primer mensaje Prepare satisface esta condición de forma automática.
  2. Si n es menor o igual que cualquier número de propuesta anterior recibida por el Aceptador, este no necesita responder y puede ignorar la propuesta. Sin embargo, para optimizar el proceso, enviar una respuesta de rechazo o acuse de recibo negativo ( NAK ) le indicaría al Proponente que puede detener su intento de crear consenso con la propuesta n .

Fase 2

Fase 2a: Aceptar

Si un proponente recibe promesas de un quórum de aceptadores, debe asignar un valor v a su propuesta. Si algún aceptante había aceptado previamente alguna propuesta, habrá enviado sus valores al proponente, quien ahora debe asignar el valor de su propuesta, v , al valor asociado con el número de propuesta más alto reportado por los aceptadores, llamémoslo z . Si ninguno de los aceptadores había aceptado una propuesta hasta este momento, el proponente puede elegir el valor que originalmente quería proponer, digamos x . [ 19 ]
El proponente envía un mensaje de aceptación , (n, v) , a un quórum de aceptadores con el valor elegido para su propuesta, v, y el número de propuesta n (que es el mismo que el número contenido en el mensaje de preparación enviado previamente a los aceptadores). Por lo tanto, el mensaje de aceptación es (n, v=z) o, en caso de que ninguno de los aceptadores haya aceptado previamente un valor, (n, v=x) .

Este mensaje de aceptación debe interpretarse como una "solicitud", como en "¡Acepte esta propuesta, por favor!".

Fase 2b: Aceptada

Si un Aceptador recibe un mensaje de Aceptación, (n, v) , de un Proponente, debe aceptarlo si y solo si no se ha comprometido previamente (en la Fase 1b del protocolo Paxos) a considerar únicamente propuestas con un identificador mayor que n .
Si el Aceptador no se ha comprometido previamente (en la Fase 1b) a considerar únicamente propuestas con un identificador mayor que n , deberá registrar el valor v (del mensaje de Aceptación recién recibido ) como el valor aceptado (del Protocolo) y enviar un mensaje de Aceptación al Proponente y a cada Aprendiz (que normalmente pueden ser los propios Proponentes). Los Aprendices conocerán el valor decidido solo después de recibir mensajes de Aceptación de la mayoría de los aceptadores, es decir, no después de recibir solo el primer mensaje de Aceptación.
De lo contrario, puede ignorar el mensaje o la solicitud de aceptación.

Cabe destacar que el consenso se alcanza cuando la mayoría de los Aceptadores aceptan el mismo número de identificador (en lugar del mismo valor ). Dado que cada identificador es único para un Proponente y solo se puede proponer un valor por identificador, todos los Aceptadores que aceptan el mismo identificador aceptan, por lo tanto, el mismo valor. Estos hechos dan lugar a algunos escenarios contraintuitivos que no afectan a la corrección: los Aceptadores pueden aceptar múltiples valores , un valor puede alcanzar la mayoría entre los Aceptadores (con diferentes identificadores) para luego ser modificado , y los Aceptadores pueden seguir aceptando propuestas después de que un identificador haya alcanzado la mayoría . Sin embargo, el protocolo Paxos garantiza que el consenso es permanente y que el valor elegido es inmutable.

Cuando fallan las rondas

Las rondas fallan cuando varios proponentes envían mensajes de preparación contradictorios , o cuando el proponente no recibe el quórum necesario de respuestas ( Promesa o Aceptación ). En estos casos, se debe iniciar otra ronda con un número de propuesta superior.

Paxos puede utilizarse para seleccionar un líder.

Nótese que un proponente en Paxos podría proponer "Yo soy el líder" (o, por ejemplo, "El proponente X es el líder"). [ 20 ] Debido a las garantías de acuerdo y validez de Paxos, si un quórum lo acepta, entonces el proponente es reconocido como el líder por todos los demás nodos. Esto satisface las necesidades de la elección del líder [ 21 ] porque hay un único nodo que cree ser el líder y un único nodo reconocido como tal en todo momento.

Representación gráfica del flujo de mensajes en el Paxos básico.

Los siguientes diagramas representan varios casos/situaciones de aplicación del protocolo Paxos básico. Algunos casos muestran cómo el protocolo Paxos básico gestiona el fallo de ciertos componentes (redundantes) del sistema distribuido.

Tenga en cuenta que los valores devueltos en el mensaje Promise son "nulos" la primera vez que se realiza una propuesta (ya que ningún Acceptor ha aceptado un valor anteriormente en esta ronda).

Paxos básico sin fallos

En el diagrama a continuación, hay 1 Cliente, 1 Proponente, 3 Aceptadores (es decir, el tamaño del Quórum es 3) y 2 Aprendices (representados por las 2 líneas verticales). Este diagrama representa el caso de una primera ronda exitosa (es decir, ningún proceso en la red falla).

Aquí, V es el último de (Va, Vb, Vc).

Casos de error en Paxos básico

Los casos de error más sencillos son el fallo de un Aceptador (cuando un Quórum de Aceptadores permanece activo) y el fallo de un Aprendiz redundante. En estos casos, el protocolo no requiere "recuperación" (es decir, sigue teniendo éxito): no se requieren rondas ni mensajes adicionales, como se muestra a continuación (en los dos diagramas/casos siguientes).

Paxos básico cuando falla un aceptador

En el siguiente diagrama, uno de los aceptadores del quórum falla, por lo que el tamaño del quórum pasa a ser 2. En este caso, el protocolo Paxos básico sigue funcionando correctamente.

Cliente Proponente Aceptador Aprendiz | | | | | | | X-------->| | | | | | Solicitud | X--------->|->|->| | | Preparar(1) | | | | ! | | !! FALLO !! | |<---------X--X | | Promise(1,{Va, Vb, null}) | X--------->|->| | | ¡Aceptar!(1,V) | |<---------X--X--------->|->| Aceptado(1,V) |<---------------------------------X--X Respuesta | | | | | | 

Paxos básico cuando falla un aprendiz redundante

En el siguiente caso, uno de los aprendices (redundantes) falla, pero el protocolo Paxos básico sigue funcionando correctamente.

Cliente Proponente Aceptador Aprendiz | | | | | | | X-------->| | | | | | Solicitud | X--------->|->|->| | | Preparar(1) | |<---------X--X--X | | Promise(1,{Va,Vb,Vc}) | X--------->|->|->| | | ¡Aceptar!(1,V) | |<---------X--X--X------>|->| Aceptado(1,V) | | | | | | !! ¡¡FALLO!! |<---------------------------------Respuesta X | | | | | | 

Paxos básico cuando falla un proponente

En este caso, un proponente falla tras proponer un valor, pero antes de que se alcance el acuerdo. Concretamente, falla en medio del mensaje de aceptación, por lo que solo un aceptador del quórum recibe el valor. Mientras tanto, se elige un nuevo líder (un proponente) (aunque esto no se muestra en detalle). Cabe destacar que hay dos rondas (que se suceden verticalmente, de arriba abajo).

Cliente Proponente Aceptador Aprendiz | | | | | | | X----->| | | | | | Solicitud | X------------>|->|->| | | Preparar(1) | |<------------X--X--X | | Promise(1,{Va, Vb, Vc}) | | | | | | | | | | | | | | !! El líder falla durante la transmisión !! | X------------>| | | | | ¡Aceptar!(1,V) | ! | | | | | | | | | | | | ¡¡NUEVO LÍDER!! | X--------->|->|->| | | Preparar(2) | |<---------X--X--X | | Promise(2,{V, null, null}) | X--------->|->|->| | | ¡Aceptar!(2,V) | |<---------X--X--X------>|->| Aceptado(2,V) |<---------------------------------X--X Respuesta | | | | | | | 

Paxos básico cuando varios proponentes entran en conflicto

El caso más complejo se da cuando varios proponentes se consideran líderes. Por ejemplo, el líder actual puede fracasar y luego recuperarse, pero los demás proponentes ya han elegido a un nuevo líder. El líder recuperado aún no se ha enterado y trata de iniciar una ronda en conflicto con el líder actual. En el diagrama a continuación, se muestran cuatro rondas fallidas, pero podría haber más (como se sugiere al pie del diagrama).

Cliente Proponente Aceptador Aprendiz | | | | | | | X----->| | | | | | Solicitud | X------------>|->|->| | | Preparar(1) | |<------------X--X--X | | Promise(1,{null,null,null}) | ! | | | | | !! EL LÍDER FALLA | | | | | | | !! NUEVO LÍDER (sabe que el último número fue 1) | X--------->|->|->| | | Preparar(2) | |<---------X--X--X | | Promise(2,{null,null,null}) | | | | | | | | !! EL VIEJO LÍDER se recupera | | | | | | | | !! EL VIEJO LÍDER intenta 2, rechazado | X------------>|->|->| | | Preparar(2) | |<------------X--X--X | | Nack(2) | | | | | | | | !! EL VIEJO LÍDER intenta 3 | X------------>|->|->| | | Preparar(3) | |<------------X--X--X | | Promise(3,{null,null,null}) | | | | | | | | !! El NUEVO LÍDER propone, niega | | X--------->|->|->| | | ¡Aceptar!(2,Va) | | |<---------X--X--X | | Nack(3) | | | | | | | | !! NUEVO LÍDER intenta 4 | | X--------->|->|->| | | Preparar(4) | | |<---------X--X--X | | Promise(4,{null,null,null}) | | | | | | | | !! El VIEJO LÍDER propone, niega | X------------>|->|->| | | ¡Aceptar!(3,Vb) | |<------------X--X--X | | Nack(4) | | | | | | | | ... y así sucesivamente ... 

Paxos básico donde un aceptador acepta dos valores diferentes.

En el siguiente caso, un Proponente logra que un Aceptador acepte el valor V1 antes de fallar. Un nuevo Proponente prepara a los Aceptadores que nunca aceptaron V1, lo que le permite proponer V2. Entonces, V2 es aceptado por todos los Aceptadores, incluido el que inicialmente aceptó V1.

Proponente Aceptador Aprendiz | | | | | | | X--------->|->|->| | | Preparar(1) |<---------X--X--X | | Promise(1,{null,null,null}) x--------->| | | | | ¡Aceptar!(1,V1) | | X------------>|->| Aceptado(1,V1) ¡¡ | | | | | | !! ¡¡FALLO!! | | | | | | X--------->|->| | | Preparar(2) |<---------X--X | | Promise(2,{null,null}) X------>|->|->| | | ¡Aceptar!(2,V2) |<------X--X--X------>|->| Aceptado(2,V2) | | | | | | 

Paxos básico donde una mayoría de identificadores múltiples es insuficiente

En el siguiente caso, un Proponente logra la aceptación del valor V1 por parte de un Aceptador antes de fallar. Un nuevo Proponente prepara a los Aceptadores que nunca aceptaron V1, lo que le permite proponer V2. Este Proponente logra que un Aceptador acepte V2 antes de fallar. Un nuevo Proponente encuentra una mayoría que incluye al Aceptador que aceptó V1 y debe proponerlo. El Proponente logra que dos Aceptadores lo acepten antes de fallar. En este punto, tres Aceptadores han aceptado V1, pero no para el mismo identificador. Finalmente, un nuevo Proponente prepara a la mayoría que no ha visto el identificador aceptado de mayor valor. El valor asociado al identificador de mayor valor en esa mayoría es V2, por lo que debe proponerlo. Este Proponente logra entonces que todos los Aceptadores acepten V2, alcanzando así el consenso.

 Proponente Aceptador Aprendiz | | | | | | | | | | | X--------------->|->|->|->|->| | | Preparar(1) |<---------------X--X--X--X--X | | Promise(1,{null,null,null,null,null}) x--------------->| | | | | | | ¡Aceptar!(1,V1) | | | | X------------------>|->| Aceptado(1,V1) ¡¡ | | | | | | | | | | !! ¡¡FALLO!! | | | | | | | | | | X--------------->|->|->|->| | | Preparar(2) |<---------------X--X--X--X | | Promise(2,{null,null,null,null}) X--------------->| | | | | | ¡Aceptar!(2,V2) | | | | X--------------->|->| Aceptado(2,V2) ¡¡ | | | | | | | | | !! ¡¡FALLO!! | | | | | | | | | X--------->|---->|->|->| | | Preparar(3) |<---------X-----X--X--X | | Promise(3,{V1,null,null,null}) X--------------->|->| | | | ¡Aceptar!(3,V1) | | | | X--X--------->|->| Aceptado(3,V1) ¡¡ | | | | | | | | !! ¡¡FALLO!! | | | | | | | | X------>|->|------->| | | Preparar(4) |<------X--X--|--|--X | | Promise(4,{V1(1),V2(2),null}) X------>|->|->|->|->| | | ¡Aceptar!(4,V2) | X--X--X--X--X------>|->| Aceptado(4,V2) 

Paxos básico donde los nuevos proponentes no pueden cambiar un consenso existente.

En el siguiente caso, un Proponente logra la aceptación del valor V1 por parte de dos Aceptadores antes de fallar. Un nuevo Proponente puede iniciar otra ronda, pero ahora le resulta imposible preparar una mayoría que no incluya al menos un Aceptador que haya aceptado V1. Por lo tanto, aunque el Proponente no vea el consenso existente, su única opción es proponer el valor ya acordado. Los nuevos Proponentes pueden incrementar continuamente el identificador para reiniciar el proceso, pero el consenso nunca podrá modificarse.

Proponente Aceptador Aprendiz | | | | | | | X--------->|->|->| | | Preparar(1) |<---------X--X--X | | Promise(1,{null,null,null}) x--------->|->| | | | ¡Aceptar!(1,V1) | | X--X--------->|->| Aceptado(1,V1) ¡¡ | | | | | | !! ¡¡FALLO!! | | | | | | X--------->|->| | | Preparar(2) |<---------X--X | | Promise(2,{V1,null}) X------>|->|->| | | ¡Aceptar!(2,V1) |<------X--X--X------>|->| Aceptado(2,V1) | | | | | | 

Multi-Paxos

Un despliegue típico de Paxos requiere un flujo continuo de valores acordados que actúan como comandos para una máquina de estados distribuida. Si cada comando es el resultado de una única instancia del protocolo Paxos básico , se generaría una sobrecarga considerable.

Si el líder es relativamente estable, la fase 1 resulta innecesaria. Por lo tanto, es posible omitir la fase 1 en futuras instancias del protocolo con el mismo líder.

Para lograr esto, se incluye el número de ronda I junto con cada valor, el cual es incrementado en cada ronda por el mismo Líder. Multi-Paxos reduce el retraso del mensaje sin fallos (desde la propuesta hasta el aprendizaje) de 4 retrasos a 2 retrasos.

Representación gráfica del flujo de mensajes en Multi-Paxos

Multi-Paxos sin fallos

En el siguiente diagrama, se muestra únicamente una instancia (o "ejecución") del protocolo Paxos básico, con un Líder inicial (un Proponente). Cabe destacar que un Multi-Paxos consta de varias instancias del protocolo Paxos básico.

Cliente Proponente Aceptador Aprendiz | | | | | | | --- Primera solicitud --- X-------->| | | | | | Solicitud | X--------->|->|->| | | Preparar(N) | |<---------X--X--X | | Promise(N,I,{Va,Vb,Vc}) | X--------->|->|->| | | ¡Aceptar!(N,I,V) | |<---------X--X--X------>|->| Aceptado(N,I,V) |<---------------------------------X--X Respuesta | | | | | | | 

donde V = último de (Va, Vb, Vc).

Multi-Paxos cuando se puede omitir la fase 1

En este caso, las instancias subsiguientes del protocolo básico Paxos (representadas por I+1 ) utilizan el mismo líder, por lo que se omite la fase 1 (de estas instancias subsiguientes del protocolo básico Paxos), que consta de las subfases Prepare y Promise. Cabe destacar que el líder debe ser estable, es decir, no debe fallar ni cambiar.

Cliente Proponente Aceptador Aprendiz | | | | | | | --- Siguiendo solicitudes --- X-------->| | | | | | Solicitud | X--------->|->|->| | | ¡Aceptar!(N,I+1,W) | |<---------X--X--X------>|->| Aceptado(N,I+1,W) |<---------------------------------X--X Respuesta | | | | | | | 

Multi-Paxos cuando los roles están colapsados

Una implementación común de Multi-Paxos consiste en reducir los roles de Proponentes, Aceptadores y Aprendices a "Servidores". Así, al final, solo existen "Clientes" y "Servidores".

El siguiente diagrama representa la primera "instancia" de un protocolo Paxos básico, cuando los roles de Proponente, Aceptador y Aprendiz se reducen a un único rol, denominado "Servidor".

Servidores cliente | | | | --- Primera solicitud --- X-------->| | | Solicitud | X->|->| Preparar(N) | |<-X--X Promesa(N, I, {Va, Vb}) | X->|->| ¡Aceptar!(N, I, Vn) | X<>X<>X Aceptado(N, I) |<--------X | | Respuesta | | | | 

Multi-Paxos cuando los roles se colapsan y el líder es estable

En las instancias subsiguientes del protocolo básico de Paxos, con el mismo líder que en las instancias anteriores del protocolo básico de Paxos, se puede omitir la fase 1.

Servidores cliente X-------->| | | Solicitud | X->|->| ¡Aceptar!(N,I+1,W) | X<>X<>X Aceptado(N,I+1) |<--------X | | Respuesta | | | | 

Optimizaciones

Se pueden realizar diversas optimizaciones para reducir el número de mensajes intercambiados, mejorar el rendimiento del protocolo, etc. A continuación se describen algunas de estas optimizaciones.

Podemos ahorrar mensajes a costa de un retraso adicional al tener un único aprendiz distinguido que informe a los demás aprendices cuando detecte que se ha elegido un valor. Los aceptadores envían entonces mensajes de aceptación únicamente al aprendiz distinguido. En la mayoría de las aplicaciones, las funciones de líder y aprendiz distinguido las desempeña el mismo procesador. [ 22 ]
"Un líder puede enviar sus mensajes de ¡Prepárate y acepta! solo a un quórum de aceptadores. Siempre que todos los aceptadores de ese quórum estén trabajando y puedan comunicarse con el líder y los aprendices, no es necesario que los aceptadores que no pertenecen al quórum hagan nada. [ 22 ]
"A los aceptadores no les importa qué valor se elija. Simplemente responden a los mensajes Prepare y Accept! para asegurar que, a pesar de los fallos, solo se pueda elegir un único valor. Sin embargo, si un aceptador descubre qué valor se ha elegido, puede almacenarlo en memoria estable y borrar cualquier otra información que haya guardado allí. Si el aceptador recibe posteriormente un mensaje Prepare o Accept!, en lugar de realizar su acción Phase1b o Phase2b, simplemente puede informar al líder del valor elegido. [ 22 ]
"En lugar de enviar el valor v, el líder puede enviar un hash de v a algunos aceptadores en sus mensajes Accept!. Un aprendiz sabrá que v ha sido elegido si recibe mensajes Accepted para v o su hash de un quórum de aceptadores, y al menos uno de esos mensajes contiene v en lugar de su hash. Sin embargo, un líder podría recibir mensajes Promise que le indiquen el hash de un valor v que debe usar en su acción Phase2a sin indicarle el valor real de v. Si eso sucede, el líder no puede ejecutar su acción Phase2a hasta que se comunique con algún proceso que conozca v." [ 22 ]
"Un proponente puede enviar su propuesta solo al líder, en lugar de a todos los coordinadores. Sin embargo, esto requiere que el resultado del algoritmo de selección del líder se transmita a los proponentes, lo cual podría ser costoso. Por lo tanto, podría ser mejor permitir que el proponente envíe su propuesta a todos los coordinadores. (En ese caso, solo los coordinadores necesitan saber quién es el líder). [ 15 ]
En lugar de que cada receptor envíe mensajes de aceptación a cada aprendiz, los receptores pueden enviar sus mensajes de aceptación al líder, y este puede informar a los aprendices cuando se haya elegido un valor. Sin embargo, esto añade un retraso adicional en la transmisión de mensajes. [ 15 ]
"Finalmente, observe que la fase 1 no es necesaria para la ronda 1. El líder de la ronda 1 puede comenzar la ronda enviando un mensaje Accept! con cualquier valor propuesto." [ 15 ]

Paxos barato

Cheap Paxos extiende Basic Paxos para tolerar F fallos con F+1 procesadores principales y F procesadores auxiliares, reconfigurándose dinámicamente después de cada fallo.

Esta reducción en los requisitos de procesamiento se logra a expensas de la disponibilidad; si fallan demasiados procesadores principales en un corto período de tiempo, el sistema debe detenerse hasta que los procesadores auxiliares puedan reconfigurarlo. Durante los períodos estables, los procesadores auxiliares no participan en el protocolo.

"Con solo dos procesadores, p y q, uno de ellos no puede distinguir entre el fallo del otro y el fallo del medio de comunicación. Se necesita un tercer procesador. Sin embargo, este tercer procesador no tiene por qué participar en la elección de la secuencia de comandos. Debe actuar únicamente en caso de que falle p o q, tras lo cual no hace nada mientras p o q continúan operando el sistema por sí solos. Por lo tanto, el tercer procesador puede ser pequeño, lento o económico, o bien un procesador dedicado principalmente a otras tareas." [ 22 ]

Flujo de mensajes: Multi-Paxos barato

Un ejemplo que involucra tres aceptadores principales, un aceptador auxiliar y un tamaño de quórum de tres, que muestra la falla de un procesador principal y la reconfiguración subsiguiente:

 { Aceptadores } Proponente Principal Auxiliar Aprendiz | | | | | | -- Fase 2 -- X----------->|->|->| | | ¡Aceptar!(N,I,V) | | | ! | | --- ¡FALLO! --- |<-----------X--X--------------->| Aceptado(N,I,V) | | | | | -- Fallo detectado (solo se aceptan 2) -- X----------->|->|------->| | ¡Aceptar!(N,I,V) (retransmitir, incluir Aux) |<-----------X--X--------X------>| Aceptado(N,I,V) | | | | | -- Reconfigurar: Quórum = 2 -- X----------->|->| | | ¡Aceptar!(N,I+1,W) (Aux no participa) |<-----------X--X--------------->| Aceptado(N,I+1,W) | | | | | 

Paxos rápido

Fast Paxos generaliza Basic Paxos para reducir los retrasos de mensajes de extremo a extremo. En Basic Paxos, el retraso de mensajes desde la solicitud del cliente hasta el aprendizaje es de 3 retrasos de mensajes. Fast Paxos permite 2 retrasos de mensajes, pero requiere que (1) el sistema esté compuesto por 3f+1 aceptadores para tolerar hasta f fallos (en lugar de los 2f+1 clásicos), y (2) el cliente envíe su solicitud a múltiples destinos.

Intuitivamente, si el líder no tiene nada valioso que proponer, un cliente podría enviar un mensaje de «¡Acepto!» directamente a los Aceptadores. Estos responderían como en Paxos básico, enviando mensajes de «Aceptado» al líder y a cada Aprendiz, logrando así dos retrasos de mensaje entre el Cliente y el Aprendiz.

Si el líder detecta una colisión, la resuelve enviando mensajes de "Aceptar" para una nueva ronda, los cuales se aceptan como de costumbre. Esta técnica de recuperación coordinada requiere cuatro retrasos de mensajes entre el cliente y el aprendiz.

La optimización final se produce cuando el líder especifica una técnica de recuperación con antelación, lo que permite a los Aceptadores realizar la recuperación de la colisión por sí mismos. De este modo, la recuperación de colisiones no coordinada puede producirse en tres retrasos de mensajes (y en solo dos retrasos si todos los Aprendices también son Aceptadores).

Flujo de mensajes: Paxos rápido, sin conflictos.

Cliente Líder Aceptador Aprendiz | | | | | | | | | X--------->|->|->|->| | | Cualquier(N,I,Recuperación) | | | | | | | | X------------------->|->|->|->| | | ¡Aceptar!(N,I,W) | |<---------X--X--X--X------>|->| Aceptado(N,I,W) |<------------------------------------X--X Respuesta(W) | | | | | | | | 

Flujo de mensajes: Paxos rápido, propuestas contradictorias

Propuestas contradictorias con recuperación coordinada. Nota: el protocolo no especifica cómo gestionar la solicitud del cliente descartada.

Cliente Líder Aceptador Aprendiz | | | | | | | | | | | | | | | | | | | | | | | | | | | !! Propuestas contradictorias simultáneas | | | | | | | | | !! recibido en diferente orden | | | | | | | | | !! por los Aceptadores | X--------------?|-?|-?|-?| | | ¡Aceptar!(N,I,V) X-----------------?|-?|-?|-?| | | ¡Aceptar!(N,I,W) | | | | | | | | | | | | | | | | | | !! Los aceptadores no están de acuerdo en el valor | | |<-------X--X->|->|----->|->| Aceptado(N,I,V) | | |<-------|<-|<-X--X----->|->| Aceptado(N,I,W) | | | | | | | | | | | | | | | | | | !! Detectar colisión y recuperar | | X------->|->|->|->| | | ¡Aceptar!(N+1,I,W) | | |<-------X--X--X--X----->|->| Aceptado(N+1,I,W) |<---------------------------------X--X Respuesta(W) | | | | | | | | | 

Propuestas contradictorias y una recuperación descoordinada.

Cliente Líder Aceptador Aprendiz | | | | | | | | | | | X------->|->|->|->| | | Cualquier(N,I,Recuperación) | | | | | | | | | | | | | | | | | | !! Propuestas contradictorias simultáneas | | | | | | | | | !! recibido en diferente orden | | | | | | | | | !! por los Aceptadores | X--------------?|-?|-?|-?| | | ¡Aceptar!(N,I,V) X-----------------?|-?|-?|-?| | | ¡Aceptar!(N,I,W) | | | | | | | | | | | | | | | | | | !! Los aceptadores no están de acuerdo en el valor | | |<-------X--X->|->|----->|->| Aceptado(N,I,V) | | |<-------|<-|<-X--X----->|->| Aceptado(N,I,W) | | | | | | | | | | | | | | | | | | !! Detectar colisión y recuperar | | |<-------X--X--X--X----->|->| Aceptado(N+1,I,W) |<---------------------------------X--X Respuesta(W) | | | | | | | | | 

Flujo de mensajes: Paxos rápido con recuperación descoordinada, roles colapsados

(roles de Aceptador/Aprendiz fusionados)

Servidores cliente | | | | | | | | X->|->|->| Cualquiera(N,I,Recuperación) | | | | | | | | | | | | !! Propuestas contradictorias simultáneas | | | | | | !! recibido en diferente orden | | | | | | !! por los servidores | X--------?|-?|-?|-?| ¡Aceptar!(N,I,V) X-----------?|-?|-?|-?| ¡Aceptar!(N,I,W) | | | | | | | | | | | | !! Los servidores no están de acuerdo en el valor | | X<>X->|->| Aceptado(N,I,V) | | |<-|<-X<>X Aceptado(N,I,W) | | | | | | | | | | | | !! Detectar colisión y recuperar | | X<>X<>X<>X Aceptado(N+1,I,W) |<-----------X--X--X--X Respuesta(W) | | | | | | 

Paxos generalizado

El consenso generalizado explora la relación entre las operaciones de la máquina de estados replicada y el protocolo de consenso que la implementa. [ 16 ] El principal descubrimiento implica optimizaciones de Paxos cuando las propuestas conflictivas pueden aplicarse en cualquier orden, es decir, cuando las operaciones propuestas son conmutativas para la máquina de estados. En tales casos, ambas operaciones conflictivas pueden aceptarse, evitando las demoras necesarias para resolver conflictos y volver a proponer las operaciones rechazadas.

Este concepto se generaliza aún más en secuencias cada vez mayores de operaciones conmutativas, algunas de las cuales se sabe que son estables (y, por lo tanto, pueden ejecutarse). El protocolo realiza un seguimiento de estas secuencias, asegurándose de que todas las operaciones propuestas de una secuencia se estabilicen antes de permitir que cualquier operación que no conmute con ellas se estabilice.

Ejemplo

Para ilustrar Paxos generalizado, el siguiente ejemplo muestra un flujo de mensajes entre dos clientes que se ejecutan simultáneamente y una máquina de estados replicada que implementa operaciones de lectura/escritura sobre dos registros distintos, A y B.

Tenga en cuenta que en esta tabla se indican las operaciones que no son conmutativas.

Una posible secuencia de operaciones  :

<1:Leer(A), 2:Leer(B), 3:Escribir(B), 4:Leer(B), 5:Leer(A), 6:Escribir(A)>

Dado que 5:Read(A)conmuta con ambos 3:Write(B)y 4:Read(B), una posible permutación equivalente al orden anterior es la siguiente:

<1:Leer(A), 2:Leer(B), 5:Leer(A), 3:Escribir(B), 4:Leer(B), 6:Escribir(A)>

En la práctica, un desplazamiento se produce únicamente cuando se proponen operaciones simultáneamente.

Flujo de mensajes: Paxos generalizado (ejemplo)

Respuestas no mostradas. Nota: las abreviaturas de los mensajes difieren de los flujos de mensajes anteriores debido a particularidades del protocolo; consulte [ 23 ] para obtener una explicación completa.

Cliente Líder Aceptador Aprendiz | | | | | | | | !! Nuevo líder comienza ronda | | X----->|->|->| | | Preparar(N) | | |<-----X- X- X | | Promise(N,null) | | X----->|->|->| | | Phase2Start(N,null) | | | | | | | | | | | | | | | | !! Propuestas de desplazamiento simultáneo | X------- ?|-----?|-?|-?| | | Proponer(LeerA) X-----------?|-----?|-?|-?| | | Proponer(LeerB) | | X------X-------------->|->| Aceptado(N,<LeerA,LeerB>) | | |<--------X--X-------->|->| Aceptado(N,<LeerB,LeerA>) | | | | | | | | | | | | | | | | !! Sin conflicto, ambos aceptados | | | | | | | | Estable = <LeerA, LeerB> | | | | | | | | | | | | | | | | !! Propuestas contradictorias simultáneas X-----------?|-----?|-?|-?| | | Proponer(<EscribirB,LeerA>) | X--------?|-----?|-?|-?| | | Proponer(LeerB) | | | | | | | | | | X------X-------------->|->| Aceptado(N,<WriteB,ReadA> . <ReadB>) | | |<--------X--X-------->|->| Aceptado(N,<LeerB> . <EscribirB,LeerA>) | | | | | | | | | | | | | | | | !! Conflicto detectado, el líder elige | | | | | | | | orden conmutativo: | | | | | | | | V = <LeerA, EscribirB, LeerB> | | | | | | | | | | X----->|->|->| | | Phase2Start(N+1,V) | | |<-----X- X- X-------->|->| Aceptado(N+1,V) | | | | | | | | Estable = <LeerA, LeerB> . | | | | | | | | <LeerA, EscribirB, LeerB> | | | | | | | | | | | | | | | | !! Más propuestas contradictorias X-----------?|-----?|-?|-?| | | Proponer(EscribirA) | X--------?|-----?|-?|-?| | | Proponer(LeerA) | | | | | | | | | | X------X-------------->|->| Aceptado(N+1,<WriteA> . <ReadA>) | | |<--------X- X-------->|->| Aceptado(N+1,<LeerA> . <EscribirA>) | | | | | | | | | | | | | | | | !! El líder elige el orden: | | | | | | | | W = <WriteA, ReadA> | | | | | | | | | | X----->|->|->| | | Phase2Start(N+2,W) | | |<-----X- X- X-------->|->| Aceptado(N+2,W) | | | | | | | | Estable = <LeerA, LeerB> . | | | | | | | | <LeerA, EscribirB, LeerB> . | | | | | | | | <EscribirA, LeerA> | | | | | | | | 

Actuación

El flujo de mensajes anterior muestra que Paxos Generalizado puede aprovechar la semántica de las operaciones para evitar colisiones cuando falla el ordenamiento espontáneo de la red. Esto permite que el protocolo sea, en la práctica, más rápido que Paxos Rápido. Sin embargo, cuando se produce una colisión, Paxos Generalizado necesita dos viajes de ida y vuelta adicionales para recuperarse. Esta situación se ilustra con las operaciones WriteB y ReadB en el esquema anterior.

En general, estos viajes de ida y vuelta son inevitables y se deben a que se pueden aceptar múltiples comandos durante una ronda. Esto hace que el protocolo sea más costoso que Paxos cuando los conflictos son frecuentes. Es de esperar que se puedan implementar dos posibles mejoras de Paxos generalizado para optimizar el tiempo de recuperación. [ 24 ]

  • En primer lugar, si el coordinador forma parte de cada quórum de aceptadores (se dice que la ronda N está centrada ), entonces, para recuperarse en la ronda N+1 de una colisión en la ronda N, el coordinador omite la fase 1 y propone en la fase 2 la secuencia que aceptó por última vez durante la ronda N. Esto reduce el coste de la recuperación a un único viaje de ida y vuelta.
  • En segundo lugar, si tanto la ronda N como la N+1 utilizan un quórum centrado único e idéntico, cuando un aceptador detecta una colisión en la ronda N, propone espontáneamente en la ronda N+1 una secuencia que incluye (i) la secuencia aceptada en la ronda N por el coordinador y (ii) el prefijo no conflictivo más grande que aceptó en la ronda N. Por ejemplo, si el coordinador y el aceptador aceptaron respectivamente en la ronda N <WriteB, ReadB> y <ReadB, ReadA>, el aceptador aceptará espontáneamente <WriteB, ReadB, ReadA> en la ronda N+1. Con esta variación, el coste de recuperación es un único retardo de mensaje, lo cual es obviamente óptimo. Nótese que el uso de un quórum único en una ronda no perjudica la vivacidad. Esto se debe a que cualquier proceso en este quórum es un quórum de lectura para la fase de preparación de las siguientes rondas. [ 25 ]

Paxos bizantina

Paxos también puede extenderse para admitir fallos arbitrarios de los participantes, incluyendo mentiras, falsificación de mensajes, colusión con otros participantes, no participación selectiva, etc. Este tipo de fallos se denominan fallos bizantinos , en referencia a la solución popularizada por Lamport. [ 26 ]

La Paxos bizantina [ 27 ] introducida por Castro y Liskov agrega un mensaje extra (Verificar) que actúa para distribuir conocimiento y verificar las acciones de los otros procesadores:

Flujo de mensajes: Multi-Paxos bizantino, estado estable

Cliente Proponente Aceptador Aprendiz | | | | | | | X-------->| | | | | | Solicitud | X--------->|->|->| | | ¡Aceptar!(N,I,V) | | X<>X<>X | | Verificar(N,I,V) - TRANSMISIÓN | |<---------X--X--X------>|->| Aceptado(N,V) |<---------------------------------X--X Respuesta(V) | | | | | | | 

El Fast Byzantine Paxos [ 28 ] introducido por Martin y Alvisi elimina este retraso adicional, ya que el cliente envía comandos directamente a los Acceptors.

Nótese que en Fast Byzantine Paxos el mensaje Accepted se envía a todos los Acceptors y a todos los Learners, mientras que en Fast Paxos solo se envían los mensajes Accepted a los Learners:

Flujo de mensajes: Multi-Paxos bizantino rápido, estado estable

Cliente Aceptador Aprendiz | | | | | | X----->|->|->| | | ¡Aceptar!(N,I,V) | X<>X<>X------>|->| Aceptado(N,I,V) - TRANSMISIÓN |<-------------------X--X Respuesta(V) | | | | | | 

El escenario de fallo es el mismo para ambos protocolos: cada aprendiz espera recibir F+1 mensajes idénticos de diferentes aceptadores. Si esto no ocurre, los propios aceptadores también lo sabrán (ya que intercambiaron sus mensajes en la ronda de difusión), y los aceptadores correctos retransmitirán el valor acordado.

Flujo de mensajes: Multi-Paxos bizantino rápido, fallo

Cliente Aceptador Aprendiz | | | ! | | !! Un receptor está defectuoso X----->|->|->! | | ¡Aceptar!(N,I,V) | X<>X<>X------>|->| Aceptado(N,I,{V,W}) - TRANSMISIÓN | | | ! | | !! Los alumnos reciben 2 comandos diferentes | | | ! | | !! Los aceptadores correctos notan un error y eligen | X<>X<>X------>|->| Aceptado(N,I,V) - TRANSMISIÓN |<-------------------X--X Respuesta(V) | | | ! | | 

Adaptación de Paxos para redes RDMA

Con la aparición de redes de centros de datos de alta velocidad y gran fiabilidad que admiten DMA remoto ( RDMA ), ha habido un gran interés en optimizar Paxos para aprovechar la descarga de hardware, en la que la tarjeta de interfaz de red y los enrutadores de red proporcionan fiabilidad y control de la congestión de la capa de red, liberando así la CPU del host para otras tareas. La biblioteca Derecho C++ Paxos es una implementación de código abierto de Paxos que explora esta opción. [ 12 ]

Derecho ofrece tanto un Paxos clásico, con durabilidad de datos tras ciclos completos de apagado/reinicio, como un Paxos vertical (multidifusión atómica), para replicación en memoria y sincronización de máquinas de estado. Los protocolos Paxos empleados por Derecho debían adaptarse para maximizar la transmisión asíncrona de datos y eliminar otras fuentes de retardo en la ruta crítica del líder. De este modo, Derecho puede mantener la velocidad de datos RDMA bidireccional completa. En cambio, si bien los protocolos Paxos tradicionales pueden migrarse a una red RDMA simplemente asignando las operaciones de envío de mensajes a operaciones RDMA nativas, esto genera retardos de ida y vuelta en la ruta crítica. En redes RDMA de alta velocidad, incluso pequeños retardos pueden ser lo suficientemente grandes como para impedir la utilización de todo el ancho de banda potencial.

Uso en producción de Paxos

Véase también

Referencias

  1. Pease, Marshall; Shostak, Robert; Lamport, Leslie (abril de 1980). "Alcanzando un acuerdo en presencia de fallos" . Journal of the Association for Computing Machinery . 27 (2): 228– 234. doi : 10.1145/322186.322188 . S2CID 6429068. Consultado el 2 de febrero de 2007 . 
  2. Lamport, Leslie (julio de 1978). "Tiempo, relojes y ordenamiento de eventos en un sistema distribuido" . Communications of the ACM . 21 (7): 558– 565. doi : 10.1145/359545.359563 . S2CID 215822405. Consultado el 2 de febrero de 2007 . 
  3. Schneider, Fred (1990). "Implementación de servicios tolerantes a fallos mediante el enfoque de máquina de estados: un tutorial" (PDF) . ACM Computing Surveys . 22 (4): 299– 319. CiteSeerX 10.1.1.69.1536 . doi : 10.1145/98163.98167 . S2CID 678818 .  
  4. Historia del periódico según Leslie Lamport
  5. Lamport, Leslie (mayo de 1998). "El Parlamento a Tiempo Parlamentario" . ACM Transactions on Computer Systems . 16 (2): 133– 169. doi : 10.1145/279227.279229 . S2CID 421028. Recuperado el 2 de febrero de 2007 . 
  6. 1 2 Fischer, M. (abril de 1985). "Imposibilidad del consenso distribuido con un proceso defectuoso" . Journal of the ACM . 32 (2): 374– 382. doi : 10.1145/3149.214121 . S2CID 207660233 . 
  7. Dwork, Cynthia; Lynch, Nancy; Stockmeyer, Larry (abril de 1988). "Consenso en presencia de sincronía parcial" (PDF) . Journal of the ACM . 35 (2): 288–323 . CiteSeerX 10.1.1.13.3423 . doi : 10.1145/42282.42283 . S2CID 17007235 .  
  8. Oki, Brian; Liskov, Barbara (1988). "Replicación con marca de tiempo: un nuevo método de copia primaria para dar soporte a sistemas distribuidos de alta disponibilidad" . PODC '88: Actas del séptimo simposio anual de la ACM sobre principios de computación distribuida . págs. 8–17 . doi : 10.1145/62546.62549 . 
  9. Birman, Kenneth; Joseph, Thomas (febrero de 1987). "Comunicación confiable en presencia de fallas". ACM Transactions on Computer Systems . 5 : 47–76 . doi : 10.1145/7351.7478 . hdl : 1813/6534 . S2CID 11224827 . 
  10. Lamport, Leslie; Malkhi, Dahlia; Zhou, Lidong (marzo de 2010). "Reconfigurando una máquina de estados". SIGACT News . 41 (1): 63– 73. CiteSeerX 10.1.1.212.2168 . doi : 10.1145/1753171.1753191 . S2CID 15189602 .  
  11. Keidar, Idit ; Shraer, Alexander (2006). "Puntualidad, detectores de fallos y rendimiento del consenso". PODC '06: Actas del 25.º Simposio Anual de la ACM sobre Principios de Computación Distribuida . doi : 10.1145/1146381.1146408 .
  12. 1 2 Jha, Sagar; Behrens, Jonathan; Gkountouvas, Theo; Milano, Matthew; Song, Weijia; Tremel, Edward; van Renesse, Robbert; Zink, Sydney; Birman, Ken (abril de 2019). "Derecho: replicación rápida de máquinas de estado para servicios en la nube". ACM Transactions on Computer Systems . 36 (2). doi : 10.1145/3302258 . S2CID 218482757 . 
  13. Lamport, Leslie (2004). "Límites inferiores para el consenso asíncrono" .
  14. ^ Van Renesse, Robbert; Altınbüken, Deniz (17 de febrero de 2015). "Paxos se hizo moderadamente complejo" . Encuestas de Computación ACM . 47 (3): 42:1–42:36. doi : 10.1145/2673577 . ISSN 0360-0300 . 
  15. ^ Lamport , Leslie (2005 ) . "Paxos rápidos" .
  16. 1 2 3 4 Lamport, Leslie (2005). "Consenso generalizado y Paxos" .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  17. Chandra, Tushar; Griesemer, Robert; Redstone, Joshua (2007). "Paxos en acción". Actas del vigésimo sexto simposio anual de la ACM sobre Principios de computación distribuida . págs. 398–407 . doi : 10.1145/1281100.1281103 . ISBN  9781595936165. S2CID 207164635 . 
  18. Quesada Torres, Luis (2018). El algoritmo de Paxos . Charlas técnicas de Google.
  19. Lamport, Leslie (2001). Paxos Made Simple ACM SIGACT News (Columna de Computación Distribuida) 32 , 4 (Número completo 121, diciembre de 2001) 51-58.
  20. "Elección de líderes, ¿por qué debería importarme?" . Blog de Elastic . 13 de septiembre de 2013 . Consultado el 27 de febrero de 2021 .
  21. I. Gupta, R. van Renesse y KP Birman, 2000, Un protocolo de elección de líder probabilísticamente correcto para grupos grandes, Informe técnico , Universidad de Cornell
  22. 1 2 3 4 5 Lamport, Leslie; Massa, Mike (2004). "Paxos barato" . Actas de la Conferencia Internacional sobre Sistemas y Redes Confiables (DSN 2004) .
  23. Turner, Bryan (2007). "La familia de protocolos de consenso Paxos" .
  24. Pierre, Sutra; Marc, Shapiro (2011). "Consenso generalizado genuino rápido" (PDF) . SRDS'11: 30.º Simposio IEEE sobre sistemas distribuidos confiables .
  25. Lamport, Leslie; Malkhi, Dahlia; Zhou, Lidong (2009). "Vertical paxos and primary-backup replication". Actas del 28.º simposio de la ACM sobre principios de computación distribuida . PODC '09. Nueva York, NY, EE. UU.: ACM. págs. 312–313 . CiteSeerX 10.1.1.150.1791 . doi : 10.1145/1582716.1582783 . ISBN   9781605583969. S2CID 2763624 . 
  26. Lamport, Leslie; Shostak, Robert; Pease, Marshall (julio de 1982). "El problema de los generales bizantinos" . ACM Transactions on Programming Languages ​​and Systems . 4 (3): 382– 401. CiteSeerX 10.1.1.64.2312 . doi : 10.1145/357172.357176 . S2CID 55899582. Consultado el 2 de febrero de 2007 .  
  27. Castro, Miguel; Liskov, Barbara (febrero de 1999). "Tolerancia práctica a fallos bizantinos" (PDF) . Actas del Tercer Simposio sobre Diseño e Implementación de Sistemas Operativos : 173–186 . Consultado el 5 de marzo de 2018 .
  28. Martin, Jean-Philippe; Alvisi, Lorenzo (julio de 2006). "Consenso bizantino rápido" (PDF) . IEEE Transactions on Dependable and Secure Computing . 3 (3): 202– 215. Bibcode : 2006ITDSC...3..202M . doi : 10.1109/TDSC.2006.35 . Consultado el 5 de marzo de 2018 .
  29. Burrows, Mike. "El servicio de bloqueo Chubby para sistemas distribuidos débilmente acoplados" (PDF) . OSDI.
  30. "Consenso en presencia de sincronía parcial" (PDF) . Archivado (PDF) del original el 19 de abril de 2011. Consultado el 31 de agosto de 2019 .
  31. "Microsoft Research – Investigación sobre tecnologías emergentes, informática y software" . Microsoft Research . Consultado el 19 de septiembre de 2024 .
  32. Aahlad et al. (2011). “El motor de coordinación distribuida (DConE)”. Archivado el 15 de abril de 2016 en Wayback Machine . Documento técnico de WANdisco.
  33. Kolbeck, Björn; Högqvist, Mikael; Stender, Jan; Hupfeld, Felix (2011). “Flease - Coordinación de arrendamiento sin servidor de bloqueo” . 25.º Simposio Internacional de Procesamiento Paralelo y Distribuido de la IEEE (IPDPS 2011).
  34. "Consistencia, tolerancia a fallos y disponibilidad con MariaDB Xpand — Documentación de MariaDB" . MariaDB . Consultado el 19 de septiembre de 2024 .
  35. "Transacciones ligeras en Cassandra 2.0" . DataStax . Consultado el 19 de septiembre de 2024 .
  36. "Transacciones ligeras | Documentación de ScyllaDB" . opensource.docs.scylladb.com . Consultado el 19 de septiembre de 2024 .
  37. Vogels, Dr. Werner (2015-07-20). "Bajo el capó del servicio de contenedores Amazon EC2" . www.allthingsdistributed.com . Recuperado el 19 de septiembre de 2024 .
  38. "Amazon DynamoDB: un servicio de base de datos NoSQL escalable, de rendimiento predecible y totalmente administrado" (PDF) . Archivado del original (PDF) el 19 de julio de 2022.

Obtenido de " https://en.wikipedia.org/w/index.php?title=Paxos_(computer_science)&oldid=1362586703 "