Связь между многими серверами и 1 клиентом: запуск нескольких экземпляров приложения на клиенте

#java #apache-kafka #system

Вопрос:

Мне нужна помощь в обосновании дизайнерского решения.

В настоящее время я работаю над программным обеспечением для репортеров. Упомянутый репортер работает на своей собственной машине. Reporter принимает данные из многих кластеров серверов данных (называемых «устройствами») и в конечном итоге представляет данные в виде панелей мониторинга для клиентов. Он получает данные через Кафку. Таким образом, это много кластеров серверов для одного сценария репортера.

На машине Reporter у меня есть приложение под названием NodeManager (на основе Java), которое отвечает за управление отношениями между устройством и репортером. Т. е. когда кластер устройств добавляет новый узел, устройство сообщает NodeManager через kafka, который затем соответствующим образом обновляет некоторые параметры на стороне репортера.

Прямо сейчас мой NodeManager работает только для каждого экземпляра для ОДНОГО кластера устройств. Потребуется некоторое время разработки, чтобы изменить его для работы с несколькими кластерами устройств на экземпляр NodeManager. Мне пришлось бы запускать несколько потребителей kafka в каждом экземпляре NodeManager: в любом случае, по одному для каждого кластера устройств.

Тем не менее, у меня очень большое искушение просто запустить 1 NodeManager для каждого кластера устройств, подключенного к reporter, потому что это проще и может быть чище. Таким образом, если существует N экземпляров кластеров устройств, в reporter будет запущено N экземпляров NodeManager.

Мои инстинкты подсказывают, что это плохо … но я не знаю почему. NodeManager очень легкий, поэтому системные ресурсы не должны иметь большого значения, каковы некоторые преимущества и недостатки, если я продолжу и просто запущу N экземпляров NodeManager?