ZAB (Zookeeper Atomic Broadcast) es un protocolo de consenso de "atomic broadcast" diseñado específicamente para Apache ZooKeeper. Su propósito principal es mantener el estado consistente y replicado de un servicio de coordinación distribuido. ZAB garantiza que todas las actualizaciones de estado (transacciones) sean entregadas a todos los nodos del clúster en el mismo orden global (total order) y de forma atómica (all-or-nothing), incluso frente a fallos de nodos o de red. Opera en un modelo de líder-seguidor, donde un líder es elegido para secuenciar y proponer transacciones, y los seguidores replican y persisten estas transacciones una vez que un quórum las ha aceptado.
La implementación más prominente de ZAB se encuentra en Apache ZooKeeper, un servicio centralizado para mantener información de configuración, nombrar, proporcionar sincronización distribuida y servicios de grupo. ZooKeeper, a su vez, es utilizado por una multitud de sistemas distribuidos de alto perfil como Apache Kafka (para la gestión de metadatos de brokers y temas), Apache Hadoop HDFS (para la gestión de NameNodes en modo de alta disponibilidad), Apache HBase (para la coordinación de regiones y la detección de fallos), y Apache Flink (para la coordinación de trabajos y la gestión de puntos de control). Estos sistemas confían en ZAB a través de ZooKeeper para la robustez y consistencia de sus operaciones de coordinación críticas.
Para un Arquitecto de Sistemas, entender ZAB es crucial porque subyace a la fiabilidad de muchos componentes fundamentales en arquitecturas distribuidas modernas. Su elección implica un trade-off entre la consistencia fuerte (garantizada por el consenso de quórum) y la latencia, ya que cada escritura requiere la coordinación de un quórum de nodos. Al diseñar sistemas que dependen de ZooKeeper, el arquitecto debe considerar la configuración del quórum de ZAB, la tolerancia a fallos (N-1 nodos pueden fallar en un quórum de 2N+1), y el impacto del rendimiento de las operaciones de escritura en ZooKeeper en la latencia general de la aplicación. Una comprensión profunda de ZAB permite diseñar arquitecturas que aprovechen sus garantías de consistencia mientras se gestionan sus implicaciones de rendimiento y disponibilidad.