Я пишу распределенное приложение, включающее несколько интерфейсных узлов, которым нужно запретить действия для пользователя, если они не являются частью списка.
На данный момент у нас более 4 узлов, но только один сервер баз данных, на котором работает DB2, который часто недоступен для обслуживания.
Прямо сейчас мы опрашиваем базу данных, чтобы обновить список в памяти, чтобы, если пользователь был удален из списка, изменение отразилось на всех 4 узлах. Но если один из узлов будет перезагружен, когда база данных не работает, мы получим пустой список, который будет отклонять все запросы пользователей, которые нам не нужны. Мы можем принять запрос от пользователя, даже если база данных не работает, поскольку мы буферизируем их в очереди сообщений, но мы хотим немедленно отклонить их, если они должны быть отклонены!
Имеет ли смысл запускать экземпляр Zookeeper на каждом из наших 4 узлов и сохранять разрешение пользователя в Zookeeper. Таким образом, чтение должно быть быстрым, а данные - доступными и последовательными. Нам больше не нужно было бы проводить опрос, и даже если мы перезапустим базу данных, узел сможет получить свою конфигурацию от zookeeper!