¿Qué es Zookpeer? ¿Cómo funciona en el sistema?
Echemos un vistazo a lo que tiene para ofrecer y luego veamos qué podemos hacer con él.
En pocas palabras, zookeeper = sistema de archivos + mecanismo de notificación.
Zookeeper mantiene una estructura de datos similar a un sistema de archivos:
Cada proyecto de subdirectorio (como NameService) se llama znode. Al igual que el sistema de archivos, podemos agregar y eliminar libremente. znode y agregar y eliminar sub-znodes bajo un znode. La única diferencia es que znode puede almacenar datos.
El cliente se registra para escuchar los nodos del directorio que le interesan y zookeeper notificará al cliente cuando los nodos del directorio cambien (cambios de datos, eliminaciones, nodos de subdirectorio agregados o eliminados).
Esto parece ser lo más fácil de hacer: crear un directorio con una ruta única en el sistema de archivos de zookeeper. Cuando no podemos usar tborg para determinar la máquina de implementación del programa ascendente, podemos acordar una ruta con el programa descendente y descubrirnos unos a otros a través de esa ruta, y luego ver qué sucede.
Los programas siempre deben configurarse. Si el programa se implementa en varias máquinas, será difícil cambiar la configuración una por una.
Puede colocar todas estas configuraciones en Zookeeper y guardarlas en uno de los nodos del directorio de Zookeeper, y luego todas las aplicaciones relevantes escucharán el nodo del directorio y, una vez que cambie la información de configuración, cada aplicación Todos los programas recibir notificaciones de Zookeeper y luego obtener nueva información de configuración de Zookeeper y aplicarla al sistema. Luego, la nueva información de configuración se recupera de Zookeeper y se aplica al sistema.
A la gestión del cluster no le importan dos cosas: si una máquina sale y se une, y la elección del maestro.
Para el primer punto, todas las máquinas acuerdan crear un nodo de directorio temporal en el directorio principal GroupMembers y luego escuchar el nodo del directorio principal en busca de mensajes sobre cambios en sus subdirectorios. Una vez que una máquina cuelga, se desconectará de zookeeper, el nodo de directorio temporal que creó también se eliminará y todas las demás máquinas recibirán una notificación de que uno de los directorios hermanos ha sido eliminado, para que todos sepan: está fuera de servicio. bote. Por supuesto, si se agregan nuevas máquinas, la situación será similar: se notificará a todas las máquinas: se agregó un nuevo directorio de pares, el recuento alto está disponible nuevamente y hay alguien a bordo.
Para el segundo punto, asumimos que la máquina crea nodos de directorio temporales numerados secuencialmente, y cada vez la máquina con el número más pequeño se selecciona como nodo maestro.
Con el consistente sistema de archivos de zookeeper, los problemas de bloqueo se vuelven simples. Los servicios de cierre se pueden dividir en dos categorías, una para mantener la exclusividad y otra para controlar el tiempo.
Para la primera categoría, tratamos el znode en zookeeper como un bloqueo y lo implementamos creando el znode. Todos los clientes crearán un nodo /distribute_lock y el cliente que cree con éxito el nodo será el propietario del bloqueo. El inodoro dirá: "Descarga, descarga, descarga. Cuando termines de usarlo, elimina el nodo de bloqueo del atributo creado y libera el bloqueo".
Para la segunda categoría, /distribute_lock es preexistente y todos los clientes crean nodos de directorio temporales numerados secuencialmente debajo de él. Al igual que el nodo maestro, el nodo con el número más bajo obtiene el bloqueo y los nodos que se eliminan después de su uso obtienen el bloqueo para facilitar las operaciones.
Dos tipos de cola:
1. Cola sincrónica, la cola está disponible cuando los miembros de la cola están reunidos; de lo contrario, está esperando a que lleguen todos los miembros.
2. La cola entra y sale de la cola siguiendo el orden de primero en entrar, primero en salir.
En la primera categoría, creamos un nodo de directorio temporal en el directorio acordado y escuchamos la cantidad de nodos que necesitamos.
El segundo tipo es básicamente el mismo que el esquema de tiempo controlado en el servicio de bloqueo distribuido, es decir, la cola entrante está numerada y la cola saliente está numerada.
Hay tres tipos principales de roles en Zookeeper:
El modelo del sistema se muestra en la figura:
El núcleo de Zookeeper es la transmisión atómica, que es una forma de garantizar que exista un único mecanismo de sincronización entre servidores. El protocolo que implementa este mecanismo se llama protocolo Zab. El protocolo Zab tiene dos modos, a saber, el modo de recuperación (selección maestra) y el modo de transmisión (sincronización). Zab ingresa al modo de recuperación cuando se inicia el servicio o después de que el líder falla, y finaliza después de que se elige al líder y la mayoría de los servidores están sincronizados con el líder. La sincronización de estados garantiza que los líderes y servidores tengan el mismo estado del sistema.
Para garantizar que las transacciones sean consistentes secuencialmente, zookeeper utiliza ID de transacción incrementales (zxid) para identificar las transacciones. En implementación, zxid es un número de 64 bits. Los 32 bits superiores se utilizan para la época para determinar si la relación del líder ha cambiado. Cada vez que se elige un líder, se le asigna una nueva época para determinar el período de tiempo que lleva siendo líder hasta el momento. Los 32 bits inferiores se utilizan para contar.
Cada servidor tiene tres estados operativos:
Cuando el líder falla o pierde a la mayoría de sus seguidores, Zk entrará en modo de recuperación, lo que requiere la reelección de un nuevo líder para que. Todos los servidores se pueden restaurar a su estado correcto. Hay dos algoritmos de elección: uno basado en la implementación básica de paxos y el otro basado en el algoritmo rápido de paxos. El algoritmo de elección predeterminado del sistema es paxos rápidos. Primero, introduzca el proceso básico de Paxos:
Al analizar este proceso, podemos concluir: para que el líder sea compatible con la mayoría de los servidores, el número total de servidores debe ser un número impar de 2n+1. y sobrevivir El número de servidores no debe ser inferior a n+1.
Después de elegir al líder, zk no podrá restaurar el estado correcto de todos los servidores. Una vez elegido el líder, zk ingresa al proceso de sincronización estatal.
El líder tiene tres funciones principales:
El mensaje PING es la información de latido del alumno; el mensaje SOLICITUD es la información de propuesta enviada por el seguidor, incluidas las solicitudes de escritura y las solicitudes de sincronización. ; mensaje ACK Es la respuesta del Seguidor a la propuesta; si más de la mitad de los Seguidores aprueban la propuesta, se enviará la propuesta para extender la validez de la SESIÓN;
A continuación se muestra un diagrama simplificado del flujo de trabajo de un líder. En la ejecución real, el proceso es mucho más complicado que en la figura siguiente y es necesario iniciar tres subprocesos para implementar la función.
El seguidor tiene cuatro funciones principales:
El bucle de mensajes del seguidor procesa los siguientes tipos de mensajes del líder:
El diagrama de flujo de trabajo del seguidor es el siguiente. En la implementación real, El seguidor implementa estas funciones a través de cinco subprocesos.
/kf/201708/668587.html
/milhua/article/details/78931672
Adjunto: Leí este artículo sobre ZK en Internet Después del artículo, está compilado como una comprensión básica. Personalmente, creo que después de leer el contenido anterior, puedo tener una comprensión básica del papel de Zookeeper. Más tarde, puedo profundizar mi comprensión al combinarlo con proyectos reales.
Fin