Рабочие роли наиболее эффективны, когда они работают на полной или близкой к полной загрузке ЦП - в конце концов, вы платите за них ЦП. Полезный способ добиться этого - объединить рабочие роли таким образом, чтобы все фоновые задания выполнялись в одной роли.
Отличный способ запустить архитектуру с одним типом рабочей роли - это использовать некий общий шаблон рабочей роли - в основном шаблон плагина, при котором рабочая роль читает сообщение из очереди и использует некоторые метаданные, закодированные в сообщении (или имя очереди), чтобы определить тип обработки, которая требуется. Затем он перейдет в хранилище больших двоичных объектов, чтобы извлечь сборку .NET для выполнения этого типа обработки, создать экземпляр этого объекта в новом домене приложения и перенаправить контекст в эту сборку для обработки.
Это рассматривается в сеансе асинхронных рабочих нагрузок в Обучающем комплекте по платформе Windows® . Это также содержит практическую работу, которая проведет вас через пример реализации одного из этих типов подходов.
Ребята из Lokad имеют действительно элегантную реализацию, включающую в себя все полирующие и административные механизмы, которые вам понадобятся, если вы сделаете это правильно. Их реализация получила лицензию New BSD и стала победителем MSFT Azure Partner премии YEar в прошлом году. Это неотъемлемая часть почти каждого проекта Azure, который я создаю. Настоятельно рекомендуется и тривиально интегрировать. http://code.google.com/p/lokad-cloud/
Короче говоря, я предпочитаю обобщенную рабочую роль, реализованную в виде шаблона типа плагина с динамической загрузкой и созданием экземпляров.