Мне необходимо написать систему для распределенных вычислений.
Кое-что я уже сделал.
Вкратце архитектура такая: есть центральный узел — Dispatcher, который распределяет задания,
RemoteAgent, который решает задания и Director который задания выдает.
Сейчас все это реализовано на Java и RMI. А моя проблема состоит в следующем я не знаю как правильно/лучше организовать вызовы в системе. У меня сейчас так: Director ищет реестры RMI по всей сети, находит и обращается к Dispatcher'у и оставляет там ссылку на себя. Диспетчер на этой ссылке вызывает метод getTask и получает описание задачи в XML. Удаленные агенты тоже ищут реестр RMI находят диспетчера и оставляют у него ссылки на себя. Диспетчер имея список удаленных агентов раздает им задачи методом setTask. После того как удаленные агенты решают задачи они вызывают на диспетчере(ссылка на него передается в setTask) метод complete(ссылка на уд. агента). Диспетчер после этого вызывает на удаленном агенте метод getTask и получает XML с решением задачи. Затем он передает решение Director'у методом director.setTask(String xml).
На диспетчере запущены потоки определения живых агентов и директоров
Что мне не нравится в существующей схеме:
Много обратных вызовов — проблема потери соединения, падения агентов.
Удаленные агенты могут очень много времени решать задачу => ссылка на диспетчер может стать не действительной
Директор не обязательно должен быть всегда запущен.
Так же я хотел бы переделать удаленног агента на С++ или С# — это нужно для того чтобы они запускались как сервисы на компьютере пользоваиеля, вели бы мониторинг системы(загруженность, память и т.д.). Отсюда еще один вопрос как организовать общение CORBA или WS (c CORBA немного знаком с WS — нет ).
Сейчас каждый удаленный агент и директор является так же и сервером RMI, хотелось бы этого избежать.
Пожалуйста подскажите более правильное решение этой задачи или плохие места в уже реализованном решении.