Azure Webjobs vs Azure Функции: как выбрать

163

Я создал несколько веб-заданий Azure , использующих триггеры, и только что узнал о функциях Azure .

Из того, что я понимаю, функции Azure частично совпадают с функциями веб-заданий Azure, и мне сложно понять, когда выбирать между функцией и веб-заданием:

  • В отличие от Webjobs, функции могут быть запущены только потому, что они не предназначены для запуска непрерывного процесса (но вы можете написать код для создания непрерывной функции).

  • Вы можете писать веб-задания и функции на многих языках (C #, node.js, python ...), но вы можете написать свою функцию на портале Azure, чтобы было проще и быстрее разрабатывать тестирование и развертывание функции.

  • Веб-задания выполняются как фоновые процессы в контексте веб-приложения службы приложений, приложения API или мобильного приложения, тогда как функции выполняются с использованием плана обслуживания классического / динамического приложения.

  • Что касается масштабирования, функции, похоже, предоставляют больше возможностей, поскольку вы можете использовать динамический план обслуживания приложения и масштабировать одну функцию, тогда как для веб-задания вам необходимо масштабировать все веб-приложение.

Поэтому, безусловно, есть разница в цене, если у вас есть работающее веб-приложение, вы можете использовать его для запуска веб-задания без каких-либо дополнительных затрат, но если у меня нет существующего веб-приложения, и мне нужно написать код, чтобы вызвать очередь я должен использовать веб-работу или функцию?

Есть ли другие соображения, которые нужно иметь в виду, когда вам нужно выбрать?

Томас
источник
6
Это сообщение в блоге, я должен. :) Я постараюсь подготовить ответ, но он может быть немного открытым для переполнения стека, поэтому вам может потребоваться задать это в MSDN, если он будет закрыт.
Крис Андерсон-MSFT
Хороший (короткий) пост в блоге на эту тему geekswithblogs.net/tmurphy/archive/2016/06/02/…
Тодд Менье
Эй, Тодд, не стесняйтесь редактировать мой вопрос, чтобы добавить ссылку. Интересная статья ^^
Томас
@ chris-anderson-msft Можем ли мы запустить PowerShell в качестве веб-задания? Можем ли мы установить пакет PowerShell на Webjob?
Anomepani

Ответы:

170

В Службе приложений есть несколько вариантов. Я не буду касаться приложений логики или Azure Automation, которые также затрагивают это пространство.

Azure WebJobs

Эта статья , честно говоря, лучшее объяснение, но я подведу итог здесь.

По требованию WebJobs ака. Запланированные WebJobs ака. Триггерные веб-задания

Триггерные веб-задания - это веб-задания, которые запускаются один раз при вызове URL-адреса или когда свойство schedule присутствует в schedule.job . Запланированные веб-задания - это просто веб-задания, в которых создано задание планировщика Azure для вызова нашего URL-адреса по расписанию, но мы также поддерживаем свойство расписания, как упоминалось ранее.

Резюме:

  • + Исполняемый файл / скрипт по запросу
  • + Запланированные казни
  • - Должен запускаться через конечную точку .scm
  • - Масштабирование ручное
  • - ВМ всегда требуется

Непрерывные веб-задания (не SDK)

Эти работы выполняются вечно, и мы разбудим их, когда они рухнут. Вам нужно включить Always On, чтобы они работали, что означает запуск их на уровне Basic и выше.

Резюме:

  • + Исполняемый файл / скрипт всегда работает
  • - Требуется всегда - базовый уровень и выше
  • - ВМ всегда требуется

Непрерывные WebJobs с SDK WebJobs

Это не что-то с точки зрения "WebJobs the feature". По сути, у нас есть этот замечательный SDK, который мы написали для WebJobs, который позволяет выполнять код на основе простых триггеров. Я расскажу об этом позже.

Резюме:

  • + Исполняемый файл / скрипт всегда работает
  • + Более богатая регистрация / приборная панель
  • + Триггеры поддерживаются вместе с длительными задачами
  • - Требуется всегда - базовый уровень и выше
  • - Масштабирование настраивается вручную
  • - Начало работы может быть немного утомительным
  • - ВМ всегда требуется

Azure WebJobs SDK

