Миграция распределенных распределенных вычислений .net, рекомендации по библиотекам, архитектуре [закрыто]

StackOverflow https://stackoverflow.com/questions/1226728

Вопрос

у меня есть Многопоточное моделирование Монте-Карло на C#, приложение уже структурировано так, что его можно разделить на задачи, которые выполняются независимо, TaskController выполняет задачи, объединяет промежуточные результаты, проверяет сходимость (критерии досрочного завершения), а затем возвращает окончательные результаты, в настоящее время это реализовано с использованием ThreadPool.

Идентификатор хотелось бы использовать более одного компьютера для облегчения этого расчета.У меня нет разрешения или инфраструктуры для использования IIS (эта политика не изменится), но я могу использовать, например WCF с привязкой NetTcpBinding привязку конечной точки, я протестировал эту связь на сервере, она имеет соответствующие разрешения и работает.

Для начала я думаю иметь один главный exe-файл (консольное приложение) и несколько подчиненных серверов на других серверах в качестве выделенных рабочих (должны ли это быть исполняемые файлы?или службы Windows?), в конечном итоге я смогу запустить этот набор сотни рабочих станций (а также серверов) внутри компании во время время простоя (или когда активна заставка).

Я мог бы написать это сам, но мне придется заниматься связью, 1-, 2-сторонней?досрочное завершение (промежуточная проверка результатов конвергенции), отмена задач, которые больше не требуются, развертывание работы, обнаружение доступных и готовых машин для развертывания работы, регулирование/приостановка работы, если рабочая станция больше не простаивает?все остальное, что происходит в распределенной системе?

Должен ли мастер (контроллер задач) знать адреса (ip) всех подчиненных работников и приказывать им выполнять работу (если они доступны) или подчиненные работники должны просто знать главный адрес и запрашивать работу, когда они в состоянии это сделать? сделать это, или общение должно осуществляться в обе стороны?Это будет работать на 24-часовые часы в день запускалось около 9 запусков для поддержки различных регионов бизнеса.

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

Обновлять

Есть ли у кого-нибудь опыт использования чего-либо из следующего?

http://www.digipede.net/ (commercial)
http://www.gridbus.org/~alchemi/
http://ngrid.sourceforge.net/
http://www.osl.iu.edu/research/mpi.net/

или использовали JavaSpaces, Jini из .net или нашли эквивалентные технологии .net.

http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org

Спасибо

Это было полезно?

Решение

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

Мастер записывал задания в пространство (по сути, в хранилище объектов).Клиенты-потребители всегда ищут рабочие места, и по мере того, как рабочие места становятся доступными, они извлекают из пространства, обрабатывают и записывают результаты обратно в это пространство или в другое (все в рамках транзакции).Вы можете пометить задания как принадлежащие определенному запуску, чтобы сгруппировать результаты.

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

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

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

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

К сожалению, я не уверен, какие платформы доступны для .Net (я из мира Java и буду использовать Java-пространства - они используют динамическое обнаружение и практически не требуют настройки).Но стоит немного погуглить.Возможно (если это достаточно мощно), вы можете написать производитель/потребитель C# для взаимодействия с инфраструктурой Javaspace.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top