2013-09-24 5 views
1

У меня есть распределенное приложение, и я использую zookeeper для управления данными конфигурации на всех распределенных серверах. Моя служба на каждом сервере нуждается в некоторых DLL для запуска. Я пытаюсь создать централизованную систему, откуда я могу скопировать свои DLL на весь сервер. Могу ли я достичь этого, используя zookeeper? Я знаю, что «ZooKeeper обычно не предназначен для хранения большого размера». Мои файлы DLL имеют размер меньше 3 Мб.Скопировать файл с помощью zookeeper

ответ

2

Существует 1 Мб мягкого ограничения на то, как большие данные узла могут получить. Согласно docs вы можете увеличить максимальный размер данных:

jute.maxbuffer:

(Java системное свойство: jute.maxbuffer)

Этот параметр может быть установлен только как свойство системы Java , На нем нет префикса zookeeper. Он определяет максимальный размер данных, которые могут быть сохранены в znode. Значение по умолчанию - 0xfffff или чуть меньше 1M. Если этот параметр изменен, свойство системы должно быть установлено на всех серверах и клиентах, в противном случае возникнут проблемы. Это действительно проверка здравомыслия. ZooKeeper предназначен для хранения данных размером порядка килобайт.

Я бы не рекомендовал использовать Zookeeper для этой цели (вместо этого вы могли бы гораздо проще разместить двоичные файлы на веб-сервере), но это представляется возможным в теории.

+0

Большое спасибо. У меня есть еще один вопрос –

+0

В моем тесте достаточно просто добавить это на стороне сервера Zookeeper. На стороне клиента изменений не требовалось. Все, что вам нужно сделать, это добавить '-Djute.maxbuffer = 0xA00000' в командную строку запуска Zookeeper, если вы хотите, чтобы размер узла максимального размера составлял 10 МБ. –

0

Для передачи файлов вы можете использовать SCP. В качестве данных вы можете передать путь к файлам вашей DLL. Используя SCP, вы можете вытаскивать файлы из базового репозитория.

2

Zookeeper предназначен для передачи сообщений внутри кластера. Лучшее, что вы можете сделать, это создать Znode_A, который будет содержать Znodes, смотреть znode a для изменений. Каждый Znode в Znode_A будет представлять DLL и будет содержать путь к dll. Каждый узел в кластере наблюдает за данными Znode_A, поэтому, когда будет создана новая dll (znode), узлы будут знать, чтобы скопировать dll из основного репозитория.

+0

знаете ли вы пример проекта, уже использующий этот принцип? возможно, вы могли бы добавить URL-адрес для такого проекта – serup

Смежные вопросы