Распределенная система Java

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

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

Клиент отправляет файл или набор файлов, содержащих код для обработки. Этот код реализует интерфейс распределенного алгоритма, написанный мной, конкретным классом. Сервер создаст объект из класса. Этот объект будет отвечать за запуск алгоритма. Сервер вернет результаты клиенту. (Я действительно читал о RMI позже и нашел, что он очень похож).

Отправка файлов является базовым - общий сетевой ввод-вывод. Реальная проблема заключается в создании объекта и использовании его в качестве предопределенного интерфейса во время выполнения.

Вопросы:

  • Задача, которую я представил, звучит как вызов отражения, это правильно?
  • Есть ли у вас какие-либо первые советы о том, как его реализовать?

В поисках некоторых распределенных систем java-технологий я встречал RMI, TRMI, LINDA, CORBA, JINI и многие другие. RMI звучит наиболее привлекательно, потому что он очень похож на то, что я собрал, чтобы быть решением, но он также старый.

  • Какой набор библиотек, по вашему мнению, поможет мне выполнить эту задачу? Помните, что я студент в области компьютерных наук, поэтому полное изложение решений не будет принадлежать моим профессорам.
  • RMI старен, какие-то лучшие решения там?
  • любой всеобъемлющий учебник по TRMI?

Если вы обнаружите, что моя логика некорректна, пожалуйста, исправьте ее.

Если у вас есть еще несколько советов по этому вопросу, которые, по вашему мнению, должны обсуждаться, не стесняйтесь обращаться ко мне.

Ответ 1

Вы можете использовать этот пример и отправлять файлы классов для выполнения (вы можете хранить файлы классов на диске, а затем загружать их с помощью URLClassLoader. Если вы не хотите писать на диск, McDowell предлагает предложение).

Что касается общения, есть LOT на выбор. Одна вещь, о которой вы могли подумать, - это сделать передачу сообщения синхронной или асинхронной. Нет ничего плохого в синхронных сообщениях (например, RMI), но вы можете искать асинхронные решения, а также, как ожидается, они будут "горячими" в последнее время. Или вы можете просто пойти с собственным протоколом поверх HTTP или что-то в этом роде.

Одним из упражнений было бы распределить данные между узлами и выполнить алгоритм против этих распределенных данных, а затем объединить результаты. В этом случае пользователь будет указывать два алгоритма. Один, который генерирует данные, и тот, который агрегирует результат.

Ответ 2

Недостаточно информации для рекомендаций библиотек или технологий. Поэтому я хотел бы сосредоточиться на части "больше советов" вашего вопроса;)

  • Сервер отправляет файл. Обычно это клиент, который отправляет запрос на сервер, и сервер создаст ответ. Вы должны следовать этому соглашению.
  • файл должен быть выполнен. Мы не можем выполнить файл. Файл может содержать некоторый script или двоичный код, который может быть выполнен интерпретатором или компьютером. Причина придирчивости: вы должны что-то делать с содержимым файла (разбор, компиляция, интерпретация, привязка,...)
  • файлы реализуют интерфейс [...] - см. выше, файлы ничего не реализуют.
  • Клиент будет запускать интерфейс. Интерфейс не может быть выполнен или запущен.
  • возвращает результаты алгоритма на сервер. Как упоминалось выше: обычно это клиент, который отправляет файл ( "запрос" ) на сервер. Затем сервер возьмет файл, выполнит некоторые вычисления на основе содержимого файлов и вернет результат ( "ответ" ) клиенту.

вызов удаленного метода

В RMI обычно имеет следующий сценарий: клиент хочет вызвать удаленный метод. Клиент знает интерфейс и адрес сервера. У сервера есть реализация для этого интерфейса. Теперь клиент связывается с сервером и вызывает метод на этом сервере.

Для вашего проекта это выглядит несколько иначе: я думаю, что клиент имеет реализацию алгоритма (исходный файл java или скомпилированный файл класса) и хочет отправить его на один или несколько серверов. Сервер обрабатывает файл, выполняет алгоритм для некоторого ввода (срез) и возвращает результат.

RMI может быть кандидатом на передачу файла, но не для вызова метода (алгоритма). Удаленный метод может выглядеть так (предполагая, что мы отправляем исходный файл java):

public Result process(String javaSource, Data data);

Ответ 3

Пожалуйста, также зайдите на веб-службы, основанные на SOAP. MTOM обеспечивает способ более эффективного переноса двоичного содержимого.

Спасибо..