Использование облачных/распределенных вычислений для разделения процессорного времени — возможности и методы

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

Я задался вопросом: можно ли это сделать более неявным образом?

Вопрос

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

Сценарий

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

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

Вывод

Общий:

  • Можно ли создать облачную программу/ОС/комплект, в котором можно было бы совместно использовать процессорное время для неопределенного типа процесса?

  • Если да, то как бы вы это реализовали, с чего бы вы начали?

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

  • Если бы это было возможно, стали бы вы добровольной частью большого облака?

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


person Tom 'Blue' Piddock    schedule 17.08.2010    source источник


Ответы (3)


Я сталкиваюсь с той же проблемой в течение последних нескольких месяцев. Мои выводы на данный момент:

Основная проблема с использованием общедоступной сети (Интернета) для облачных вычислений заключается в обращении к компьютерам через NAT и брандмауэры. Решить это нетривиально.

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

Решение состоит в том, чтобы использовать сервер регистрации, где все одноранговые узлы регистрируются сами и могут вступать в контакт с другими. Соединения остаются открытыми сервером, и связь направляется через сервер. Есть несколько вариаций. Однако во всех сценариях это требует огромных ресурсов для обеспечения масштабируемости и, следовательно, недосягаемо для всех, кроме крупных корпораций.

Более практичные решения предлагают коммерческие облачные платформы, такие как Azure (для .Net) или просто .Net ServiceBus. Поскольку все работает в облаке, не будет проблем с доступом к компьютерам за NAT и брандмауэрами, и даже если вам нужно это сделать для доступа к «локальным» компьютерам или компьютерам клиентов, это можно сделать через ServiceBus.

person Peladao    schedule 17.08.2010
comment
Это блестящая обратная связь для сети, я собираюсь написать план и спецификацию того, что будет целью, а затем посмотреть, какая гибкость у нас будет. Я, вероятно, начну для этого проект Google Code, чтобы мы могли спланировать его и запустить общий репозиторий/проект кода. - person Tom 'Blue' Piddock; 17.08.2010
comment
Жду план. Я мог бы быть потенциальным пользователем/участником проекта. - person Peladao; 17.08.2010
comment
Кстати, также см. мой собственный вопрос о распределенных/облачных вычислениях. Я получаю интересные ответы. stackoverflow.com/questions/3160133/ - person Peladao; 17.08.2010
comment
Ссылка оказалась полезной. Сегодня вечером я пишу базовый план, если вы хотите внести свой вклад, я добавлю сообщение в свой опубликованный вопрос, чтобы дать ссылку. Я хочу сделать это совместным усилием, к которому каждый может присоединиться и внести свой вклад. На каком языке это лучше всего писать. Это не обязательно будет гибкая платформа, поэтому Microsoft является предполагаемой ОС, если только производственная линия ОС не будет использована, и в этом случае будет использоваться платформа Unix. .Net мог бы стать хорошей сетевой базой, но это мой собственный опыт программиста VB, что бы вы использовали? - person Tom 'Blue' Piddock; 18.08.2010
comment
Если вы используете .Net/Mono (и убедитесь, что все, что вы используете, также поддерживается Mono), то он все равно будет работать на большинстве платформ. - person Peladao; 18.08.2010

Вы бы доверили запуск чужого кода на своем компьютере?

Практичнее не спрашивать их разрешения :)

Однажды я написал решатель для соревнований по программированию, написанный с помощью Haxe, во Flash-баннере на довольно популярном веб-сайте друга...

person Will    schedule 17.08.2010
comment
Что ж, это может быть предметом обсуждения того, как защитить его от кода-отступника. одним из способов может быть хранение его на виртуальной машине и безопасное отслеживание его кода через нее. - person Tom 'Blue' Piddock; 17.08.2010

Я бы не ожидал, что программа позволит «делить процессорное время для неопределенного типа процесса». Предпосылкой разделения процессорного времени является то, что задача может быть разделена на несколько подзадач.

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

person Ran Tang    schedule 17.08.2010
comment
хотя это может показаться нереальным, но все же возможно. Использование ИИ всегда очаровывало меня, и это было основой моей степени, поэтому, если вы можете дать какие-либо советы или идеи о том, как спланировать что-то настолько сложное, пожалуйста, поделитесь! :D - person Tom 'Blue' Piddock; 17.08.2010
comment
Разделение работы на подзадачи должно выполняться конкретным приложением. Таким образом, разработчик приложения должен спроектировать это. Это необходимо для эффективного распределения работы. - person Peladao; 17.08.2010