Для достижения высокой доступности чтения Zookeeper гарантирует слабую согласованность по репликам: клиентский узел всегда может ответить на чтение, а возвращенный ответ может быть устаревшим значением (даже новая версия была зафиксированачерез лидера).
Тогда пользователи сами решают, является ли ответ на чтение «устаревшим» или нет, так как не все приложения требуют актуальную информацию.Таким образом, предоставляются следующие варианты:
1) Если вашему приложению не нужны обновленные значения для чтения, вы можете получить высокую доступность для чтения, запрашивая данные непосредственно у клиента.
2) Если вашему приложению требуются современные значения для чтения, вы должны использовать API синхронизации перед запросом на чтение, чтобы синхронизировать версию на стороне клиента с лидером.
Итак, Zookeeper предлагает настраиваемую гарантию согласованности, и пользователи могут сами выбирать баланс между доступностью и согласованностью.
Если вы хотите узнать больше о внутренностях Zookeeper, я рекомендую этобумага: ZooKeeper: координация без ожидания для систем Интернет-масштаба .Вышеуказанная стратегия описана в разделе 4.4.