Azure WebJobs SDK - это совершенно отдельный SDK от WebJobs, который является платформой. Он предназначен для запуска в WebJob, но действительно может быть запущен где угодно. У нас есть клиенты, которые выполняют их на рабочих ролях и даже на прем-или других облаках, хотя поддержка - только лучшее усилие.

SDK позволяет просто запускать некоторый код в ответ на какое-то событие и связывать его со службами и т. Д. легко. Честно говоря, это лучше всего описано в некоторых документах , но суть в том, что "событие" + "кодовая" природа. Мы также проделали отличную работу по расширению, но это вторично по отношению к основной цели.

Резюме:

  • Большинство из них упомянуты выше
  • +Вы можете расширять и запускать все, что хотите. Полный контроль.
  • - HTTP-материал немного сложен, но работает

Функции Azure

Функции Azure - это основная цель SDK WebJobs, размещение его в качестве службы и упрощение работы с другими языками. Мы также представляем здесь концепцию «без сервера», потому что в этом было много смысла - мы знаем, как масштабируется наш SDK, поэтому мы можем сделать интеллектуальные вещи для вас.

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

Большинство «каркасных» вещей, которые мы сделали для улучшения функций, проходят через WebJobs SDK. Например, мы будем загружать новый NuGet для WebJobs, который значительно увеличивает скорость ведения журнала, что дает огромные преимущества для пользователей WebJobs SDK. В функции доставки как "WebJobs SDK как услуга" мы действительно исправили множество проблем с опытом.

  • + Поддерживается множество языков
  • + Полностью управляемое динамическое масштабирование
  • + Простой в использовании портал с UX для управления соединениями и т. Д.
  • - Хост не настраивается (пока)
  • ~ Запускается в отдельном «приложении», которое требует определенной настройки в вашем репо, но значительно облегчает долгосрочное обслуживание.
  • ~ Нет инструментов (пока). Некоторые инструменты теперь в альфа-версии или в режиме предварительного просмотра - https://www.npmjs.com/package/azurefunctions (обновление, февраль 2017 г .: инструменты Visual Studio для функций Azure теперь доступны в режиме предварительного просмотра: https: //blogs.msdn .microsoft.com / webdev / 2016/12/01 / visual-studio-tools-for-azure-functions / )

Я, вероятно, предвзят, так как Functions - наша последняя и самая лучшая игра, но, не стесняйтесь, выкладывайте больше минусов для Functions.

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

Крис Андерсон-MSFT
источник
1
Звучит безподобно. Напишите мне в Twitter (@crandycodes), если у вас есть какие-либо вопросы. Я могу помочь вам продвигать ваши образцы на Azure.com, если вы хотите, если вы хотите поделиться ими.
Крис Андерсон-MSFT
1
Я мог видеть, что это полезно. Я знаю, что есть много места для обсуждения того, как перейти от шаблонов приложений к серверу. Это похоже на то, что вы только что описали.
Крис Андерсон-MSFT
1
По сути, мы берем ваш код и конфигурацию и создаем функцию WebJob SDK (отсюда и название Azure Functions) под обложками. Итак, ваш код выполняется внутри функции WebJob SDK, которой мы руководим для вас.
Крис Андерсон-MSFT
1
Каждое приложение-функция имеет 1 хост (который вы можете рассматривать как веб-задание). Ваши функции в приложении Function имеют общую файловую систему, настройки приложения, память, процессор и т. Д. Не стесняйтесь задавать новый вопрос.
Крис Андерсон-MSFT
2
Да. Таймер запуска. Cron выражение {0 * / 30 * * * *} azure.microsoft.com/en-us/documentation/articles/…
Крис Андерсон-MSFT,
17

Будучи функциями Azure, основанными на SDK WebJobs, они предоставляют большую часть функциональности, уже доступной в WebJobs, но с некоторыми новыми интересными возможностями.

С точки зрения триггеров , в дополнение к тем, которые уже доступны для WebJobs (например, служебная шина, очереди хранения, BLOB-объекты хранения, расписания CRON, WebHooks, EventHub и хранилище файлового облака), функции Azure можно запускать как API. HTTP-вызовы не требуют учетных данных kudu, но могут проходить проверку подлинности с помощью Azure AD и сторонних поставщиков удостоверений.

Что касается выходных данных , единственное отличие состоит в том, что функции могут возвращать ответ при вызове через HTTP.

