Azure Worker Role Design - PullRequest
1 голос
/ 25 мая 2011

Я пытаюсь разработать лазурную рабочую роль. Рабочая роль опрашивает очередь заданий. Для каждого задания в сообщении задания указывается необходимое количество потоков. Задание запускает экземпляр исполняемого файла. Пример: имя исполняемого файла - Rax.exe. Rax.exe может работать на разном количестве потоков. Если мы назовем его Rax.exe -T 2, он создаст два потока. Поэтому нам не нужно разбираться с тем, как создавать темы. Мы просто вызываем Rax.exe с соответствующим аргументом командной строки. У меня есть Экстра-Большие рабочие экземпляры. Итак, я могу запустить 8 потоков одновременно. Я хочу использовать рабочих как можно больше. У нас может быть много заданий, каждое из которых имеет различное количество указанных потоков.

Пример:

Job Queue:

1 Rax.exe -T 3
2 Rax.exe -T 5
3 Rax.exe -T 1
4 Rax.exe -T 8
5 Rax.exe -T 4

В этом примере у нас есть 5 рабочих мест. Рабочий читает первое сообщение и начинает работу. Эта работа занимает 3 темы. Рабочий может иметь 8 потоков, поэтому остальные 5 потоков можно использовать, запустив другое задание из очереди.

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

Мои вопросы:

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

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

Ответы [ 2 ]

1 голос
/ 25 мая 2011

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

Это довольно просто - вместо использования WaitForExit вы можете подписаться на Exited событие

2- Является ли такой вид работы сложной задачей? Кто-нибудь может придумать хорошую эвристику?

Как Эрно предложил в своем комментарии, один хороший способ решить эту проблему - передать ее в API-интерфейс Parallel Task. Хотя общий многопоточный алгоритм планирования не может обеспечить «наиболее оптимальное» решение для планирования, он может обеспечить действительно хорошее решение при минимальных усилиях - и со сложностью работы иногда общий алгоритм планирования может превзойти ручную работу решение ..

Если вы заинтересованы в планировании подходов для пакетных процессов в Azure, то, возможно, стоит взглянуть на некоторые из проектов типа Map-Reduce в Azure:

Хотя эти подходы в основном касаются распределения работы по нескольким машинам, такой же подход может применяться к распределению работы по нескольким ядрам в пределах одной машины.

0 голосов
/ 02 сентября 2011

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

Вот как выполняется мультиобработка в платформе / парадигме Azure. Вы можете иметь более одного экземпляра Role Instance, захватывающего элементы из одной и той же очереди, как и было спроектировано системой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...