Я создал несколько веб-заданий Azure , использующих триггеры, и только что узнал о функциях Azure .
Из того, что я понимаю, функции Azure частично совпадают с функциями веб-заданий Azure, и мне сложно понять, когда выбирать между функцией и веб-заданием:
В отличие от Webjobs, функции могут быть запущены только потому, что они не предназначены для запуска непрерывного процесса (но вы можете написать код для создания непрерывной функции).
Вы можете писать веб-задания и функции на многих языках (C #, node.js, python ...), но вы можете написать свою функцию на портале Azure, чтобы было проще и быстрее разрабатывать тестирование и развертывание функции.
Веб-задания выполняются как фоновые процессы в контексте веб-приложения службы приложений, приложения API или мобильного приложения, тогда как функции выполняются с использованием плана обслуживания классического / динамического приложения.
Что касается масштабирования, функции, похоже, предоставляют больше возможностей, поскольку вы можете использовать динамический план обслуживания приложения и масштабировать одну функцию, тогда как для веб-задания вам необходимо масштабировать все веб-приложение.
Поэтому, безусловно, есть разница в цене, если у вас есть работающее веб-приложение, вы можете использовать его для запуска веб-задания без каких-либо дополнительных затрат, но если у меня нет существующего веб-приложения, и мне нужно написать код, чтобы вызвать очередь я должен использовать веб-работу или функцию?
Есть ли другие соображения, которые нужно иметь в виду, когда вам нужно выбрать?
Ответы:
В Службе приложений есть несколько вариантов. Я не буду касаться приложений логики или 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.
Я, вероятно, в конечном итоге опубликую блог, который разрабатывает немного больше, но я постарался сделать его максимально кратким для этого форума.
источник
Будучи функциями 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 :)
источник
if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); }
:)Согласно документам, у функций Azure есть следующее, чего нет у WebJobs:
Проще говоря: Azure Functions - более новое животное. Если у вас еще нет плана обслуживания приложений, я бы пошел с функциями, потому что в долгосрочной перспективе я не вижу причин, по которым начинать с WebJobs было бы лучше (хотя набор функций функций может быть не таким стабильным).
источник
Я хотел бы добавить еще два пункта к вышеупомянутым длинным и немного старым сообщениям. если вы выбираете план потребления в функциях Azure, ниже приведены ограничения
Если вы хотите выполнять какие-либо задания более 10 минут, выберите веб-задания. Функции Azure, по умолчанию запускаются только на 5 минут . Если ваш процесс превышает 5 минут, функция Azure генерирует исключение тайм-аута. Вы можете увеличить время ожидания до 10 минут в host.json .
Примечание. Нет проблем с тайм-аутом, если вы используете функции Azure плана обслуживания приложения.
Еще одна причина, чтобы отличить это. Если вы используете функцию Azure, то ваше начальное время запуска будет медленным, потому что машины (контейнеры) создаются на лету и уничтожаются после их использования.
Чтобы избежать холодного запуска, приложение-функция Azure выпустило премиальный план, в котором один экземпляр будет работать все время и в зависимости от нагрузки приложение-функция начнет масштабироваться, и вам будет выставлен счет за один экземпляр, а за другие экземпляры будет взиматься плата в зависимости от потребления.
источник
Я понимаю, что очень опаздываю к игре с этим ответом, но, поскольку это по-прежнему лучший результат поиска в Google, я хотел бы дать некоторые рекомендации по этой теме строго с точки зрения затрат, поскольку кажется, что у ОП есть некоторые опасения по поводу стоимости , Здесь уже есть несколько отличных ответов, в которых рассказывается о технических ограничениях и подробностях работы каждого сервиса, поэтому я не буду перефразировать эти ответы.
Если вам абсолютно необходимо что-то, что работает «бесплатно» (без каких-либо дополнительных затрат по сравнению с тем, что вы уже заплатили за свое веб-приложение), тогда у вас есть два варианта:
Если вы беспокоитесь о затратах, но не ограничены никакими затратами, у вас есть больше вариантов.
Если вы заинтересованы в чтении некоторых конкретных сценариев и почему я бы выбрал один (веб-задания, функции, облачные сервисы) вместо другого, я только недавно написал сообщение в блоге о веб-операциях против функций и облачных сервисов .
источник
Основное соображение заключается в том, что функции Azure перестали поддерживать полную версию .NET Framework после версии 1, которая была прекращена с v2.0 и которая не изменится в текущей версии Preview v3.0. 😔
Документация проясняет это здесь ,
как и этот ответ обратной связи ,
а также этот вопрос GitHub / ответ .
Между тем, этот сильный вооруженный подход, к счастью, еще не применялся к веб-заданиям Azure :
источник
Я хотел бы дать, каковы общие черты и различия между двумя функциями Azure построены на основе AppService и WebJobs SDK. WebJobs SDK предоставит вам больше свободы для игры, а функции Azure более структурированы и требуют меньше ответственности для разработчиков.
Когда вы смотрите на общие черты, оба используют режим функционально-ориентированного программирования, привязки для триггера / ввода / вывода, поддерживают внешние библиотеки и могут запускать и отлаживать локально вспомогательные средства Supportruntime.
Различия
источник