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


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

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

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

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

Вопросы:

  1. вызов, который я представили звучит как вызов рефлексии, это правильно?
  2. Есть ли у вас какие-либо первые советы о том, как его реализовать?

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

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

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

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

3 10

3 ответа:

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

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

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

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

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

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

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

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

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

public Result process(String javaSource, Data data);

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

Спасибо..