El documento que menciona es importante por 2 razones:
- Muestra que no existe un algoritmo de consenso determinista asíncrono que tolere incluso un solo fallo de bloqueo. Tenga en cuenta que en la configuración sincrónica , hay un algoritmo determinista que termina en rondas de cuando ≤ f procesa el bloqueo.F+ 1≤ f
- Introduce la bivalencia y la univalencia de configuraciones (*), que se utilizan en muchos límites inferiores y pruebas de imposibilidad más adelante.
Aplicaciones
Una aplicación importante del problema del consenso es la elección de un coordinador o líder en un entorno tolerante a fallas para iniciar alguna acción global. Un algoritmo de consenso le permite hacer esto sobre la marcha, sin fijar un "supernodo" de antemano (lo que introduciría un único punto de falla).
Otra aplicación es mantener la coherencia en una red distribuida: suponga que tiene diferentes nodos de sensores que monitorean el mismo entorno. En el caso de que algunos de estos nodos de sensores se bloqueen (o incluso comiencen a enviar datos corruptos debido a una falla de hardware), un protocolo de consenso asegura la solidez frente a tales fallas.
(*) Una ejecución de un algoritmo distribuido es una secuencia de configuraciones. Una configuración es un vector de los estados locales de los procesos. Cada proceso ejecuta una máquina de estado determinista. Cualquier algoritmo de consenso correcto debe eventualmente alcanzar una configuración en la que cada proceso haya decidido (irrevocablemente) sobre el mismo valor de entrada. Una configuración es 1 - valent si, sin importar lo que haga el adversario, todas las extensiones posibles de C conducen a un valor de decisión de 1 . Análogamente, podemos definir 0 - valencia . Una configuración C es bivalente si ambas decisiones son accesibles desde CC1C10 0CC(cuál de los dos se alcanza depende del adversario). Claramente, ningún proceso puede haberse decidido en una configuración bivalente , ya que de lo contrario obtenemos una contradicción de acuerdo. Entonces, si podemos construir una secuencia infinita de tales configuraciones bivalentes, hemos demostrado que no hay un algoritmo de consenso en esta configuración.C
Muestra que no hay algoritmo determinista tolerante a fallas. Un resultado teórico bastante fuerte, que obliga a los diseñadores a tratar de manera diferente la tolerancia a fallas, algunas de las cuales son sincronización y aleatorización.
Comentario: en mi opinión, la sincronización es una suposición adicional del sistema que apenas se encuentra en aplicaciones prácticas.
Para referencias, consulte el enlace de Wikipedia . Consulte también este blog para aplicaciones prácticas
fuente
Una razón por la cual los problemas de consenso son importantes es que son muy simples y son una especie de problemas universales para los sistemas informáticos distribuidos.
Si podemos resolver el consenso en un sistema distribuido asíncrono, podemos usarlo para linealizar acciones en objetos compartidos y obtener linealidad para objetos compartidos.
Para simplificar, ¿en cuántos problemas puede pensar que son más simples que acordar un valor?
El resultado de imposibilidad sobre el consenso en sistemas distribuidos asíncronos (puros) nos dice que no podemos resolver los problemas que queremos resolver en sistemas distribuidos asíncronos (puros) sin algunas "cosas" adicionales. Esto conduce a modelos asíncronos donde podemos resolver el consenso, por ejemplo, algoritmos aleatorios, detectores de fallas, modelos de sincronización parcial, etc.
Esta es también la razón por la cual, en la práctica, los algoritmos que resuelven el consenso como Paxos de Lamport, Chubby de Google, Apache ZooKeeper y más recientemente Raft están en el núcleo de los sistemas distribuidos donde a menudo queremos replicar un estado entre servidores.
fuente
Solo agregaría que la naturaleza del cálculo se está distribuyendo cada vez más en la pila: muchas CPU, muchos procesos en una máquina, muchas máquinas conectadas por LAN, muchas LAN conectadas por Internet.
Esto hace que el problema del estado común (distribuido / global) sea primordial: cada algoritmo asume cierto estado y si el cálculo se realiza en más de un lugar, entonces el estado también debe distribuirse.
Los artículos influyentes ( Paxos , y más recientemente Raft ) en este dominio se publicaron después del documento que está citando. Ambos abordan las cuestiones de consenso en presencia de algunos fracasos.
Los errores bizantinos se pueden evitar en sistemas distribuidos utilizando pocos enfoques.
Echa un vistazo a la entrada de Wikipedia sobre la tolerancia bizantina a las fallas .
fuente