Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > распределение "работы" между вычислительными едини


Автор: boostcoder 13.10.2011, 03:23
всем привет.

имеется сеть вычислительных единиц состоящая из равноправных узлов/нодов. каждый нод сети представляет собой вычислительную единицу предоставляющую некоторые элементарные операции. сервис - группа нодов объединенных по предназначению. так, к примеру, математические функции: add, sub, div, mul, образуют математический сервис.
каждый нод сети может одновременно являться пользователем других сервисов/нодов. к примеру, нод предоставляющий операцию mul может реализовывать ее при помощи нода предоставляющего операцию add. все ноды сети "знают" о всех остальных нодах/сервисах.
к примеру, если пользователь сети хочет работать с сервисом предоставляющим add, ему необходимо знать "контактные" данные математического сервиса.
в сети, может быть более одного нода предоставляющего одинаковые функции. в сети не может быть одинаковых сервисов.

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

спасибо.

Автор: boostcoder 13.10.2011, 03:39
лучшей, мне кажется идея, изменить архитектуру сети так, чтоб была возможность назначать супернод, при конфигурации сети. в таком случае, юзер будет подключаться именно к нему, и он(супернод) будет выполнять своего рода роль сервера.

возможно есть еще какие-то предложения?

Автор: COVD 13.10.2011, 03:59
И если супернод "умирает", то его обязанности переходят к другому ноду. Так работает вычислительный grid.

Автор: boostcoder 13.10.2011, 04:14
Цитата(COVD @  13.10.2011,  03:59 Найти цитируемый пост)
И если супернод "умирает", то его обязанности переходят к другому ноду.

хм.. идея smile

Автор: fish9370 13.10.2011, 09:57
Цитата(boostcoder @  13.10.2011,  03:39 Найти цитируемый пост)
изменить архитектуру сети так, чтоб была возможность назначать супернод, при конфигурации сети


Цитата(COVD @  13.10.2011,  03:59 Найти цитируемый пост)
И если супернод "умирает", то его обязанности переходят к другому ноду


тогда уже лучше чтобы супернод назначался не при конфигурации, а путем переговоров/голосования.. 
в случае смерти супернода, просто запускается повторный процесс выбора супернода..

Автор: Artemon 13.10.2011, 12:26
А сеть какого типа ? Если физическая архитектура сети не сложная, то можно сделать чтобы каждый нод широковещательными UDP пакетами рассылал свою нагрузку. И соответствено перед тем как подключиться к одному из двух одинаковых нодов, выбирается нод с меньшей нагрузкой. В этом случае надобность в суперноде отпадает.

Автор: boostcoder 13.10.2011, 12:30
Цитата(fish9370 @  13.10.2011,  09:57 Найти цитируемый пост)
тогда уже лучше чтобы супернод назначался не при конфигурации, а путем переговоров/голосования..

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

Цитата(fish9370 @  13.10.2011,  09:57 Найти цитируемый пост)
в случае смерти супернода, просто запускается повторный процесс выбора супернода..

это понятно. не понятно то, каким образом пользователи сети узнаю о том что супернод изменился.

Добавлено через 1 минуту и 19 секунд
Цитата(Artemon @  13.10.2011,  12:26 Найти цитируемый пост)
чтобы каждый нод широковещательными UDP пакетами рассылал свою нагрузку

не получится. ноды могут располагаться в других сетях/подсетях, и просто в интернете.

Автор: bsa 13.10.2011, 12:43
Цитата(boostcoder @  13.10.2011,  13:30 Найти цитируемый пост)
какими данными предлагаешь обмениваться? пропускной способностью сети? временем пинга? конфигурацией железа?
Можно учесть все (главное - белый IP, если ноды могут быть в интернете и приватных сетях) и помножить на случайное число (а можно и не умножать). Выборы выигрывает тот, у кого результат больше.
Цитата(boostcoder @  13.10.2011,  13:30 Найти цитируемый пост)
это понятно. не понятно то, каким образом пользователи сети узнаю о том что супернод изменился.
Пользователи не должны вообще знать, что он существует. Они подключаются к своему ноду, а он уже знает, кто супер, а кто нет (в выборах участвовал или получил информацию при подключении).

Кстати, если у супернода все соединения с остальными нодами рвутся, то он должен стать обычным нодом.

Возможен альтернативный вариант:
1. каждый нод считает себя супернодом, если не имеет связей с другими нодами
2. при установке связи одного нода с другим они обмениваются информацией о супернодах. Если суперноды разные, то каждый нод посылает (если, конечно, он сам не является супер) своему суперноду информацию, что обнаружен другой супернод. В итоге суперноды сами между собой проводят перевыборы и о результатах сообщают все заинтересованным нодам.

Автор: fish9370 13.10.2011, 12:58
Цитата(boostcoder @  13.10.2011,  12:30 Найти цитируемый пост)
какими данными предлагаешь обмениваться? пропускной способностью сети? временем пинга? конфигурацией железа?


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


Цитата(boostcoder @  13.10.2011,  12:30 Найти цитируемый пост)
не понятно то, каким образом пользователи сети узнаю о том что супернод изменился


в централизованой системе, без возможности широковещательного сообщения - никак..

Автор: boostcoder 13.10.2011, 12:59
Цитата(bsa @  13.10.2011,  12:43 Найти цитируемый пост)
Пользователи не должны вообще знать, что он существует.

у меня есть две мысли по этому поводу:
1. при архитектуре сети без супернода(так как сейчас), пользователи подключаются к любому одному ноду.
2. при архитектуре сети с супернодом, пользователи подключаются именно к нему.

осталось понять все моменты второго пункта.

Цитата(bsa @  13.10.2011,  12:43 Найти цитируемый пост)
если у супернода все соединения с остальными нодами рвутся, то он должен стать обычным нодом.

логично.

Цитата(bsa @  13.10.2011,  12:43 Найти цитируемый пост)
2. при установке связи одного нода с другим они обмениваются информацией о супернодах. Если суперноды разные, то каждый нод посылает (если, конечно, он сам не является супер) своему суперноду информацию, что обнаружен другой супернод. В итоге суперноды сами между собой проводят перевыборы и о результатах сообщают все заинтересованным нодам.

вроде как это лучший вариант...

Добавлено через 2 минуты и 3 секунды
Цитата(fish9370 @  13.10.2011,  12:58 Найти цитируемый пост)
то я бы начал с выбора самой производительной железки (процессор, память, дисковая подсистема), затем по пропускной способности сети, по количеству хопов, по временым задержкам, по доступности (статистические данные).. сюда же можно включить выбор по ОС, предположим, что тесты показывают большую производительность в линуксе при одинаковом железе.. по географическому признаку.. по старшенству ip-адреса (если речь о локалке, при прочих равных) и т.д.

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

Автор: fish9370 13.10.2011, 13:08
нехватает описания процедуры поиска нодов в сети.. широковещалка в интернете не работает.. могут потребоваться дополнительные корневые (опорные) ноды..

Автор: boostcoder 13.10.2011, 13:16
Цитата(fish9370 @  13.10.2011,  13:08 Найти цитируемый пост)
нехватает описания процедуры поиска нодов в сети

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

Автор: fish9370 13.10.2011, 13:35
это многое упрощает, но возникает вопрос надежности..

будет ли эта цепь замкнутой?
что будет в случае утраты одного из нодов?
как будут передоваться уведомления, от нода к ноду или через супернод?


Цитата(boostcoder @  13.10.2011,  13:16 Найти цитируемый пост)
знает о расположении любого одного нода того сервиса


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

Автор: boostcoder 13.10.2011, 13:42
Цитата(fish9370 @  13.10.2011,  13:35 Найти цитируемый пост)
будет ли эта цепь замкнутой?

что конкретно имеется ввиду?

Цитата(fish9370 @  13.10.2011,  13:35 Найти цитируемый пост)
что будет в случае утраты одного из нодов?

как только один из нодов опознает пропажу какого-либо нода, он изымет информацию о нем из своей базы, и сообщит об этом всем остальным нодам.

Цитата(fish9370 @  13.10.2011,  13:35 Найти цитируемый пост)
как будут передоваться уведомления, от нода к ноду или через супернод?

от нода к ноду.

Цитата(fish9370 @  13.10.2011,  13:35 Найти цитируемый пост)
при такой схеме желательно, чтобы нод знал как минимум двух нодов, образуя двунаправленный список..

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

Автор: fish9370 13.10.2011, 13:46
Цитата(boostcoder @  13.10.2011,  13:42 Найти цитируемый пост)
на данный момент, каждый нод знает все обо всех нодах. возможно, это является избыточным... но пока не устоялась структура и принципы организации сети, эта информация не мешает.


тогда вопросов больше нет..

Автор: bsa 13.10.2011, 18:08
Цитата(boostcoder @  13.10.2011,  13:59 Найти цитируемый пост)
вроде как это лучший вариант...

есть у этого варианта недостаток - запаришься реализовывать.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)