Sistemas distribuidos: ¿El resultado de imposibilidad de FLP y el teorema de CAP de Brewer son básicamente equivalentes?

Actualizar:
Martin Glimmerveen se dio cuenta de que Gilbert y Lynch abordaron el tema recientemente en un artículo muy legible e ilustrativo en la revista ACM Computer Magazine (febrero de 2012) llamado Perspectivas sobre el teorema de la PAC [1].

Como el artículo no está disponible de forma gratuita, permítame citar la parte que aborda la relación de FLP y CAP:

Acuerdo es imposible
Comprender la relación entre las propiedades de seguridad y vida ha sido un desafío de larga data en la informática distribuida. El tema alcanzó una gran prominencia en 1985 cuando Michael Fischer, Nancy Lynch y Michael Paterson mostraron que un acuerdo tolerante a fallas es imposible en un sistema asincrónico.
Su investigación se centró en el problema del consenso, en el que cada proceso [math] p_i [/ ​​math] comienza con un valor inicial [math] v_i [/ ​​math], y todos los procesos deben coincidir en uno de esos valores. Hay tres requisitos para el consenso:

  • acuerdo: cada proceso debe generar el mismo valor;
  • validez: cada salida de valor debe haberse proporcionado como entrada para algún proceso; y
  • terminación: cada proceso eventualmente debe generar un valor.

El acuerdo y la validez son propiedades de seguridad, mientras que la terminación es una propiedad vital. La imposibilidad de consenso es, por lo tanto, un ejemplo importante de la compensación inherente entre seguridad y vida.
Los requisitos de seguridad del consenso son más difíciles de cumplir que los que hemos considerado con respecto al CAP: lograr un acuerdo es (probablemente) más difícil que simplemente implementar un registro de lectura / escritura atómica. Por lo tanto, CAP también implica que es imposible lograr el consenso en un sistema sujeto a particiones.
Fischer, Lynch y Paterson no consideraron un sistema con particiones; estaban preocupados por el problema más benigno de fallas de choque. Específicamente, asumieron que un proceso desconocido puede dejar de funcionar mientras que la mayoría de los procesos en el sistema continúan comunicándose de manera confiable. Su sorprendente conclusión fue que el consenso es imposible en tal sistema. De hecho, para cada supuesto protocolo de consenso que garantiza el acuerdo y la validez, hay alguna ejecución en la que no hay fallas y, sin embargo, el algoritmo nunca termina. En el caso del consenso, la seguridad y la vida son imposibles si el sistema es potencialmente un poco defectuoso.
Este resultado ha tenido implicaciones significativas. Por ejemplo, el problema del consenso está en el corazón del paradigma de máquina de estado replicado, uno de los enfoques más comunes para construir servicios distribuidos confiables. Este paradigma logra disponibilidad al replicar el servicio en un conjunto de servidores. Los servidores luego acuerdan cada operación realizada por el servicio. La imposibilidad de un consenso tolerante a fallas implica que los servicios construidos de acuerdo con el paradigma de máquina de estado replicado no pueden lograr tanto la disponibilidad como la corrección en una red asincrónica.

Lo más interesante es su afirmación lograr un acuerdo es (probablemente) más difícil que simplemente implementar un registro de lectura / escritura atómica” . Si eso es cierto, el paso 2 del bosquejo de prueba a continuación también está mal. El ingenuo ‘El proponente escribe un valor para el sistema. La consistencia exige que todos los nodos lean el mismo valor después, la disponibilidad garantiza que la lectura tenga éxito ‘. no funciona de acuerdo con ellos. Es una pena que no hayan dado una referencia para esa declaración. Porque para mí, esa solución ingenua parece una forma válida de implementar un acuerdo utilizando un registro de lectura / escritura atómica.

El resto del artículo también es muy interesante, ya que analiza el progreso en la investigación de las compensaciones de seguridad / vida por consenso y estrategias (de alto nivel) para hacer frente a la PAC.

[1] http://ieeexplore.ieee.org/xpl/l…

Actualizar:
Como señaló Emin, la prueba no funciona. Lo que sigue es mi comprensión de por qué no. El documento de FLP dice [1]:

No consideramos las fallas bizantinas, y suponemos que el sistema de mensajes es confiable: entrega todos los mensajes correctamente y exactamente una vez .

