#c# #.net #azure #amazon-ec2 #amazon-web-services
#c# #.net #azure #amazon-ec2 #amazon-веб-сервисы
Вопрос:
Потребности моей компании довольно просты: у нас многопоточный.Программа сетевых вычислений, которая считывает много Гб двоичных файлов, обрабатывает массивные вычисления и сохраняет результаты в базе данных SQL Server. Мы хотели бы сделать это в облаке, чтобы выполнить эту повторяющуюся задачу в кратчайшие возможные сроки.
Итак, мы сразу переходим к облачным / грид-/ кластерным вычислениям.
Я думал, что по этому вопросу будет масса ресурсов и множество доступных альтернатив. Я был просто ошеломлен, поняв, насколько я ошибался. Хотя смонтировать / запустить экземпляры EC2 было несложно, найти относительно простой и понятный способ распараллеливания и объединения вычислительной мощности этих экземпляров EC2 было непросто. Служба поддержки клиентов Amazon продолжает увиливать, и я просто не смог получить от них конкретный ответ.
Я нашел utilify, который звучит многообещающе. Он разработан сотрудниками alchemi. Однако ссылка на документацию не работает, и я не получил ответа на свои электронные письма, когда обращался в службу поддержки, так что это было не очень обнадеживающе.
Мы выбрали Amazon, а не Azure, поскольку AMI — это простые виртуальные машины (не нужно «связывать» приложение или что-то другое), а также потому, что EBS — более удобное хранилище, поскольку это «настоящая» файловая система. С другой стороны, Azure, похоже, готов к HPC для Windows, тогда как AWS предлагает это только для AMI на базе Linux.
Любая помощь и предложения более чем приветствуются
Редактировать :
The .Сетевое приложение является многопоточным и состоит из сотен параллельных рабочих элементов, выполняющих точно такую же задачу асинхронно.
Комментарии:
1. В настоящее время у Azure есть собственный доступ к файловой системе, я полагаю, это называется «Облачный диск». Во-вторых, нет очевидного решения для распараллеливания, все зависит от вашего приложения. Я бы рекомендовал сначала поработать над распараллеливанием вашего приложения, а затем преобразовать его в грид-вычисления. Пытаться перейти от синхронного приложения напрямую к параллельному приложению для грид-вычислений
madness
.2. @Chris Marisic : Пожалуйста, посмотрите правку. Я думал, что слова «многопоточный» достаточно, чтобы подчеркнуть, что наше приложение асинхронное. Кроме того, развертывание приложений в Azure является инвазивным по сравнению с обычной виртуальной машиной, поэтому нам лучше придерживаться EC2, если у нас нет выбора.
3. Из формулировки вопроса мне показалось, что вы пытаетесь взять обычное приложение и сразу же заставить его вычислять по сетке. Что касается ваших заявлений о Azure, то, похоже, вы в значительной степени не знакомы с текущей платформой и имеете предвзятую точку зрения на нее по сравнению с предыдущими версиями. Я бы рекомендовал пересмотреть Azure для этой роли, потому что сценарий, который вы описываете, является точной причиной создания Azure.
Ответ №1:
Amazon EC2 по сути является системой инфраструктуры как сервиса (IaaS), что означает, что EC2 предоставит вам аппаратное обеспечение и ОС, но не решит за вас проблему грид-вычислений. Это отличие от Windows Azure, которая представляет собой систему «Платформа как услуга» (PaaS), требующую использования другой архитектуры, где ваше приложение разбито на разные роли (веб-роль, рабочая роль и т.д.), Которые можно легко масштабировать в виде сетки. Смотрите этот вопрос для получения более подробной информации о IaaS vs PaaS.
Разница при развертывании в Azure по сравнению с EC2 заключается именно в том, что Azure требует от вас мыслить в большем масштабе, чем EC2. Если вы хотите масштабироваться в EC2, вам придется делать это самостоятельно или использовать их Elastic Bean Stalk, который в настоящее время поддерживает Java только в Apache Tomcat.
Что касается того, как спроектировать систему, моя рекомендация заключалась бы в том, чтобы найти способ разбить проблему на части, которые могут быть обработаны на отдельных машинах, и загрузить сообщение в очередь, описывающее, как выполнить работу. В этом случае экземпляры EC2 или роли Azure извлекали бы работу из очереди, выполняли требуемые вычисления, а затем либо сохраняли результаты непосредственно в пункте назначения, либо отправляли результат в очередь вывода, которая затем агрегирует результаты. Это самый простой метод выполнения грид-вычислений без полной перепроектирования для чего-то вроде MapReduce. Вам все еще нужно беспокоиться о том, что произойдет, если виртуальная машина умрет до фиксации результатов, но этим можно управлять, не удаляя запись в очереди, пока не будут зафиксированы ее результаты.
Ответ №2:
Если вы можете вернуться к Azure, а не к EC2, то:
- Дэвид Паллман подготовил пример проекта Grid для Azure — http://azuregrid.codeplex.com
- локад.В Cloud project есть интересный код фреймворка, включая простой пример сокращения карты — http://lokadcloud.codeplex.com
Извините — у вас нет похожих ссылок на EC2 — хотя вы могли бы черпать вдохновение в проектах Microsoft Dryad (я думаю, что в настоящее время они доступны только по «образовательной» некоммерческой лицензии)
Ответ №3:
Вам следует обратить внимание на Windows HPC
Microsoft прилагает все усилия для предоставления HPC-узлов в Windows Azure, что является именно тем, что вы ищете. Вот технический документ по этому вопросу:
отсюда:http://www.microsoft.com/hpc/en/us/default.aspx
http://www.networkworld.com/news/2010/111610-microsoft-hpc-server.html