Un estudio preliminar sobre las funciones y principios de ZooKeeper
¿ZooKeeper? Hay varios conceptos importantes, que se resumen brevemente a continuación:
Hay tres roles principales en ZooKeeper: líder, seguidor y observador
Solo hay un líder en el clúster de ZooKeeper en al mismo tiempo. Otros roles son seguidores u observadores.
Todas las máquinas en el clúster de ZooKeeper elegirán una máquina llamada "líder" a través de un proceso de elección de líder, y luego el servidor líder proporcionará servicios de lectura y escritura al cliente.
El seguidor y el observador brindan servicios de lectura, no de escritura. La única diferencia entre los dos es que la máquina observadora no participa en el proceso de elección del líder ni en la política de "éxito de media escritura" para las operaciones de escritura, por lo que los observadores pueden mejorar el rendimiento de lectura del clúster sin afectar el rendimiento de escritura. .
Cada proyecto de subdirectorio (como NameService) se llama znode. Al igual que el sistema de archivos, podemos agregar y eliminar znodes libremente, así como agregar y eliminar sub-znodes bajo znode. ese znode puede almacenar datos.
La sesión es la sesión del cliente. En ZooKeeper, una conexión de cliente es una conexión TCP de larga duración entre el cliente y el servidor de ZooKeeper.
El puerto de servicio externo de ZooKeeper tiene como valor predeterminado 2181. Cuando el cliente se inicia, primero establecerá una conexión TCP con el servidor. Desde el establecimiento de la primera conexión, comienza el ciclo de vida de la sesión del cliente. A través de esta conexión, el cliente puede mantener una sesión válida con el servidor a través de la detección de latidos, también puede enviar solicitudes del servidor ZooKeeper y recibir respuestas del servidor ZooKeeper, y recibir notificaciones de eventos Watch del servidor a través de esta conexión.
El valor SessionTimeout de la sesión se utiliza para establecer el tiempo de espera de la sesión del cliente. Cuando un cliente se desconecta debido a una tensión en el servidor, una falla de la red o una desconexión de un cliente activo, las sesiones creadas previamente siguen siendo válidas siempre que se vuelva a conectar a cualquier servidor agrupado dentro del tiempo especificado por SessionTimeout.
La estructura de zookeeper es en realidad un árbol. El líder es el nodo raíz, los otros nodos son nodos seguidores y cada nodo conserva su propio contenido.
Hay dos tipos de nodos en zookeeper: nodos persistentes y nodos temporales
Nodos persistentes: Los nodos persistentes se refieren a nodos que, una vez creados en la estructura de árbol, permanecerán en ZooKeeper. a menos que se elimine activamente del árbol.
Nodos temporales: 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, todos los nodos temporales creados por el cliente se eliminarán.
Hay cuatro tipos de znode:?
1.PERSISTENT-¿Nodo de directorio persistente?
Después de que el cliente se desconecta de zookeeper, ¿el nodo todavía existe?
2.PERSISTENT_SEQUENTIAL - ¿Nodos de directorio persistentes numerados secuencialmente?
Después de que el cliente se desconecta de zookeeper, el nodo todavía existe, pero ¿Zookeeper numera secuencialmente los nombres de los nodos?
3.EPHEMERAL-nodo de directorio temporal?
Después de que el cliente se desconecte de zookeeper, ¿se eliminará el nodo?
4.EPHEMERAL_SEQUENTIAL-¿Nodo de directorio de números secuenciales temporales?
Después de que el cliente se desconecta de zookeeper, el nodo se eliminará, pero ¿Zookeeper numerará secuencialmente el nombre del nodo?
Además del contenido de los datos, cada nodo también almacena información de estado sobre el propio nodo. Puede usar el comando get para obtener tanto el contenido como el estado de un nodo.
En ZooKeeper, el atributo de versión se usa para implementar "sumas de verificación de escritura" en el mecanismo de bloqueo optimista (para garantizar la atomicidad de los datos distribuidos). ).
El núcleo de Zookeeper es la transmisión atómica, un mecanismo que garantiza la 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 (seleccionar el servidor maestro) 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 se han sincronizado con el estado completo del líder. La sincronización de estados garantiza que los líderes y servidores tengan el mismo estado del sistema.
En ZooKeeper, las operaciones que pueden cambiar el estado de un servidor ZooKeeper se denominan transacciones. Por lo general, incluyen operaciones como la creación y eliminación de nodos de datos, la actualización del contenido de los datos, la creación y caducidad de la sesión del cliente, etc. Para cada solicitud de transacción, para garantizar la coherencia de la secuencia de la transacción, ZooKeeper asignará un ID de transacción único a nivel mundial, representado por ZXID, que suele ser un número de 64 bits. Cada ZXID corresponde a una operación de actualización y, a través de estos ZXID, puede determinar indirectamente el orden global en el que ZooKeeper maneja estas solicitudes de transacción.
ZooKeeper permite a los usuarios registrar múltiples observadores en un nodo determinado. Cuando se activan ciertos eventos, el servidor ZooKeeper notificará a los clientes interesados sobre el evento. Este mecanismo es una característica importante de la implementación de servicios de coordinación distribuida de ZooKeeper.