Coordinación Distribuida con Apache Zookeeper

Última actualización: 04/03/2024 – Oscar Fernandez

¿Alguna vez te has preguntado cómo grandes sistemas distribuidos logran sincronizarse sin caer en el caos? En este artículo, descubrirás cómo Zookeeper emerge como la solución para mantener la coherencia y consistencia en entornos de computación distribuida.

Introducción Apache Zookeeper

¿Qué es Apache Zookeeper?

Apache Zookeeper es una herramienta fundamental en entornos de computación distribuida, proporciona servicios de coordinación y sincronización que son críticos para mantener la coherencia y la consistencia en sistemas distribuidos a gran escala, como por ejemplo Kafka, NiFi, Hive, HBase o Spark.

Sirve a los sistemas distribuidos con una plataforma altamente confiable para la coordinación y gestión de recursos. Su modelo de datos se basa en los ZNodes, que son nodos en un árbol jerárquico similar a un sistema de archivos.

Zookeeper utiliza un conjunto de algoritmos y protocolos, como el algoritmo de elección de líder para proporcionar los servicios. Además, ofrece un mecanismo de bloqueo distribuido que permite a las aplicaciones controlar el acceso concurrente a los recursos compartidos.

Para qué sirve Zookeeper

Apache Zookeeper actúa como un servicio centralizado para mantener la configuración y la nomenclatura, y ofrece servicios de sincronización distribuida.

Zookeeper se puede utilizar para varias tareas, en función de las necesidades que tenga el sistema distribuido que lo implementa. Lo más común implementar protocolos de elección de líder, bloquear recursos en entornos distribuido y para gestionar el registro de nombres y la configuración distribuida como almacenamiento clave-valor.

Relación de Zookeeper con Kafka

Apache Zookeeper y Apache Kafka están estrechamente relacionados en entornos de computación distribuida. Zookeeper actúa como un servicio centralizado para almacenar metadatos críticos sobre los brokers de Kafka, los topics y las particiones.

Apache Kafka Logo

Zookeeper se utiliza para coordinar y sincronizar los nodos de Kafka, asegurando que los brokers estén disponibles y manteniendo la consistencia en los metadatos, lo que proporciona a Kafka alta disponibilidad.

Además, gestiona los estados de los consumidores y productores, lo que permite un equilibrio de carga eficiente y la recuperación ante fallos en Kafka.

En el momento en el que Zookeeper detecta que uno de los brokers de Kafka no funciona, inicia el protocolo de elección de nuevo broker para reemplazarlo y actualiza los metadatos que distribuyen la carga entre productores y consumidores. Estas acciones garantizan que no existe una pérdida de servicio.

A partir de la versión 3.3, Kafka proporciona un mecanismo de consenso alternativo a Zookeeper llamado KRaft, por lo que no necesita un disponer de un cluster de Zookeeper para funcionar. Además, añade utilidades de migración para clusters productivos que quieran dejar de utilizar Zookeeper.

Cómo funciona Zookeeper y cuál es su Arquitectura

Apache Zookeeper funciona mediante un conjunto de servidores distribuidos que forman un clúster. Utiliza un modelo de datos jerárquico similar a un sistema de archivos, donde los nodos, conocidos como ZNodes, representan datos.

La arquitectura de Zookeeper se basa en un algoritmo de elección de líder, donde un servidor es designado como líder y coordina las operaciones de escritura. Los demás servidores actúan como seguidores y replican los datos del líder para mantener la consistencia. Todos los servidores mantienen una copia en memoria de los datos del sistema, lo que permite una alta disponibilidad y tolerancia a fallos.

En el caso de el líder tenga un fallo, uno de los servidores seguidores es elegido como nuevo líder. De esta forma se puede seguir dando servicio. Generalmente, los clusters de Zookeeper se despliegan con 3 o 5 nodos para facilitar la finalización del protocolo de consenso.

Cuando un cliente envía una solicitud a Zookeeper, esta se enruta al líder, que procesa la operación y propaga los cambios a los seguidores. El mecanismo garantiza la consistencia fuerte, lo que significa que todas las operaciones de lectura reflejarán el estado más reciente de los datos. Además, ofrece mecanismos de bloqueo distribuido para controlar el acceso concurrente a los recursos compartidos.

