Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RMI распределённоек приложение 
:(
    Опции темы
Georg4
Дата 14.12.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



В двух словах.
С помощью этого дела нужно сделать прогу окторая будет распараллеливать задачу перемножения 2-х матриц на от 3 до 8 машин.
Я смог пока только вежду 2-мя машинами.
Я так думаю, что на 8-ми тачках лежат удалённые процедуры а на машине которая вызывает процедуры просто нужно всем послать кусок матрицы а потом скомпоновать его.
Но я до конца не могу это додумать.
Кто-нибудт делал нечто или знает как?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
LSD
Дата 15.12.2005, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Лучше наоборот, на сервере есть процедура к которой обращается клиент и получает порцию данных, обрабатывает, а затем вызывает другую процедур возвращает результат.
В чем у тебя возникли сложности?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Georg4
Дата 16.12.2005, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Здоров, дружище. Сто лет тебя не видел.
Я не могу вьехать в организацию программы если клиентов больше 1-го.
Тобишь я без проблем сделал между 2-мя машинами и не знаю как сделать между 3-мя - 8-ю.



--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
LSD
Дата 16.12.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Каждый клиент должен иметь уникальный идентификатор. Пусть каждый клиент имеет свой ID-шник (удобно для этих целей использовать UUID), ID может быть как постоянным так и сеансовым. Клиент соединяется с сервером и передает свой ID, сервер выдает ему порцию данных на обработку и помечает у себя, что клиент такой-то взял такую-то порцию данных на обработку. Когда клиент обработает данные, он передает серверу свой ID и обработанные данные. Надо будет добавить метод отказа от обработки, например клиента выключают до того как он закончил обработку, тогда он отказывается от обработки и уведомляет об этом сервер.
Плюс надо будет еще следить за тем чтобы один клиент не запрашивал новые данные, пока не обработал старые, проверять если обработка идет дольше определенного времени, то считать что клиент отсоединился и данные надо снова вернуть в пул не обработанных данных.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Georg4
Дата 19.12.2005, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Как клиент будет передавать свой ИД?
Сокеты параллельно включить?
А мысль про ID мне понравилась, значит клиент вызывая удалённую рпоцедуру перед этим отправляет серверу свой ID.
Иперед началом работы сервера задавтаь окличество клиентов из расчёта чтоб не больше, а не меньше их не будет.
То есть вводить количество клиентов и из IPшники он же и будет IDшником.



--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
COVD
Дата 19.12.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Цитата
Сокеты параллельно включить?

Раз уж взялись за RMI, то нелогично про сокеты думать.
RMI придумали, чтобы про сокеты не знать вообще. Это надстройка над сокетами, для облегчения жизни программиста.
RMI - это аналог синхронного обращения к локальному методу, но более медленный и менее надежный. И это синхронное обращение, т.е. послав запрос поток ожидает немедленного ответа.
Чтобы сделать обработку асинхронной надо использовать мессажинг. Выглядело бы красиво. Центральный компьютер может не знать, сколько у него добровольных помошников, которым можно дать куски на обработку.

PM MAIL   Вверх
LSD
Дата 19.12.2005, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Georg4 @ 19.12.2005, 22:39)
Как клиент будет передавать свой ИД?

В качестве параметра метода, что-то наподобие:
Код
public interface TaskServer extends Remote
{
  public byte[] takeData(UUID clientID) throws RemoteException;

  public void returnData(UUID clientID, byte[] data) throws RemoteException;
  
  public void refuseTask(UUID clientID) throws RemoteException;
}


Цитата(Georg4 @ 19.12.2005, 22:39)
А мысль про ID мне понравилась, значит клиент вызывая удалённую рпоцедуру перед этим отправляет серверу свой ID.
Иперед началом работы сервера задавтаь окличество клиентов из расчёта чтоб не больше, а не меньше их не будет.
То есть вводить количество клиентов и из IPшники он же и будет IDшником.

Можно но ИМХО не стоит, сервер должен быть готов раздавать задания и принимать ответы, а вот клиентов ему контролировать вовсе не обязательно. Клиент присоединился, получил свою порцию данных, обработал, вернул результат и дальше может снова повторить цикл, а может прекратить обработку. Таким образом мы можем динамически менять производительность. Надо подключили еще клиентов, надо отключили. Только на сервере надо следить, за заданиями которые слишком долго находятся в обработке (это на тот случай если клиент неожиданно отсоединился и не опвестил об этом сервер.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Georg4
Дата 21.12.2005, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



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


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Metal_Heart
Дата 21.12.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: нет
Всего: 12



Зачем?

Делишь свою задачу на n частей, затем каждому клиенту отдаешь по одной части.
По мере выполнения предыдущей - отдаешь следующую часть.

Иначе, допустим у нас один клиент, ты всю задачу по перемножению возлагаешь на него, он (клиент) посчитал, а данные отправить не успел (сломался), в результате -
мы теряем много времени!

Или ты отдал всю задачу одному-двум, а через пару секунд появилась возможность использовать ещё десяток клиентов?

Это сообщение отредактировал(а) Metal_Heart - 21.12.2005, 10:00


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
LSD
Дата 21.12.2005, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Metal_Heart @ 21.12.2005, 09:57)
Делишь свою задачу на n частей, затем каждому клиенту отдаешь по одной части.
По мере выполнения предыдущей - отдаешь следующую часть.

Поддерживаю.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Georg4
Дата 21.12.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Я ненмого не опнял, как это можно задачу с перемножением матриц АхВ строк поделить на n частей?
Нужно всё ранво задать максимальный лимит количества клиентов.
И тогда рпосто можно дать одному клиенту задание 2 раза.

А как бы выглядело это деление на n частей в работе.
Опишите по шагам, я не представляю.
Ну допусим у нас к клиентов и к>1.
Что тогда? Как реализуем?
Давайте по пунктам.


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
LSD
Дата 21.12.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Разбивать эту задачу на составные части имеет смысл, только если размерность матриц велика, поэтомы полагаем что A и B велики. Умножение матриц состоит из перемножения 2-х векторов, вот пусть элементарным заданием и будет перемножение 2-х векторов.
  • заводим HashSet в который помещаем координаты всех еще не посчитанных произведений (произведение задается координатами в итоговой матрице),
  • когда к нам подсоединяется клиент даем ему произвольное задание из этого множества (при этом мы его отуда удаляем) и помещаем в HashMap информацию о том что клиент с ID таким-то взял задание такое-то на обработку и время когда он это сделал.
  • когда клиент возвращает обработанные данные, мы помещаем их в итоговю матрицу и удаляем запись из HashMap
  • кода в HashMap и HashSet не останется записей, матрицы перемноженны
  • паралельно в фоне работает процесс, который проверяет сколько задания находятся в обработке, и когда находит задание у которого время обработки больше заданного предела, возвращает его в список не выполненных заданий


Это сообщение отредактировал(а) LSD - 21.12.2005, 18:11


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.