Compartir tecnología

El principio subyacente de Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper es un servicio de coordinación distribuida de alta disponibilidad que se utiliza ampliamente en sistemas distribuidos para resolver el problema de coherencia de los sistemas distribuidos. A continuación se presentarán en detalle los principios subyacentes de ZooKeeper, incluida su arquitectura, modelo de datos, mecanismo central y protocolo de coherencia.

1. Arquitectura

ZooKeeper adopta una arquitectura maestro-esclavo, que generalmente consta de un líder y varios seguidores. También hay nodos observadores como nodos sin derecho a voto para compartir la presión de las solicitudes de lectura.

  • Líder: Responsable de manejar todas las solicitudes de escritura (solicitudes de transacción) y coordinar el protocolo de coherencia.
  • Seguidor: participe en la votación, sincronice el estado del líder y procese solicitudes de lectura.
  • Observador: No participa en la votación, solo procesa solicitudes de lectura y reenvía solicitudes de escritura de los clientes.

2. modelo de datos

ZooKeeper almacena datos en una estructura de árbol similar a un sistema de archivos y cada nodo se denomina znode.

  • nodo z: Nodo de datos con ruta, datos e información de estado.
  • nodo persistente: un nodo sobrevive a la desconexión de un cliente a menos que se elimine explícitamente.
  • Nodo efímero: El nodo se elimina automáticamente cuando el cliente se desconecta.
  • nodo secuencial: Al nodo se le añade automáticamente un número de secuencia incremental cuando se crea.

3. Mecanismo central

3.1. Gestión de sesiones

Se establece una sesión entre cada cliente y el clúster de ZooKeeper para mantener el estado de la conexión y administrar los nodos temporales. ZooKeeper detecta el estado de la conexión del cliente a través del mecanismo de latido. Si no se recibe ningún latido dentro de un cierto período de tiempo, la sesión se considera desconectada.

3.2. Sincronización de datos

Para garantizar la coherencia de los datos de cada nodo, ZooKeeper adopta un mecanismo de sincronización de datos. Cuando el nodo líder procesa una solicitud de escritura, enviará la operación de cambio a todos los nodos seguidores. El nodo seguidor confirmará después de aceptar la operación de cambio y, en última instancia, el nodo líder decidirá si la operación de cambio es exitosa.

3.3. Mecanismo de notificación

ZooKeeper admite el mecanismo Watch. El cliente puede registrar Watch en el znode especificado. Cuando los datos o los nodos secundarios del znode cambien, ZooKeeper notificará al cliente.

4. Protocolo de coherencia

ZooKeeper utiliza un protocolo de coherencia llamado ZAB (Zookeeper Atomic Broadcast) para garantizar la coherencia de los datos. ZAB consta de dos fases: la fase electoral y la fase de transmisión.

4.1. Fase electoral

Cuando se inicia el clúster ZooKeeper o falla el nodo Líder, se requiere una elección para determinar un nuevo Líder. La fase electoral se divide principalmente en los siguientes pasos:

  1. votar: Todos los nodos votan por sí mismos y envían votos a otros nodos.
  2. recibir votos: Cada nodo recibe votos de otros nodos y cuenta los resultados de la votación.
  3. Actualizar encuesta: Si hay un candidato con más votos que usted en los votos recibidos, actualice su voto para ese candidato.
  4. Determinar líder: Cuando un candidato recibe más de la mitad de los votos, se convierte en el nuevo Líder.
4.2. Fase de difusión

Una vez que se determina el Líder, se ingresa a la fase de transmisión. El Líder es responsable de procesar la solicitud de escritura del cliente y transmitir la operación de cambio a todos los nodos Seguidores. Los pasos específicos son los siguientes:

  1. propuesta: Después de recibir la solicitud de escritura, el Líder genera una propuesta y la envía a todos los nodos Seguidores.
  2. confirmar: Después de recibir la propuesta, el nodo Seguidor realiza el registro y envía un mensaje de confirmación al Líder.
  3. entregar: Después de que el nodo Líder recibe más de la mitad de los mensajes de confirmación, envía la propuesta y notifica a todos los nodos Seguidores sobre el resultado del envío.
  4. Aplicar cambios: Después de que el nodo seguidor recibe la notificación de confirmación, aplica la operación de cambio.

5. Código de muestra

El siguiente es un ejemplo simple que usa ZooKeeper, que muestra cómo crear nodos, leer datos de nodos y registrar Watch.

5.1. Introduciendo dependencias

existir pom.xml Introduzca la dependencia del cliente ZooKeeper.

 

xmlCopiar código