Entendiendo los ZNodes: La clave para la coordinación y sincronización

Los ZNodes son elementos fundamentales en Apache Zookeeper, ya que representan unidades de datos dentro de la estructura jerárquica del servicio. Cada ZNode puede contener información, como configuraciones, metadatos o señales de estado, y puede ser creado, modificado o eliminado por los clientes de Zookeeper.

La clave para la coordinación y sincronización en Zookeeper radica en el manejo de los ZNodes. Los clientes pueden realizar operaciones de lectura y escritura en estos nodos para coordinar actividades entre los diferentes nodos de un sistema distribuido.

Por ejemplo, los ZNodes pueden utilizarse para implementar patrones de bloqueo distribuido, donde los clientes compiten por la creación y adquisición de locks en nodos específicos para garantizar la exclusión mutua en el acceso a recursos compartidos.

Además, los ZNodes pueden ser configurados para tener watchs, lo que permite a los clientes recibir notificaciones cuando se producen cambios en un nodo específico. Esta capacidad es fundamental para implementar patrones de reacción a eventos en sistemas distribuidos, permitiendo a los nodos coordinar acciones en respuesta a cambios en el estado de otros nodos.

Manejo de Locks: Garantizando la coherencia en entornos distribuidos

El manejo de locks o bloqueos con Apache Zookeeper permite evitar problemas de concurrencia en entornos distribuidos. Es el mecanismo que permite a los clientes controlar el acceso concurrente a recursos compartidos de manera segura.

Cuando un cliente necesita adquirir un lock para acceder a un recurso compartido, intenta crear un ZNode con el tipo de lock deseado en un directorio específico en Zookeeper. Si el lock está disponible, la operación de creación del ZNode tiene éxito y el cliente adquiere el lock. Si otro cliente intenta crear el mismo lock mientras está ocupado, Zookeeper garantiza un orden de acceso justo basado en el orden de llegada de las solicitudes, evitando la posibilidad de condiciones de carrera.

Una vez que un cliente ha completado su tarea y no necesita más el lock, simplemente elimina el ZNode correspondiente, liberando así el lock y permitiendo que otros clientes lo adquieran. Este enfoque de manejo de locks con Zookeeper garantiza la exclusión mutua en el acceso a recursos compartidos, lo que contribuye a mantener la coherencia y la integridad de los datos en entornos distribuidos.

Cómo Instalar y Ejecutar Zookeeper en Linux

Primero, necesitas descargar Apache Zookeeper desde el sitio web oficial o mediante el gestor de paquetes de tu distribución Linux.

Por ejemplo, puedes descargarlo usando wget:

wget https://downloads.apache.org/zookeeper/zookeeper-X.X.X/apache-zookeeper-X.X.X-bin.tar.gz

Donde X.X.X es la versión que quieres descargar.

Utiliza el siguiente comando para descomprimir el archivo descargado:

tar -xzf apache-zookeeper-X.X.X-bin.tar.gz

Mueve el directorio extraído a la ubicación deseada en tu sistema:

mv apache-zookeeper-X.X.X /ruta/a/instalar/zookeeper

Cambia al directorio de instalación y copia el archivo de configuración de ejemplo:

cd /ruta/a/instalar/zookeeper/conf cp zoo_sample.cfg zoo.cfg

Edita zoo.cfg según tus necesidades, aquí puedes especificar el puerto o el directorio de datos.

Ahora, puedes iniciar Zookeeper ejecutando el siguiente comando desde el directorio de instalación:

bin/zkServer.sh start

Para detener Zookeeper, puedes usar:

bin/zkServer.sh stop

También puedes verificar el estado de Zookeeper con

bin/zkServer.sh status

Preguntas Frecuentes – FAQs

¿Es Zookeeper adecuado para aplicaciones pequeñas?

Sí, Apache Zookeeper puede usarse en aplicaciones pequeñas al igual que en aplicaciones más grandes. El uso de recursos que requiere es bajo en comparación con otras soluciones.

¿Cómo gestiona Zookeeper los fallos en los nodos de un sistema distribuido?

Zookeeper implementa protocolos de elección de líder, mediante mecanismos de quorum, que permiten llegar a consensos para responder a fallos en nodos y garantizar la estabilidad del sistema.

Deja una respuesta