Introducción y protocolo de ZooKeeper
Las aplicaciones distribuidas pueden implementar publicación/suscripción de datos, equilibrio de carga, servicios de nombres y coordinación/notificación distribuida basada en Zookeeper. , gestión de clústeres, elección maestra, bloqueos distribuidos y colas distribuidas y otras funciones. Zookeeper proporciona un espacio de nombres de nodos de varias capas (los nodos se denominan znodes). A diferencia del sistema de archivos, en el sistema de archivos, solo los nodos de archivo pueden guardar datos, pero no los nodos de directorio. Estos nodos pueden guardar datos relacionados.
Zookeeper mantiene esta estructura de directorios en forma de árbol en la memoria para garantizar un alto rendimiento y una baja latencia. Esta característica hace que Zookeeper sea inutilizable para almacenar grandes cantidades de datos y el límite de datos para cada nodo es 1 M.
(1) PERSISTENTE-nodo persistente
A menos que se elimine manualmente, el nodo siempre existe en Zookeeper
(2) EPÍMERO-nodo temporal
El ciclo de vida de los nodos temporales está asociado con la sesión del cliente. Una vez que la sesión del cliente falla (que el cliente se desconecte de zookeeper no significa necesariamente que la sesión falle), todos los nodos temporales creados por el cliente se eliminarán.
(3) PERSISTENT_SEQUENTIAL-Nodos secuenciales persistentes
Las características básicas son las mismas que las de los nodos persistentes, excepto que se agrega el atributo de secuencia y se agrega un número entero incremental mantenido por el nodo principal. añadido al nombre del nodo.
(4) EPHEMERAL_SEQUENTIAL-Nodo secuencial temporal
Las características básicas son las mismas que las de los nodos temporales, excepto que se agrega el atributo de secuencia y se agrega un número entero creciente automáticamente mantenido por el nodo principal. añadido al nombre del nodo.
Zookeeper permite al cliente registrar un observador oyente con Znode del lado del servidor. Cuando algunos eventos específicos en el lado del servidor activan el observador, el lado del servidor enviará notificaciones de eventos al cliente especificado para lograr una notificación distribuida, y luego el cliente realizará cambios comerciales según el estado y el tipo de evento notificado por el observador. Luego, el cliente realiza cambios comerciales según el estado y el tipo de evento notificado por el observador.
Flujo de trabajo:
Características del observador:
Notas:
Zookeeper elige CP en la teoría CAP
Zookeeper lo hará detendrá el servicio cuando se elija un líder y dejará de brindar servicios hasta que la elección sea exitosa, lo que significa que el servicio no está disponible. El servicio no está disponible, pero después de que la elección sea exitosa, debido a la estructura de un maestro y varios esclavos, zookeeper sigue siendo un registro de alta disponibilidad en este momento. Zookeeper solo considerará la disponibilidad cuando garantizar la coherencia sea una prioridad.
El servidor tiene cuatro estados: MIRAR, SEGUIR, LIDERAR y OBSERVAR.
(1) MIRAR: Buscando el estatus de líder. Cuando el servidor está en este estado, asume que no hay ningún líder en el clúster actual y, por lo tanto, necesita ingresar al estado de elección de líder.
(2) SIGUIENTE: siguiente estado: estado de seguidor. Indica que la función del servidor actual es la de seguidor.
(3) LIDERAZGO: Estatus de líder: Estatus de líder. Indica que el rol actual del servidor es Líder.
(4) OBSERVADOR: condición de observador. Indica que la función del servidor actual es la de observador.
El protocolo ZAB es un protocolo de coherencia diseñado específicamente para admitir la recuperación tras fallos del servicio de coordinación distribuida ZooKeeper. Basado en este protocolo, ZooKeeper implementa una arquitectura de sistema modelo maestro-esclavo para mantener la coherencia de los datos entre las réplicas del clúster.
El protocolo ZAB incluye dos modos básicos: recuperación de fallos y transmisión de mensajes.
La transmisión de mensajes se utiliza principalmente para la sincronización de datos entre clústeres. El protocolo utilizado es similar al protocolo 2PC en transacciones distribuidas:
(1) El líder convierte la solicitud del cliente en propuesta
. p>
(2) El líder prepara una cola FIFO para cada seguidor y envía la propuesta a la cola. Cuando todo el clúster de cuidadores del zoológico acaba de iniciarse, o el servidor líder falla o se reinicia, o una falla de la red impide que más de la mitad de los servidores se comuniquen con el servidor líder, todos los procesos (servidores) ingresarán al modo de recuperación de fallas
Para garantizar un orden coherente de las transacciones, ZooKeeper utiliza un ID de transacción que se incrementa globalmente para identificar las transacciones, y todas las propuestas se identifican mediante un zxid. El zxid es en realidad un número de 64 bits, donde los 32 bits superiores son la época (ciclo; época; generación; nueva época) que identifica el ciclo del líder. Si se crea un nuevo líder, la época se incrementa, mientras que los 32 inferiores. Los bits se utilizan para calcular transacciones incrementalmente.
Cuando se elige al líder, el líder tiene el ZXID más grande del mundo, por lo que la fase de sincronización consiste en sincronizar datos con el nodo seguidor en función del registro de transacciones del líder: