2011-03-24 12 views
16

Apache ZooKeeper es un tipo de almacenamiento de datos de alta disponibilidad para objetos pequeños. Un clúster ZooKeeper se compone de algunos nodos que conservan todo el conjunto de datos en su memoria. El conjunto de datos se llama "siempre coherente", por lo que cada nodo tiene los mismos datos en todo momento.Apache ZooKeeper: cómo funcionan las escrituras

De acuerdo con la documentación y blog posts, todos los nodos del clúster pueden responder lecturas y aceptar escrituras.

  • Las lecturas siempre son respondidas localmente por el nodo, por lo que no se requiere comunicación con el clúster.
  • Las escrituras se envían a un nodo designado "Líder", que reenví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 respuesta de la mitad de los nodos? Si alguien se conecta a uno de los nodos que no recibió la actualización, obtiene un resultado desactualizado (solo lectura local a valor local).

Respuesta

17

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

A continuación, es responsabilidad del usuario decidir si la respuesta para una lectura es "obsoleta" o no, ya que no todas las aplicaciones requieren la información actualizada. Por lo tanto, 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 del cliente.

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

Como conclusión, Zookeeper proporciona una garantía de coherencia personalizable, y los usuarios pueden decidir el equilibrio entre la disponibilidad y la coherencia.

Si quiere saber más sobre las funciones internas de Zookeeper, recomiendo este artículo: ZooKeeper: Wait-free coordination for Internet-scale systems. La estrategia anterior se describe en la Sección 4.4.

Cuestiones relacionadas