Вопрос по проектированию
От: Аноним  
Дата: 25.08.05 09:50
Оценка:
Есть сервер, который иногда дает данные клиентам. Клиенты эти данные обрабатывают как-то и им нужно брать новые. При этом, сервер должен правильно распределять нагрузку, чтобы все клиенты закончили обработку в одно и то же время. Как лучше сделать: чтобы клиенты сами запрашивали данные или чтобы сервер их спрашивал?

29.08.05 07:55: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
Re: Вопрос по проектированию
От: LexKex  
Дата: 25.08.05 14:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть сервер, который иногда дает данные клиентам. Клиенты эти данные обрабатывают как-то и им нужно брать новые. При этом, сервер должен правильно распределять нагрузку, чтобы все клиенты закончили обработку в одно и то же время. Как лучше сделать: чтобы клиенты сами запрашивали данные или чтобы сервер их спрашивал?


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

Но помоему тут какието бока. Надо лучше описывать проблему, КЫВТовци не медиумы мыслей не читают.
Re[2]: Вопрос по проектированию
От: Аноним  
Дата: 25.08.05 16:22
Оценка:
Здравствуйте, LexKex, Вы писали:

LK>Здравствуйте, Аноним, Вы писали:


А>>Есть сервер, который иногда дает данные клиентам. Клиенты эти данные обрабатывают как-то и им нужно брать новые. При этом, сервер должен правильно распределять нагрузку, чтобы все клиенты закончили обработку в одно и то же время. Как лучше сделать: чтобы клиенты сами запрашивали данные или чтобы сервер их спрашивал?


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


LK>Но помоему тут какието бока. Надо лучше описывать проблему, КЫВТовци не медиумы мыслей не читают.


Есть большое количество данных для обработки. Есть сервер, который рулит раздачей блоков, и есть клиенты, которые эти блоки обрабатывают. Один клиент за сеанс может обработать огромное количество блоков, т.е., сервер высылает одному клиенту блоки не один раз. В целях ускорения процесса необходимо, чтобы клиенты закончили обработку в итоге одновременно (обработку самых последних блоков, а не тех, которые возникают посредине процесса). Вот. Описал. Вопрос тот же
Re[3]: Вопрос по проектированию
От: g_i  
Дата: 29.08.05 05:30
Оценка: +1
Здравствуйте, Аноним, Вы писали:

Так пусть скармливает по чуть-чуть блоков каждому. Клиент обработал свою порцию — стучится на сервер за следующей.
Загрузка будет равномерной. Система в интранете или как?
Re[4]: Вопрос по проектированию
От: Козьма Прутков Россия  
Дата: 29.08.05 08:24
Оценка: 1 (1)
Здравствуйте, g_i, Вы писали:

g_i>Здравствуйте, Аноним, Вы писали:


g_i>Так пусть скармливает по чуть-чуть блоков каждому. Клиент обработал свою порцию — стучится на сервер за следующей.

g_i>Загрузка будет равномерной. Система в интранете или как?
Согласен. В противном случае надо как-то оценить объем работ по каждому блоку, вычислительные мощности клиента (их много — скорее всего разные, плюс прочая загрузка), а это уже скорее всего неоправданные расходы на проектирование, разработку, отладку, тестировани и т.д.
Конечно, с этим подходом если блоки сильно разнятся по объему работы, то можно нарваться на то, что при наличии 2-х блоков, один из которых элементарный, а второй — огромный, обработка их 2-мя клиентами не закончится одновременно Но если блоки примерно одинаковые, их много, то они приблизительно равномерно и обработаются.
Если надо, то можно внести некую дополнительную эвристику. Например, можно ввести некую метрику объема работы, которую вычисляет сервер (например, размер сообщения), и вести статистику производительности клиента с каналами связи, то есть запоминаем, когда кому какой объем работы отдали, а по следующему обращению (или сообщению об окончании работы — это уж как сделаешь) посчитать пропускную способность клиента и в дальнейшем ее учитывать. Но это, конечно, усложнение дизайна, скорее всего, как я уже говорил, неоправданное.
Да хранит вас господь в сухом прохладном месте...
Re[5]: Вопрос по проектированию
От: g_i  
Дата: 29.08.05 08:29
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

...

А вообще, требование по одновременному завершению обработки на клиентах выглядит несколько.. странным что-ли:
> При этом, сервер должен правильно распределять нагрузку, чтобы все клиенты закончили обработку в одно и то же время.
Наверное, имеется в виду: "Cервер должен правильно /равномерно/ распределять нагрузку *ТОЧКА*"?
Re: Вопрос по проектированию
От: What Беларусь  
Дата: 29.08.05 10:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть сервер, который иногда дает данные клиентам. Клиенты эти данные обрабатывают как-то и им нужно брать новые. При этом, сервер должен правильно распределять нагрузку, чтобы все клиенты закончили обработку в одно и то же время. Как лучше сделать: чтобы клиенты сами запрашивали данные или чтобы сервер их спрашивал?


Недавно реализовал похожую систему на сокетах. Пришёл к выводу, что однозначно удобнее, кодгда состояние соединения клиента с сервером хранится за клиентом. Тогда сервер получается на порядок более простым. Соответственно, лучше, чтобы клиенты сами запрашивали данные, когда очередная порция обработана.
То есть примерно так:
клиент запрашивает данные
сервер высылает необработанные данные и их id
клиент обрабатывает данные
клиент отправляет серверу запрос "посчитал данные с таким-то id, принимай результаты"
клиент запрашивает данные
...

В этом случае сервер лишь отвечает на запросы клиентов и легче использовать разные асинхронные схемы, типа IO Completion Port.

При такой схеме также удобно отслеживать обрывы и зависания клиентов. Достаточно завести за данными время последней отправки. Если при выборе очередного задания для очередного клиента все задания уже в работе, то ему можно отправить задание которые ещё не выполнено, но было отправлено раньше остальных и у него привышен лимит времени ожидания.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Вопрос по проектированию
От: UrryMcA Россия http://www.UrryMcA.com
Дата: 07.09.05 14:51
Оценка:
Здравствуйте, Аноним, Вы писали:

Для хохмы:

Это задачка по оптимизации производственного цикла. Берем учебник по управлению производством и читаем

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

Как все таки универсальны процессы управления
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.