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