Необходимы рекомендации по платформе для .NET или JAVA для добровольных вычислений (интернет-узлы)

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

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

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

  • У BOINC есть API на C, но я хочу фреймворк .NET или JAVA.

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

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


person Munish Goyal    schedule 10.01.2011    source источник


Ответы (4)


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

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

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

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

person Quaternion    schedule 13.01.2011

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

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

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

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

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

person Tim Barrass    schedule 13.01.2011
comment
Привет Тим ​​:) Мне нужно сначала заставить бизнес-логику работать. Я также довольно доволен небольшим домашним решением (супервизор-агент, как вы указали), на самом деле у меня есть базовый дизайн, и некоторые из них также закодированы. Но я не хочу инвестировать в это только для того, чтобы потом понять, что существующая структура подошла бы и даже больше. Очевидно, что мне придется иметь дело со всеми проблемами по мере их поступления (из моего написанного фреймворка) и решать их постепенно, которые уже были хорошо решены с помощью существующих FX. - person Munish Goyal; 13.01.2011
comment
Но я новичок в Distrib. вычисления, поэтому я не знаю, сколько времени потребуется, чтобы понять существующие FX и найти лучшие, а затем попытаться их использовать. - person Munish Goyal; 13.01.2011
comment
API BOINC написан на C. Я не исследовал его полностью, но у меня есть ощущение, что сначала потребуется усилие (и определить, действительно ли это правильный подход), чтобы установить оболочку .NET. И чтобы он работал и т.д. - person Munish Goyal; 13.01.2011
comment
У нас есть базовые библиотеки http get/post, инфраструктура для синтаксического анализа XML и сопутствующие утилиты (многие другие исходные утилиты также находятся в свободном доступе в Интернете). Таким образом, построение базового пути не должно занимать много времени, но вы знаете, что у сложного агента и его логики управления заданиями возникнут непредвиденные проблемы, которые необходимо решить. Итак, вопрос в том, должен ли я сегодня потратить время на начальную загрузку, чтобы выбрать существующий FX ИЛИ исключить этот вариант (если ни один не подходит), или лучше пойти самому и продолжать учиться (в фоновом режиме в поисках подходящего FX) и сосредоточиться на бизнес-логике. работает в первую очередь. - person Munish Goyal; 13.01.2011
comment
Извиняюсь - завязал с работой, постараюсь посмотреть комментарии позже сегодня :) - person Tim Barrass; 13.01.2011
comment
Конечно, даже если в моей зоне ночь. Только то, что ответ и обсуждение этого вопроса будет для меня действительно важным. Спасибо :) - person Munish Goyal; 13.01.2011
comment
@Tim Не могли бы вы прочитать дополнительную информацию в моих комментариях? - person Munish Goyal; 15.01.2011

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

Рабочее расстояние:

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

Сделанный.

RabbitMQ поставляется с отличными API-интерфейсами CLR.

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

Горячее управление версиями

http://topshelf-project.com/

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

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

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

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

Teamcity

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

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

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

Рабочее расстояние:

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

Горячее управление версиями

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

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

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

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

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

person Henrik    schedule 19.01.2011

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

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

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

person Alex KeySmith    schedule 19.01.2011