Оба поддерживают широкий спектр языков , включая bash (.sh), batch (.bat / .cmd), C #, F #, Node.Js, PHP, PowerShell и Python.

Будучи функциями в настоящее время в Preview, набор инструментов все еще не идеален. Но Microsoft работает над этим. Надеемся, что мы получим ту же гибкость в разработке и тестировании локальных функций, что и в настоящее время для WebJobs с Visual Studio.

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

Более подробное сравнение между ними здесь: https://blog.kloud.com.au/2016/09/14/azure-functions-or-webjobs/

HTH :)

Пако де ла Круз
источник
Спасибо за ваш ответ Пако! Это сравнение может заинтересовать многих людей :-) Но я не искал сравнения, а просто пытался понять, когда мне следует использовать функции, а не веб-задания!
Томас
6
Трудно иметь четкое руководство, не зная контекста. Вот почему я полагал, что сравнение может помочь людям выбрать :) Я бы сказал, что: if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); } :)
Пако де ла Круз
Функции могут возвращать ответ при вызове через HTTP. Но функции основаны на SDK WebJobs. Странно, не правда ли?
RudyCo
Вероятно, лучше сказать, что они были основаны на SDK WebJobs, но от этого они довольно сильно эволюционировали :)
Пако де ла Круз
14

Согласно документам, у функций Azure есть следующее, чего нет у WebJobs:

  • Автоматическое масштабирование (ЦП и память масштабируются в соответствии с потребностями, определенными во время выполнения)
  • Плата за использование (план потребления вместо плана обслуживания приложения)
  • Больше триггерных событий (например, WebHooks)
  • Разработка в браузере (Visual Studio все еще возможна)
  • Поддержка F #

Проще говоря: Azure Functions - более новое животное. Если у вас еще нет плана обслуживания приложений, я бы пошел с функциями, потому что в долгосрочной перспективе я не вижу причин, по которым начинать с WebJobs было бы лучше (хотя набор функций функций может быть не таким стабильным).

user764754
источник
14

Я хотел бы добавить еще два пункта к вышеупомянутым длинным и немного старым сообщениям. если вы выбираете план потребления в функциях Azure, ниже приведены ограничения

Если вы хотите выполнять какие-либо задания более 10 минут, выберите веб-задания. Функции Azure, по умолчанию запускаются только на 5 минут . Если ваш процесс превышает 5 минут, функция Azure генерирует исключение тайм-аута. Вы можете увеличить время ожидания до 10 минут в host.json .

Примечание. Нет проблем с тайм-аутом, если вы используете функции Azure плана обслуживания приложения.

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

Чтобы избежать холодного запуска, приложение-функция Azure выпустило премиальный план, в котором один экземпляр будет работать все время и в зависимости от нагрузки приложение-функция начнет масштабироваться, и вам будет выставлен счет за один экземпляр, а за другие экземпляры будет взиматься плата в зависимости от потребления.

Картикеян В.К.
источник
Ваш первый пункт применим только в том случае, если вы используете план потребления, с оплаченным sku у вас нет ограничения по времени. Я согласен со вторым пунктом.
Томас
Я думаю, что оба пункта действительны для плана потребления. Спасибо за указание
Картикеян В.К.
4
Большое упоминание о тайм-аутах. Для нас это важный фактор
Niels Filter
1
Но вы можете выбрать план appservice при создании функций Azure. Но это побеждает всю цель, хотя
Картикеян В.К.
1
@KarthikeyanVK, я не уверен, что он все еще точен, поскольку время выполнения функции v2 позволяет более 10 минут?
Томас
6

Я понимаю, что очень опаздываю к игре с этим ответом, но, поскольку это по-прежнему лучший результат поиска в Google, я хотел бы дать некоторые рекомендации по этой теме строго с точки зрения затрат, поскольку кажется, что у ОП есть некоторые опасения по поводу стоимости , Здесь уже есть несколько отличных ответов, в которых рассказывается о технических ограничениях и подробностях работы каждого сервиса, поэтому я не буду перефразировать эти ответы.

