Необходима базовая рекомендация для .NET или JAVA для работы на добровольных началах (узлы Интернета) - PullRequest
1 голос
/ 10 января 2011

Я хочу, чтобы клиентские машины в Интернете, которые подписываются на мой сервер, жертвовали свои незанятые циклы процессора (например, SETI @ Home)

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

  • Я немного оценил Alchemi.NET, но он активно не поддерживается, кажется, наполовину испечен.

  • BOINC имеет API на C, но я хочу .NET или JAVA Framework.

  • Я смотрю на ANEKA Manjrasoft, но, похоже, она работает только для облаков локальной сети.

Должно быть несколько таких платформ. Мне нужны экспертные рекомендации!

Ответы [ 4 ]

0 голосов
/ 19 января 2011

Как насчет установщика .net ClickOnce для управления автоматически обновляемыми двоичными файлами клиента. http://msdn.microsoft.com/en-us/library/t71a733d.aspx

Я не уверен, что, скажем так, "структура рабочих мест", но среда Microsoft Sync для поддержки синхронизации ваших собственных заданий с клиентами?

http://msdn.microsoft.com/en-us/sync/default

0 голосов
/ 13 января 2011

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

Если вам нужнодоставить что-то в сжатые сроки, тогда я бы подумал о разработке простого супервизора (или планировщика) - рабочего шаблона, просто чтобы запустить приложение с нуля.Супервайзер будет отвечать за разбивку данных на части и делать их доступными через http.Рабочие (ваше клиентское приложение) будут подключаться к серверу супервизора;скачать кусок работы;завершить кусок;и загрузите результаты в супервизор.

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

Ваш первый релиз должен быть внутренним или для общего пользования?

Пока это работает, я бы начал смотреть на то, как быстро освоиться сBOINC и планирование миграции.

0 голосов
/ 19 января 2011

Моя рекомендация

Рабочий диапазон:

  1. Имеет получатель запросов, который помещает сообщения в очередь сообщений, как rabbit mq
  2. Иметь множество рабочих, слушающих одну и ту же очередь, отбирающих у нее работу и просматривающих ее по завершении.
  3. По завершении отправьте сообщение в другую очередь, содержащее URI, в известное местоположение, например на сетевой диск. Цель - ваши проанализированные данные.
  4. Получатель прослушивает эти «завершенные» сообщения. Извлекает данные из URI.

Готово.

RabbitMQ поставляется с замечательными CLR API.

Те же рассуждения хорошо работают с Microsoft Azure и их AbbFabric Queue. Плюс в том, что он очень хорошо масштабируется.

Горячая версия

http://topshelf -project.com /

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

Развертывание

Вы можете развернуть двоичные файлы с помощью robocopy / xcopy и «net use Q: pwd \ server \ share», «net delete Q:»

Непрерывная интеграция

Teamcity

После интенсивной работы с MsBuild я бы порекомендовал написать сценарий для него с помощью psake и запустить сборку с помощью PowerShell. Если вы разбираетесь в PowerShell, у вас также есть WinRM, доступный вам из ваших сценариев сборки, что действительно гладко.

Используйте номер коммита git / subversion в качестве 0.0.0.x, x в номере предыдущей версии, и у вас будет автоматическое управление версиями, которое является «общим» для сборок «Debug» / «Production».

Лазурный путь

Рабочий диапазон:

То же, что и выше, но с очередью AppFabric вместо RabbitMQ.

Горячая версия

Меняя местами экземпляры «Staging» и «Production», вы избегаете простоев.

Развертывание

Вы можете подключиться к задачам Azure Tools для Visual Studio MsBuild, которые можно прочитать о здесь , или использовать PowerShell AzureSnapIns с настройкой, аналогичной приведенной выше, для непрерывной интеграции.

Непрерывная интеграция

То же, что и выше.

0 голосов
/ 13 января 2011

Я вряд ли эксперт, но у меня небольшой опыт работы с распределенными вычислениями с использованием MPI (с C). То, о чем вы говорите, не похоже на грид-компьютинг, скорее, это система ведущий / ведомый. То есть ваш сервер является главным и он направляет всех клиентов (рабов).

Я очень мало знаю о программировании .net, поэтому я буду говорить в целом.

Существует множество веб-фреймов, и, вероятно, у большинства из них есть все, что вам нужно. То есть ваш клиент сможет загружать файлы с собранным контентом (или он мог бы просто использовать http get / post), потому что вам не нужно беспокоиться о проблемах пользовательского интерфейса, вы можете решить все, вероятно, одним действием (при условии, что основанная на действии веб-структура). Затем сервер может вернуть ответ через JSON или XML, который клиент может использовать для дальнейшего продвижения. JSON является правильным выбором, если система очень проста и, вероятно, является хорошим выбором для создания прототипов.

Для обновления приложения я бы рассмотрел это как отдельную проблему (хотя для сервера было бы несложно вернуть это клиенту).

...