Si el modelo de falla de detención de falla de la prueba FLP implicaba la posibilidad de pérdida de mensajes ( = posibles particiones de red ), consulte el paso 1 a continuación. Pero no lo hace! La entrega de mensajes con una semántica exacta una vez es una suposición mucho más fuerte sobre la red que la del teorema CAP.

Por lo tanto, un algoritmo hipotético de consenso FLP con garantía de terminación no se puede utilizar para llevar a cabo una operación de escritura coherente en tiempo limitado en una red con suposiciones más débiles sobre la entrega de mensajes (la tolerancia de partición de CAP significa solidez a la pérdida de mensajes arbitrarios).

[1] http://discolab.rutgers.edu/clas…

Boceto de prueba informal antiguo (el paso 1 es incorrecto ) :

Intentaré resolver mi propia pregunta resumiendo la gran respuesta de Henry:

  1. Ambos teoremas comparten el mismo modelo de red : entrega asincrónica + posible pérdida de mensajes (que es equivalente a una parada por falla en el momento de la llegada del mensaje)
  2. Tener consenso implica tener CAP : cada operación de escritura se resuelve utilizando un consenso sobre el valor escrito.
  3. Tener CAP implica tener consenso : el proponente escribe un valor para el sistema. La consistencia exige que todos los nodos lean el mismo valor después, la disponibilidad garantiza que la lectura tenga éxito.
  4. Consecuencia : dado que ambos teoremas implican que son equivalentes.

Mi intento de visualizar lo que a mis ojos es el conflicto central equivalente que impide la PAC / consenso:
Entonces, probablemente el eslabón perdido es un teorema más general: en una red poco confiable, las propiedades de terminación y seguridad de un cierto patrón son generalmente irreconciliables. Tal vez alguien finalmente detecte el patrón común de esos patrones de seguridad y los Cientos de Resultados de Imposibilidad para la Computación Distribuida que mencionó Henry serán solo uno.

ACTUALIZAR EL SEGUNDO: Pensé un poco más sobre esto, y lo escribí en mi blog en http://the-paper-trail.org/blog/

ACTUALIZACIÓN: Woops, estoy equivocado, como señala Gun. Dejaré la respuesta original completa a continuación por honestidad. Pero está mal.

Creo que la única porción si está bien; es decir, CAP se puede usar para construir un sistema que desafíe FLP. Pero FLP es insuficiente para construir un sistema que desafíe CAP, porque hace que los requisitos de una solución sean más débiles (y, por lo tanto, es aún más interesante que el teorema de FLP sea cierto, ni siquiera se puede llegar a un consenso en todas las ejecuciones con este tipo de conjunto relajado requisitos).

La diferencia clave, creo, es esta: CAP requiere que todos los nodos den respuestas consistentes incluso si no reciben ningún mensaje del resto del sistema. FLP solo requiere que los nodos decidan una vez que tengan la oportunidad de tomar ‘suficientes pasos’; es decir, no tienen fallas y eventualmente reciben mensajes. CAP parece ver los nodos que no reciben ningún mensaje como un juego justo para las solicitudes de los clientes.

Dado ese modelo para CAP, no es sorprendente que el teorema resulte ser cierto (efectivamente, si los nodos no pueden comunicarse, no pueden ponerse de acuerdo en nada; esto no es sorprendente). FLP al menos les da una oportunidad de pelear, y por lo tanto es un resultado significativamente más interesante.

——————–

Creo que la respuesta es sí, son efectivamente equivalentes.

Para establecer la equivalencia, podemos verificar si una solución a FLP resolvería CAP, y viceversa. Lo que sigue es un argumento muy, muy informal.

En la dirección ‘si’: si tuviéramos un algoritmo distribuido que resolviera el consenso en redes asincrónicas, ¿podríamos construir un registro R / W en una red que podría perder cualquier subconjunto de mensajes?

Lo primero a considerar: ¿son equivalentes los modelos de red? Yo creo que lo son. La prueba CAP permite particiones ‘temporales’ o fallas que no creo que sean explícitamente capturadas por el modelo FLP. En FLP, el modelo de falla es crash-stop (los nodos que toman números finitos de pasos en cualquier ejecución infinita del sistema son defectuosos), y los mensajes no se pierden, solo se retrasan arbitrariamente. Sin embargo, creo que puede extender la prueba para tratar con el modelo de bloqueo más débil retrasando cualquier mensaje enviado después de que el nodo se recupere hasta después del final de la ejecución de decisión que termina en el estado A ; es decir, solo tiene que fallar el tiempo suficiente para causar la contradicción.

