Parte 3: Traducción de los artículos de Raft - Consenso: el puente entre la teoría y la práctica (algoritmo básico de Raft)
Tenemos varios objetivos al diseñar el algoritmo Raft: debe proporcionar una base algorítmica completa y práctica para la construcción del sistema, reduciendo así significativamente el trabajo de diseño requerido por los desarrolladores; debe ser seguro en todas las condiciones y estar disponible; en condiciones operativas típicas; para el funcionamiento rutinario, debe ser eficiente. Pero nuestro objetivo más importante y nuestro desafío más difícil es la comprensibilidad del algoritmo Raft. El algoritmo debe ser fácilmente comprendido por un gran número de lectores. Además, los desarrolladores deben poder guiar intuitivamente el desarrollo de ingeniería de algoritmos para que los creadores de sistemas sean conscientes de las inevitables extensiones de algoritmos cuando se enfrentan a problemas.
En el diseño de cimientos de balsa, tenemos que afrontar la elección de varios métodos factibles. En estos casos, evaluamos alternativas en función de la comprensibilidad: evaluamos qué tan difícil es explicar cada alternativa (por ejemplo, qué tan complejo es su espacio de estados, ¿hay algún contenido/información oculta compleja?) y tratamos de evaluar si el lector la comprende completamente. La dificultad del algoritmo Raft y su información implícita.
Somos conscientes de que este análisis es altamente subjetivo. No obstante, utilizamos dos técnicas factibles para evaluarlo. La primera es la deconstrucción del problema (descomponer un gran problema en varios problemas pequeños). Por ejemplo, dividimos el algoritmo Raft en tres partes: elección de líder, replicación de registros y seguridad. El segundo método consiste en reducir el espacio de estados de la máquina de estados reduciendo los estados a considerar, haciendo que el algoritmo de reconocimiento * * * sea lo más ordenado posible y eliminando la incertidumbre. Específicamente, el algoritmo Raft no permite agujeros en el registro (un agujero significa que no hay contenido correspondiente en una entrada, pero las entradas posteriores tienen contenido, lo cual es una deficiencia del algoritmo Paxos. El algoritmo Raft limita la posibilidad de). inconsistencia de registros (a través de Las restricciones en la elección del líder y la restricción de que solo el líder es la fuente de datos principal garantizan que los seguidores no se transmitan el contenido del registro entre sí, siempre que sean consistentes con el líder, lo que reduce las inconsistencias de registros en cada servidor) . Aunque intentamos evitar la incertidumbre en el algoritmo, a veces utilizamos esta incertidumbre para mejorar la comprensibilidad del algoritmo (esta es una manifestación del objetivo principal de la comprensibilidad). Por ejemplo, el método aleatorio introduce incertidumbre, pero puede reducir el espacio de estados (a través del método aleatorio, podemos evitar lidiar con varios problemas que pueden surgir en el sistema, como cuando se elige al líder, diferentes candidatos inician la siguiente ronda de elecciones). elecciones a través de horas extras, evitando así.
El algoritmo Raft es un algoritmo para administrar copias de registros en la forma descrita en la Sección 2.1. La Figura 3.1 resume el algoritmo como referencia, y la Figura 3.2 enumera las propiedades clave restantes del. Algoritmo de esto se discutirá en algunas secciones.
Raft primero selecciona un servidor como líder y luego hace que el líder sea totalmente responsable de administrar las réplicas de registros en el sistema. de los clientes y las copia a otros servidores y le dice al servidor cuándo es seguro aplicar entradas de registro a su máquina de estado. Simplifique la administración de copias de registros a través de la administración de Líder. Por ejemplo, el líder puede decidir colocar nuevas entradas en el registro. Al consultar otros servidores, los datos fluyen desde el líder a otros servidores (seguidores o candidatos) de manera sencilla. El líder puede fallar o desconectarse de otros servidores, en cuyo caso se seleccionará un nuevo líder. descompone el problema cognitivo en tres subproblemas relativamente independientes a través de un método basado en Leader:
Después de presentar el algoritmo de reconocimiento Raft***, este capítulo analiza la usabilidad. El papel de los problemas y el tiempo en el sistema (Sección 3.9) y extensiones opcionales para el cambio de líder entre servidores (Sección 3.10).
La Figura 3-1 muestra los elementos y operaciones clave en el algoritmo y el principio de Raft. Debido a que el panorama completo es demasiado grande, así de grande. La imagen está dividida en cuatro imágenes pequeñas para su explicación.
Figura 3-1 Estado (estado)
1. Estado persistente en todos los servidores (estado persistente en todos los servidores)
(En respuesta a la actualización de solicitud de RPC almacenamiento local persistente antes)
ltcenter style = " box-sizing: border-box; margin-top: 0px margin-bottom: 0px color: rgb(192, 192, 192); decoración del texto: subrayado; " gtFigura 3.2-2 Solicitud para votar RPC
(El candidato llama a esta solicitud para recolectar votos)
3.AppendEntries RPC es una solicitud RPC que se utiliza para sincronizar el registro Entradas entre líderes y seguidores. A través de esta solicitud RPC, el líder solicita a los seguidores que agreguen entradas de registro para lograr la sincronización de registros.
(Llamado por el líder para realizar una copia de seguridad de las entradas del registro, esta solicitud también realizará la función de verificación de latidos)
Para ilustrar el esquema de comparación entre prevLogIndex y prevLogTerm, consulte lo siguiente imagen.
Los términos del líder y seguidor en la figura son 3. Los logents en el líder son más nuevos que los de los seguidores, por lo que el líder debe enviar una solicitud AppendEntries para permitir que los seguidores sincronicen estos logents. Es decir, el índice de vista previa y el término de vista previa en la solicitud RPC son i-1 y 3 respectivamente. Cuando el seguidor recibe esta solicitud RPC, el índice de su entrada de registro actual es I-1 y el término es 3, lo que coincide con el índice de vista previa y el término de vista previa en el mensaje RPC, por lo que el seguidor puede completarlo con las entradas de registro en entradas[] Es de I a N. Si el índice de la última entrada de registro del seguidor (aquí llamado provisionalmente FollowerIndex) no es igual a i-1, hay dos situaciones. La primera es que el índice del seguidor lt ltCapítulo anterior: El propósito del algoritmo Raft Siguiente capítulo: Fundamentos del algoritmo Raft.