synchronization replication apache-zookeeper

synchronization - Apache ZooKeeper: ¿Cómo funciona la escritura?



replication apache-zookeeper (1)

Apache ZooKeeper es un tipo de almacén de datos de alta disponibilidad para objetos pequeños. Un clúster de ZooKeeper consta de algunos nodos que guardan todo el conjunto de datos en su memoria. El conjunto de datos se llama "siempre consistente", por lo que cada nodo tiene los mismos datos en todo momento.

De acuerdo con la documentación y las publicaciones del blog , cada nodo del clúster puede responder y aceptar escrituras.

  • Las lecturas siempre son respondidas localmente por el nodo, por lo que no hay comunicación con el clúster.
  • Las escrituras se envían a un nodo "Líder" designado, que envía la solicitud de escritura a todos los nodos y espera sus respuestas. Si al menos la mitad de los nodos responde, la escritura se considera exitosa.

Pregunta: ¿Por qué es suficiente que el líder espere la mitad de los nodos para responder? Si alguien se conecta a uno de los nodos que no recibieron la actualización, obtiene un resultado desactualizado (solo lectura local a valor local).


Para lograr una alta disponibilidad de lectura, Zookeeper garantiza una consistencia débil en las réplicas: una lectura siempre puede ser respondida por un nodo cliente, y la respuesta devuelta puede ser un valor obsoleto (incluso una nueva versión se ha confirmado a través del líder ).

Entonces es responsabilidad de los usuarios decidir si la respuesta para una lectura es "obsoleta" o no, ya que no todas las aplicaciones requieren la información actualizada. Así que se proporcionan las siguientes opciones:

1) Si su aplicación no necesita valores actualizados para las lecturas, puede obtener una alta disponibilidad de lectura solicitando datos directamente al cliente.

2) Si su aplicación requiere valores actualizados para las lecturas, debe usar la API de "sincronización" antes de su solicitud de lectura para sincronizar la versión del lado del cliente con el líder.

Entonces, como conclusión, Zookeeper ofrece una garantía de consistencia personalizable, y los usuarios pueden decidir el equilibrio entre la disponibilidad y la consistencia.

Si desea obtener más información sobre los aspectos internos de Zookeeper, le recomiendo este documento: ZooKeeper: Coordinación sin esperas para sistemas a escala de Internet . La estrategia anterior se describe en la Sección 4.4.