Если вам абсолютно необходимо что-то, что работает «бесплатно» (без каких-либо дополнительных затрат по сравнению с тем, что вы уже заплатили за свое веб-приложение), тогда у вас есть два варианта:

  1. Веб-задания - развертываются вместе с существующим веб-приложением и используют те же ресурсы, что и ваше веб-приложение. Для использования веб-заданий не требуется никаких дополнительных денежных затрат, но, как уже упоминалось, существуют некоторые ограничения, которые могут привести к снижению производительности вашего веб-приложения.
  2. Функции - при использовании плана потребления вам предоставляется определенное количество бесплатных казней. Количество на момент написания этой статьи на самом деле довольно высокое, 1 миллион бесплатных казней. Тем не менее, ограничение в 1 миллион не является пределом, который может доставить вам неприятности; это 400K ГБ-с (гигабайтные секунды). Это в основном подсчет объема памяти, используемой вашей функцией, умноженный на количество секунд, в течение которых она работает (см. Официальный расчет на странице с ценами здесь ). Вы будете удивлены, как быстро это бесплатное выделение будет использовано.

Если вы беспокоитесь о затратах, но не ограничены никакими затратами, у вас есть больше вариантов.

  1. Функции - Вы можете запустить либо в плане потребления, либо в плане обслуживания приложения по относительно недорогой цене. Имейте в виду, хотя, модель биллинга Великобритании. Если вы используете план потребления и выполняете частую, «тяжелую» работу - вас может удивить большой счет.
  2. Облачные сервисы - этот вариант не обсуждался как альтернатива, главным образом потому, что ОП не спрашивал об этом. Но это тоже жизнеспособный вариант. Облачные сервисы - это, в конечном счете, просто виртуальные машины, работающие в облаке, так что вы можете запускать на них любые фоновые задания, которые вам нужны, и они довольно хорошо масштабируются (хотя вам приходится подключать свои собственные триггеры для выполнения, небольшое неудобство по сравнению с веб-заданиями / функциями). ). С ними связана более высокая начальная стоимость (поскольку вы платите за экземпляр независимо от того, используете ли вы его или нет), но если у вас есть задания, которые должны выполняться постоянно и выполняющие «тяжелую» работу, то облачные службы могут быть лучшим выбором. потому что, на мой взгляд, легче управлять / контролировать виртуальную машину с фиксированной ценой, чем число выполнений и гигабайтные секунды.

Если вы заинтересованы в чтении некоторых конкретных сценариев и почему я бы выбрал один (веб-задания, функции, облачные сервисы) вместо другого, я только недавно написал сообщение в блоге о веб-операциях против функций и облачных сервисов .

Дэн
источник
1
Спасибо за ответ @Dan :-) Я бы сказал, что облачный сервис все еще хорош, но я думал о сравнении webjob и функций, так как они используют один и тот же основной SDK и два с половиной года назад, я не очень понимал цель безсерверной работы. :-)
Томас
3

Основное соображение заключается в том, что функции Azure перестали поддерживать полную версию .NET Framework после версии 1, которая была прекращена с v2.0 и которая не изменится в текущей версии Preview v3.0. 😔

Между тем, этот сильный вооруженный подход, к счастью, еще не применялся к веб-заданиям Azure :

Версия 3.x SDK WebJobs поддерживает консольные приложения .NET Core и .NET Framework.

Николас Петерсен
источник
Да, хорошая мысль. Тем не менее, с этого момента люди должны стараться использовать чистое ядро ​​как можно больше.
Томас
0

Я хотел бы дать, каковы общие черты и различия между двумя функциями Azure построены на основе AppService и WebJobs SDK. WebJobs SDK предоставит вам больше свободы для игры, а функции Azure более структурированы и требуют меньше ответственности для разработчиков.

Когда вы смотрите на общие черты, оба используют режим функционально-ориентированного программирования, привязки для триггера / ввода / вывода, поддерживают внешние библиотеки и могут запускать и отлаживать локально вспомогательные средства Supportruntime.

Различия

|-----------------------|------------------|
|      Functions        |     Web Jobs     |
|-----------------------|------------------|
|Can support HTTP       | Can't support HTTP
|                       |  requests        |
|-----------------------|------------------|
|Supports a variety of  | Traditional .NET |
|languages/tools        | developer        |
|                       | experience       |
|-----------------------|------------------|
|Bindings are configured| Config files are |
|using attributes       | used             |
|-----------------------|------------------|
|Scale is managed by    | Scale is managed |
|Azure                  | by user          |
|-----------------------|------------------|
|Limited control over   |Host can be       |
|host                   |controlled by user|
--------------------------------------------

введите описание изображения здесь

Sajeetharan
источник