Dado eso, es fácil argumentar informalmente que el consenso a prueba de FLP le permite construir un registro atómico de lectura y escritura. Cada operación de escritura se propone como una instancia de consenso, y aquellos nodos para quienes la actualización es aceptable (es decir, que el número de secuencia de la actualización propuesta no se ha visto antes) vota “sí”. Una vez que todos los nodos conocen el resultado del protocolo, pueden responder a las solicitudes de lectura.

Dado que tenemos la hipótesis de una solución al consenso en presencia de fallas, esto significa que cualquier partición de red no puede evitar que las operaciones de escritura tengan éxito, por lo tanto, es trivialmente fácil satisfacer la coherencia secuencial de las actualizaciones.

¿Qué tal la dirección de ‘solo si’? Es decir, intentemos establecer si un sistema que desafía CAP (y por lo tanto proporciona un registro R / W serializable en una red que podría retrasar arbitrariamente los mensajes y perder otros) puede usarse para resolver el consenso.

Esta dirección también es fácil de argumentar, al menos para una fuerte variante de consenso donde cada nodo no defectuoso decide. Escribir un valor en el registro es lo mismo que proponer un valor de consenso, y podemos transmitir el valor actualizado comprometido a todos los nodos no defectuosos (es decir, no particionados).

No debería sorprendernos que ambos teoremas estén estrechamente relacionados. Ambos están argumentando sobre la imposibilidad de mantener tanto la seguridad como la vida en un sistema distribuido en presencia de fallas. Una propiedad de seguridad informal es aquella en la que nunca sucede nada ‘malo’, por ejemplo, un protocolo de consenso que termina con dos nodos en desacuerdo, donde una propiedad de vida dice que algo ‘bueno’ finalmente sucede, por ejemplo, un protocolo de consenso debe terminar finalmente. Esto puede ser un argumento muy profundo, ya que [1] demuestra que todas las propiedades no triviales de los sistemas distribuidos pueden expresarse como una superposición de propiedades de seguridad y vitalidad. El consenso y los objetos atómicos serializables son solo dos de los problemas que no admiten soluciones seguras y vivas en presencia de fallas arbitrarias. Fich y Ruppert [2] tienen una encuesta de cientos de problemas como estos que tienen las mismas dificultades insuperables.

[1] http://citeseerx.ist.psu.edu/vie
[2] http://citeseerx.ist.psu.edu/vie

More Interesting

¿Por qué si tenemos una reducción en el tiempo polinomial de un problema de P a un problema de NP, esto no muestra que P = NP (pero al contrario)?

Me dicen que si n = 25, tenemos Sn = 121392 donde Sn es el número de adiciones realizadas en la siguiente función para calcular el enésimo número de Fibonacci. ¿Alguien puede explicar cómo? Int F (int n) {if (n == 0) return (0); if (n == 1) return (1); retorno (F (n-1) + F (n-2));}

Cuando los matemáticos desarrollan algoritmos, ¿están haciendo informática?

No puedo encontrar el máximo / mínimo de este problema del multiplicador de Lagrange sin obtener un número complejo cerca del final. ¿Qué estoy haciendo mal?

¿Quién hizo la función sinc?

¿Qué algoritmos se pueden usar para resolver este problema de optimización?

¿Qué son las matemáticas discretas?

¿Qué debo hacer después de completar mi B.Tech para ingresar a una carrera relacionada con las matemáticas?

¿Existe un equivalente al tono perfecto en matemáticas / programación de computadoras? ¿Un atributo que se considera que no se puede aprender pero que es invaluable si lo posee?

En Java, ¿por qué usar un iterador para iterar a través de LinkedList más rápido que usar un bucle for?

Cómo resolver la Competencia de Computación Canadiense de 1996, Etapa 1, Problema C (vea el enlace del problema a continuación)

¿Cuál es la justificación rigurosa de la exactitud de la segunda formulación de la solución DP de corte de varillas en CLRS?

¿Cómo se me ocurre una fórmula de suma para iterar sobre una matriz y cambiar el índice inicial con cada iteración?

Suponiendo que uno tenga una experiencia limitada en programación, matemáticas y neurociencia, ¿cómo se ingresa a un programa de posgrado para inteligencia artificial o neurociencia computacional?

Cómo calcular los componentes conectados, sin usar la función nx.connected_components (g) en NetworkX