C ++: Идея распределенной обработки клиент-сервер: закрыть соединение после отправки данных, снова открыть после завершения задачи? - PullRequest
1 голос
/ 14 апреля 2011

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

* Обратите внимание, я 'Я использую библиотеку наддува, хотя я еще не запустил клиент-серверный код.

Я думаю Я хочу открыть TCP-соединение от клиента к серверу, говоря «эйЯ сделаю некоторую работу для вас ", они отправляют задачу и данные для этой задачи во время этого соединения, а затем закрывают это соединение, чтобы на сервере не было тонны потоков открытых сокетов.Когда клиент заканчивает обработку, он снова подключается к серверу и отправляет завершенные данные (снова закрывает соединение, если дальнейшие задачи не выполняются).

Это хорошая идея?Каков наилучший способ сделать это?

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

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Вы смотрели на сервис Amazon MapReduce? Он создан именно для такого рода вещей.

http://aws.amazon.com/elasticmapreduce/

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

РЕДАКТИРОВАТЬ: Если вам нужно открытое решение, я предлагаю взглянуть на Apache Hadoop и его предложение MapReduce. Кроме того, вы можете воспользоваться OpenStack для размещения собственной облачной инфраструктуры, если это кажется выгодным для вашего приложения.

http://www.openstack.org/

1 голос
/ 14 апреля 2011

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

Это программное обеспечение, используемое seti @ home, einstein @ home, fold @ home и почти всем @home!

...