¿Qué es el acuerdo de Zab?
Zookeeper utiliza el protocolo Zab para garantizar la coherencia final de las transacciones distribuidas .
1. protocolo Zab es un servicio de coordinación para Zookeeper distribuido diseñado para soportar la recuperación de bloqueo de protocolo de difusión atómica , para garantizar la coherencia de datos es Zookeeper algoritmos básicos. Zab toma prestado del algoritmo de Paxos, pero a diferencia de Paxos, es un algoritmo general de consenso distribuido. Es un protocolo de transmisión atómica diseñado específicamente para Zookeeper para soportar la recuperación de fallas .
2. Zookeeper se basa principalmente en el protocolo Zab para lograr la consistencia de los datos. Basado en este protocolo, zk implementa una arquitectura de sistema de los modelos principales y en espera (es decir, los modelos Leader y Follower) para garantizar la consistencia de los datos entre las copias en el clúster.
Caracteristicas
1. El protocolo Zab necesita asegurar que las transacciones que se han confirmado en el servidor líder (Commit) eventualmente sean enviadas por todos los servidores
2. El protocolo Zab debe garantizar que las transacciones que solo se generan en el líder y no se envíen se descarten .
Efecto
1. El uso de un único proceso maestro (Líder) para recibir y solicitud de transacción del cliente proceso (es decir, la solicitud por escrito), y utiliza el protocolo de emisión atómica Zab, el estado de los cambios en los datos del servidor a la propuesta de transacción (propuestas de transacción) en forma de Difusión a todos los procesos de copia (seguidor)
2. Asegúrese de que una secuencia de cambio global se referencia secuencialmente
Etapa
Encontrado
Se requiere que el grupo del cuidador del zoológico elija un proceso de líder, y el líder mantendrá una lista de clientes disponibles para el seguidor. Los clientes pueden comunicarse con estos nodos seguidores en el futuro
Sincronización
Leader es responsable de sincronizar sus propios datos con Follower para lograr el almacenamiento de copias múltiples. Esto también proporciona alta disponibilidad y tolerancia a fallas en CAP. El seguidor escribe las solicitudes no procesadas en la cola en el registro de transacciones local después del consumo
Broadcast
El líder puede aceptar la nueva solicitud de propuesta de transacción del cliente y transmitir la nueva solicitud de propuesta a todos los seguidores
Núcleo
Define cómo manejar las solicitudes de transacción
1. Todas las solicitudes de transacciones deben ser coordinadas y procesadas por un servidor único a nivel mundial, que se llama servidor líder . El resto de los servidores son servidores seguidores
2. servidor Leader es responsable de un solicitudes de transacciones del cliente, convertida en una Propuesta transacción , la propuesta y se distribuye a todos los servidores de clúster seguidor, que se emite para enviar solicitudes de datos a todos los nodos del seguidor (o la replicación de datos)
3. Después de la distribución, el servidor Leader debe esperar los comentarios de todos los servidores Follower (solicitudes Ack). En el protocolo Zab, siempre y cuando más de la mitad de los servidores Follower hayan recibido comentarios correctos (es decir, se hayan recibido más de la mitad de las solicitudes Ack Follower), El Líder enviará un mensaje de Compromiso a todos los servidores de Follower nuevamente, solicitándole que confirme la última propuesta de transacción
Contenido del acuerdo de Zab
El protocolo Zab incluye dos modos básicos: recuperación de fallas y transmisión de mensajes.
Mantenga los mensajes en orden.
Transmisión de mensajes
Pasos
1. El cliente inicia una solicitud de operación de escritura
2. El servidor Leader convierte la solicitud del cliente en una propuesta de propuesta de transacción y asigna una ID global a cada propuesta, a saber, zxid
3. El servidor Líder asigna una cola separada para cada servidor Seguidor, y luego coloca la Propuesta para ser transmitida en la cola a su vez, y envía mensajes de acuerdo con la política FIFO.
4. Después de que el seguidor reciba la propuesta, primero la escribirá en el disco local en forma de registro de transacciones. Después de una escritura exitosa, enviará un mensaje de respuesta de reconocimiento al líder
5. Después de que el Líder recibe más de la mitad del mensaje de respuesta de Ack del seguidor, considera que el mensaje se ha enviado correctamente y puede enviar un mensaje de confirmación
6. El Líder difunde el mensaje de confirmación a todos los Seguidores y, al mismo tiempo, completará la confirmación de la transacción. Después de que el seguidor recibe el mensaje de confirmación, confirmará la última transacción
- Siempre que un servidor envíe la Propuesta, es necesario asegurarse de que todos los servidores finalmente puedan enviar la Propuesta correctamente. Esto también es una manifestación de CAP / BASE logrando la máxima consistencia
-
Se mantiene una cola de mensajes FIFO separada entre el servidor Líder y cada servidor Seguidor para enviar y recibir mensajes. El uso de mensajes en cola puede lograr un desacoplamiento asíncrono. Líder y seguidor solo necesitan enviar mensajes a la cola
Recuperación de choque
Cómo el protocolo Zab garantiza la consistencia de los datos
Dos situaciones anormales
1. Se envió una transacción al líder, y más de la mitad del seguidor respondió a Ack, pero el líder colgó antes de que se emitiera el mensaje de confirmación
2. Suponga que una transacción se cuelga después de que el líder lo propone
Los requisitos de recuperación ante fallos del protocolo Zab cumplen los dos requisitos siguientes:
1. Asegúrese de que la propuesta que ha enviado el Líder debe ser presentada finalmente por todos los servidores de Follower
2. Asegúrese de descartar la Propuesta propuesta por el Líder pero no presentada
requisitos del líder
1. El líder recién elegido no puede contener una propuesta no comprometida
2. El nodo Líder recién elegido contiene el zxid más grande
Cómo sincronizar datos en Zab
1. Después de completar la elección del Líder (el nuevo Líder tiene el zxid más alto), y antes de comenzar oficialmente el trabajo (recibir la solicitud de transacción y luego proponer una nueva Propuesta), el servidor del Líder primero confirmará si todas las Propuestas en el registro de transacciones se han agrupado Más de la mitad del servidor Commit
2. El servidor Leader debe asegurarse de que todos los servidores Follower puedan recibir la Propuesta de cada transacción y puedan aplicar la Propuesta de todas las transacciones confirmadas a los datos de la memoria. Después de que el seguidor sincroniza todas las transacciones pendientes Propuesta del servidor del líder y lo aplica a los datos de la memoria, el líder agregará el seguidor a la lista de seguidores realmente disponibles
Cómo lidiar con una propuesta que debe descartarse durante la sincronización de datos de Zab
En el diseño zxid del número de transacción de Zab, zxid es un número de 64 bits
Los 32 bits inferiores se pueden considerar como un simple contador de un solo incremento . Para cada solicitud de transacción del cliente, el Líder aumentará el contador en 1 cuando genere una nueva transacción de Propuesta. Los 32 bits superiores representan el número de época del ciclo líder .
Principio de implementación de Zab
- Siguiente: el nodo actual es un seguidor y obedece los comandos del nodo líder
- Líder: El nodo actual es el Líder, responsable de coordinar las transacciones.
- Elección / Mirada: el nodo está en estado de elección y está buscando al líder
que se añade después de la introducción Zookeeper Observador Observador no participa en las elecciones, el nodo está, nada que ver con el acuerdo de Zab de sólo lectura
- historial: registro de la transacción Propuesta recibida por el nodo actual
- aceptadoEpoca: el seguidor ha aceptado la nueva propuesta de Líder de Época para cambiar la época
- currentEpoch: la era actual del Líder
- lastZxid: el zxid (zxid máximo) de la propuesta recibida más recientemente en la historia
Las cuatro etapas de Zab.
Etapa electoral
Zookeeper estipula que todos los votos válidos deben estar en la misma ronda. Cuando cada servidor comienza una nueva ronda de votación, incrementará el reloj lógico que mantiene.
Fase de descubrimiento
El objetivo principal de esta etapa es descubrir la última Propuesta recibida por la mayoría de los nodos actuales, y el cuasi-Líder genera una nueva época para que los seguidores reciban y actualicen su Época aceptada.
Fase de sincronización
La fase de sincronización utiliza principalmente el último historial de propuestas obtenido en la fase anterior de Leader para sincronizar todas las réplicas en el clúster
Etapa de transmisión
Cabe señalar que las transacciones de envío de Zab no requieren que todos los seguidores sean Ack como 2PC, solo necesitan obtener Ack de quórum (más de la mitad de los nodos).