2016-10-26 2 views
4

Есть 3 способа развертывания новой функции с помощью веб-задания:Azure Web Job - Влияние производительности нескольких функций на одну и ту же веб-работу и/или несколько веб-заданий в одном веб-приложении?

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

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

Какое руководство для принятия решения о том, как добавить новую функцию веб-задания в мое облачное решение?

  1. Новый веб-приложение с веб-работы
  2. или новый веб-работу в существующий веб-приложения с другими веб-заданий
  3. или новой функции в существующем веб-работы с другими функциями.

Меня интересуют, как это работает, руководство, передовая практика и влияние на производительность этих 3 вариантов.

ответ

0

Как я знаю, вы можете использовать WebJobs для выполнения пользовательских заданий на основе разных типов (скриптов, исполняемых программ и т. Д.) В контексте веб-приложения. Чтобы свести к минимуму влияние WebJobs на производительность веб-приложения, вы можете попытаться создать пустое Azure Web App в новом Плане обслуживания приложений для размещения своих веб-приложений, которые могут выполнять некоторые длительные рабочие процессы, интенсивность ввода-вывода рабочие места, рабочие места с интенсивным процессором и т. д. Я рекомендую вам обратиться к best-practices-background-jobs. Кроме того, есть связанная с этим нить около Azure Webjobs: One Job with several Functions, or several Jobs with 1 function each, вы можете обратиться к ней.

+0

Спасибо. Но я ищу, как все это работает вместе с ресурсами VM, чтобы я мог принимать решения на основе сценариев с большим объемом/низким объемом. – richard

7

Это трудный вопрос для ответа, и я стараюсь дать вам некоторые подсказки. Вот несколько вещей, которые вы должны иметь в виду:

  • производительность: Если вы поместите каждый в той же работе, jobhost будет создавать новый поток каждый раз, когда один из ваших функций вызывается. Имея слишком много нитей в том же процессе может болит производительность. Мой выбор заключался бы в ограничении количества потоков, выполняющихся в одном и том же процессе. Если вы google "Многопоточность против многопроцессорности", вы найдете отличные ответы об этом. Во всяком случае, нет общего руководства, и вы должны использовать профилирующий инструмент , чтобы помочь вам решить, что является лучшим решением в вашем случае.

  • Crash: Предположим, у вас есть 2 функции в одной и той же работе. Если одна из функций сработает, это может привести к сбою всей работы. Поэтому вам может потребоваться создать отдельные задания для изоляции функций, которые должны быть устойчивыми и выполняться все время.

  • Конфигурация: Несколько заданий в одном и том же веб-приложении могут совместно использовать конфигурацию (Настройки приложения). Зависит от того, как вы управляете своей конфигурацией (с портала или с помощью приложения.config) вам может потребоваться создать отдельное веб-приложение для заданий, которые не имеют одинаковой конфигурации.

  • Развертывание: При развертывании webjob внутри webapp это приведет к перезапуску webapp. Если у вас есть веб-сайт или другое задание, которое нужно продолжать работать, вам может потребоваться создать отдельное веб-приложение, чтобы новое развертывание конкретного компонента не повлияло на доступность других компонентов.

  • «Масштабирование»: Webjobs будет работать во всех экземплярах вашего приложения. Вы можете указать конкретное задание или определенную функцию как одноэлементное. Это также то, что вы должны иметь в виду.

В противном случае вы можете быть заинтересованы в Azure Functions. Он использует динамический план обслуживания приложений, который автоматически масштабируется, и вы платите только при выполнении функций. Каждая функция независима, поэтому вам не нужно беспокоиться :-)

+0

Спасибо, Томас, это тот ответ, который я искал. Поэтому каждый раз, когда вызывается функция, создается новый поток. Итак, если у меня есть непрерывный webjob с 2 функциями, то будет 2 потока? Или 1 нить? – richard

+0

Мы говорим о запущенных функциях? – Thomas

+0

Да, непрерывные, запущенные функции (например, вызванные блобом или очередью). – richard