Рабочие роли Windows Azure: одна большая работа или много мелких работ? - PullRequest
0 голосов
/ 20 мая 2010

Есть ли присущи преимущества при использовании нескольких рабочих для обработки частей процедурного кода по сравнению с обработкой всей нагрузки?

Другими словами, если мой рабочий процесс выглядит так:

  1. Получить работу из очереди0 и выполнить A
  2. Сохранить результат из A в очереди1
  3. Получить результат из очереди 1 и выполнить B
  4. Сохранить результат из B в очереди2
  5. Получить результат из очереди2 и выполнить C

Есть ли присущи преимущества использования 3 работников, каждый из которых выполняет весь процесс самостоятельно, и 3 работников, каждый из которых выполняет часть работы (работник 1 выполняет 1 и 2, работник 2 выполняет 3 и 4, работник 3 выполняет 5) .

Если бы мы заботились только о том, чтобы работа была выполнена (завершено с шагом 5), казалось бы, она масштабируется таким же образом (если вы используете по крайней мере 3 рабочих). Может быть, большая работа лучше, потому что у рабочих с такой настройкой меньше проблем с узкими местами?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Добавление к тому, что говорит @smarx:

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

  • Есть дополнительная перспектива стоимости. У вас будет экономический стимул для увеличения «плотности задач» (как в задачах / экземплярах). Если у вас есть M видов работ, и вы назначаете каждого из них другому работнику, вы будете платить за M экземпляров, даже если некоторые из них могут выполнять какую-то работу только один раз в то время.

Я писал об этом некоторое время назад, и это одна из тем нашего гида (глава "06 week3.docx")

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

1 голос
/ 20 мая 2010

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

Если не учитывать, как разбить работу на более мелкие части, возникает вопрос о том, должно ли быть несколько рабочих ролей, каждая из которых может выполнять только один вид работы, или одна рабочая роль (но много экземпляров), которая может делай все. Я бы по умолчанию выбрал последнее (код, который может делать все и просто проверяет все очереди, чтобы увидеть, что нужно сделать), но есть причины, чтобы пойти с первым. Например, если вам нужно больше оперативной памяти для одного вида работы, вы можете использовать больший размер виртуальной машины для этого работника. Другой пример - если вы хотите независимо масштабировать различные виды работы.

...