Имеет ли смысл использовать Zookeeper для хранения прав пользователей? - PullRequest
6 голосов
/ 24 октября 2011

Я пишу распределенное приложение, включающее несколько интерфейсных узлов, которым нужно запретить действия для пользователя, если они не являются частью списка.

На данный момент у нас более 4 узлов, но только один сервер баз данных, на котором работает DB2, который часто недоступен для обслуживания.

Прямо сейчас мы опрашиваем базу данных, чтобы обновить список в памяти, чтобы, если пользователь был удален из списка, изменение отразилось на всех 4 узлах. Но если один из узлов будет перезагружен, когда база данных не работает, мы получим пустой список, который будет отклонять все запросы пользователей, которые нам не нужны. Мы можем принять запрос от пользователя, даже если база данных не работает, поскольку мы буферизируем их в очереди сообщений, но мы хотим немедленно отклонить их, если они должны быть отклонены!

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

1 Ответ

10 голосов
/ 25 октября 2011

Да, как вы описали свою проблему, Zookeeper должен соответствовать всем требованиям.Однако есть несколько вопросов, на которые необходимо ответить:

  • Сколько данных мы говорим? Zookeeper сохраняет данные на диск, но работает, только если данные соответствуют оперативной памяти.

  • Как часто данные изменяются? Zookeeper гарантирует, что более половины узлов получит обновление, поэтому записи не совсем производительны.

  • Сколько данных должно быть прочитано за один раз? Zookeeper имеет ограничение размера ответа 1 МБ, но он рекомендует держать данные значительно ниже этого предела.Обратите внимание, что этот предел также может быть достигнут, если вы перечисляете узел с большим количеством дочерних элементов, поскольку имена дочерних элементов считаются данными.

Учитывая, что данные подаются из ОЗУ, их чтение не должноЭто не большая проблема, но вы всегда можете кэшировать результаты и настроить наблюдение на соответствующих узлах для аннулирования локальных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...