Azure Webjobs 및 Azure Functions : 선택 방법


163

트리거를 사용 하는 Azure Webjobs 를 만들었 으며 Azure Functions 에 대해 방금 배웠습니다 .

내가 이해하는 것에서 Azure Functions는 Azure Webjobs 기능과 겹치는 것 같으며 Function과 Webjob 중에서 선택할시기를 이해하는 데 약간의 어려움이 있습니다.

  • 웹 작업과 달리 함수는 트리거 될 수만 있으며 연속 프로세스를 실행하도록 설계되지 않았습니다 (그러나 연속 함수를 작성하는 코드를 작성할 수는 있습니다).

  • 많은 언어 (C #, node.js, python ...)를 사용하여 웹 작업 및 함수를 작성할 수 있지만 Azure 포털에서 함수를 작성할 수 있으므로 테스트를 개발하고 함수를보다 쉽고 빠르게 개발할 수 있습니다.

  • 웹 작업은 App Service 웹 앱, API 앱 또는 모바일 앱의 컨텍스트에서 백그라운드 프로세스로 실행되는 반면 기능은 클래식 / 동적 앱 서비스 계획을 사용하여 실행됩니다.

  • 스케일링과 관련하여 기능은 동적 앱 서비스 계획을 사용할 수 있고 단일 기능을 확장 할 수있는 반면 웹 작업의 경우 전체 웹 앱을 확장해야하므로 더 많은 가능성을 제공하는 것 같습니다.

따라서 가격 차이가 있는지 확인하려면 기존 웹 앱을 실행중인 경우 추가 비용없이 웹 작업을 실행할 수 있지만 기존 웹 앱이없고 대기열을 트리거하는 코드를 작성해야하는 경우 webjob 또는 Function을 사용해야합니까?

선택해야 할 때 명심해야 할 다른 사항이 있습니까?


6
이것은 내가 빚진 블로그 게시물입니다. :) 응답을 준비하려고 시도하지만 이것은 스택 오버플로에 대해 약간 개방되어있을 수 있으므로 MSDN에서 닫히면 요청해야 할 수도 있습니다.
Chris Anderson-MSFT

이 주제에 관한 멋진 (짧은) 블로그 게시물 geekswithblogs.net/tmurphy/archive/2016/06/02/…
Todd Menier

토드, 링크를 추가하기 위해 내 질문을 자유롭게 편집하십시오. 흥미로운 기사 ^^
토마스

@ chris-anderson-msft PowerShell을 웹 작업으로 실행할 수 있습니까? Webjob에 PowerShell 패키지를 설치할 수 있습니까?
anomepani

답변:


170

App Service에는 몇 가지 옵션이 있습니다. 이 공간을 다루는 Logic Apps 또는 Azure Automation은 다루지 않습니다.

Azure WebJobs

이 기사 는 솔직히 가장 좋은 설명이지만 여기에 요약하겠습니다.

요청시 WebJobs 일명. 예정된 WebJobs 일명. 트리거 된 웹 작업

트리거 된 웹 작업은 URL을 호출하거나 schedule 속성이 schedule.job에 있을 때 한 번 실행되는 웹 작업입니다 . 예약 된 WebJobs는 일정에 따라 URL을 호출하기 위해 Azure Scheduler Job이 생성 된 WebJobs 일 뿐이지 만 앞서 언급 한대로 schedule 속성도 지원합니다.

요약:

  • + 실행 가능 / 스크립트
  • + 예정된 실행
  • - .scm 엔드 포인트를 통해 트리거해야 함
  • - 스케일링은 수동입니다
  • - VM은 항상 필요합니다

지속적인 웹 작업 (비 SDK)

이 작업은 영원히 실행되며 충돌시 깨어날 것입니다. 이 기능이 작동하려면 Always On을 활성화해야합니다. 즉, 기본 계층 이상에서 실행해야합니다.

요약:

  • + 실행 파일 / 스크립트는 항상 실행
  • - 항상 필요-기본 등급 이상
  • - VM은 항상 필요합니다

WebJobs SDK를 통한 지속적인 WebJobs

이것들은 "WebJobs the feature"관점에서 볼 수있는 것이 아닙니다. 본질적으로 우리는 간단한 트리거를 기반으로 코드를 실행할 수있는 WebJobs를 대상으로 작성한이 달콤한 SDK를 가지고 있습니다. 나중에 이것에 대해 더 이야기하겠습니다.

요약:

  • + 실행 파일 / 스크립트는 항상 실행
  • + 보다 풍부한 로깅 / 대시 보드
  • + 장기 실행 작업과 함께 지원되는 트리거
  • - 항상 필요-기본 등급 이상
  • - 스케일링은 수동 설정입니다
  • - 시작하는 것은 약간 성 가실 수 있습니다
  • - VM은 항상 필요합니다

Azure WebJobs SDK

Azure WebJobs SDK는 플랫폼 기능과 WebJobs와 완전히 분리 된 SDK입니다. WebJob에서 실행되도록 설계되었지만 실제로 어디에서나 실행할 수 있습니다. 지원은 최선의 노력 일 뿐이지 만 직원 역할 및 사내 또는 기타 클라우드에서 고객을 운영하는 고객이 있습니다.

SDK는 일부 이벤트에 반응하여 일부 코드를 쉽게 실행하고 서비스 등에 바인딩하는 것을 쉽게 만듭니다. 쉬운. 이것은 일부 문서 에서는 솔직하게 가장 잘 설명 되지만 그 핵심은 "이벤트"+ "코드"입니다. 우리는 또한 멋진 확장 성 작업을 수행했지만 핵심 목적에 부차적입니다.

요약:

  • 이들 대부분은 위에서 언급
  • +원하는대로 확장하고 실행할 수 있습니다. 완전한 통제하에있는.
  • - HTTP는 약간 별난 일이지만 작동합니다.

푸른 기능

Azure Functions는 WebJobs SDK의 핵심 목적을 취하여 서비스로 호스팅하며 다른 언어를 쉽게 시작할 수 있도록하는 것입니다. 여기에 "서버리스"개념을 소개합니다. SDK의 확장 방법을 알고 있으므로 지능적인 작업을 수행 할 수 있습니다.

Azure Functions는 매우 엄격하게 관리되는 환경입니다. 우리는 당신의 자신의 호스트 가져 오기를 지원하지 않습니다. 현재 Google은 맞춤 확장 프로그램을 지원하지 않지만 조사중인 확장 프로그램을 지원합니다. 우리는 당신이 할 수있는 것과 할 수없는 것에 대해 의견을 가지고 있지만, 우리가 가능하게하는 것들에 대해서는 매끄럽고 사용하고 관리하기 쉽습니다.

함수를 개선하기 위해 수행 한 "프레임 워크"의 대부분은 WebJobs SDK를 통해 진행됩니다. 예를 들어, 로깅 속도를 크게 향상시키는 WebJobs 용 새로운 NuGet을 업로드하여 WebJobs SDK 사용자에게 큰 성능 이점을 제공합니다. 기능을 "WebJobs SDK as a Service"로 제공함에있어 많은 경험 문제가 실제로 개선되었습니다.

아마도 함수가 우리의 최신이자 가장 큰 편이기 때문에 편견이있을 것입니다. 그러나 함수에 대한 더 많은 단점을 자유롭게 생각하십시오.

아마 좀 더 정교하게 블로그를 게시하게 될 것이지만,이 포럼에서 가능한 간결하게 유지하려고 노력했습니다.


1
멋져. 궁금한 점이 있으면 Twitter (@crandycodes)로 DM으로 보내주십시오. 원하는 경우 샘플을 공유하려는 경우 Azure.com에서 샘플을 홍보하는 데 도움을 줄 수 있습니다.
Chris Anderson-MSFT

1
유용하다는 것을 알 수있었습니다. 서버에서 서버리스 응용 프로그램 패턴으로 전환하는 방법을 논의 할 여지가 많다는 것을 알고 있습니다. 그런 종류는 방금 설명한 것과 관련이있는 것 같습니다.
크리스 앤더슨

1
기본적으로 코드와 구성을 사용하여 표지 아래에 WebJob SDK 함수 (따라서 Azure 함수 이름)를 만듭니다. 따라서 코드는 우리가 관리하는 WebJob SDK 함수 내에서 실행됩니다.
크리스 앤더슨

1
모든 기능 앱에는 1 개의 호스트가 있습니다 (WebJob으로 생각할 수 있음). 기능 앱 내 기능은 파일 시스템, 앱 설정, 메모리, CPU 등을 공유합니다. 새로운 질문을 자유롭게하십시오.
Chris Anderson-MSFT

2
예. 타이머 트리거 {0 * / 30 * * * *}의 Cron 표현 azure.microsoft.com/en-us/documentation/articles/…
Chris Anderson-MSFT

17

WebJobs SDK를 기반으로하는 Azure Functions이므로 WebJobs에서 이미 사용 가능한 대부분의 기능을 제공하지만 몇 가지 새로운 기능이 있습니다.

의 관점에서 트리거 , WebJobs (예를 들어, 서비스 버스, 저장 큐, 저장 물방울, CRON 일정, WebHooks, EventHub 및 파일 클라우드 스토리지 제공 업체)에 이미 사용할 수있는 이외에, 푸른 기능은 API를 같이 트리거 될 수 있습니다. HTTP 호출에는 kudu 자격 증명이 필요하지 않지만 Azure AD 및 타사 자격 증명 공급자를 통해 인증 될 수 있습니다.

출력 과 관련 하여 유일한 차이점은 함수가 HTTP를 통해 호출 될 때 응답을 리턴 할 수 있다는 것입니다.

둘 다 bash (.sh), batch (.bat / .cmd), C #, F #, Node.Js, PHP, PowerShell 및 Python을 포함한 다양한 언어를 지원합니다 .

현재 미리보기에있는 기능이기 때문에 툴링 은 여전히 ​​이상적이지 않습니다. 그러나 Microsoft는 그 일을하고 있습니다. 우리가 현재 Visual Studio를 사용하는 WebJobs와 동일한 기능을 로컬에서 개발하고 테스트 할 때와 동일한 유연성을 갖기를 바랍니다.

Functions가 가져 오는 가장 중요하고 멋진 장점은 "Serverless"모델 을 사용하는 동적 서비스 계획 을 대체 할 수 있다는 것입니다. 여기서 VM 인스턴스 또는 스케일링을 관리 할 필요가 없습니다. 모두 우리를 위해 관리됩니다. 또한 전용 인스턴스가 없기 때문에 실제로 사용하는 리소스에 대해서만 비용을 지불합니다.

두 가지 간의 자세한 비교는 https://blog.kloud.com.au/2016/09/14/azure-functions-or-webjobs/

HTH :)


답변 Paco 주셔서 감사합니다! 이 비교는 많은 사람들에게 관심을 가질 수 있습니다 :-) 그러나 나는 비교를 찾고 있지는 않지만 webjobs보다는 함수를 사용해야 할 때 이해하려고했습니다!
토마스

6
상황을 알지 못하면 명확한 지침을 얻기가 어렵습니다. 그래서 사람들이 선택하는 데 도움이 될 수 있다고 생각하는 이유는 다음과 같습니다. if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); } :)
Paco de la Cruz

HTTP를 통해 호출하면 함수가 응답을 반환 할 수 있지만 함수는 WebJobs SDK를 기반으로합니다. 이상하지 않습니까?
RudyCo

아마 그들이이 말을 더 나은 했다 WebJobs SDK를 기반으로하지만, 그들은 :) 거기에서 상당히 진화
파코 드 라 크루즈

14

문서 에 따르면 Azure Functions에는 다음과 같은 WebJobs가 없습니다.

  • 자동 확장 (런타임에 결정된 요구에 따라 CPU 및 메모리가 확장 됨)
  • PPU (Pay-per-Use) 요금 (앱 서비스 요금제 대신 소비 요금제)
  • WebHooks와 같은 더 많은 트리거 이벤트
  • 브라우저 내 개발 (Visual Studio는 여전히 가능)
  • F # 지원

간단히 말해 : Azure Functions는 새로운 동물입니다. 아직 App Service 계획이 없다면 WebJobs로 시작하는 것이 더 좋은 이유를 알 수 없기 때문에 함수를 사용합니다. 함수 도구는 아직 안정적이지 않을 수 있습니다.


14

위의 길고 조금 오래된 게시물에 두 가지 점을 더 추가하고 싶습니다. 푸른 기능에서 소비 계획을 선택하면 다음과 같은 제한 사항이 있습니다.

10 분 이상 작업을 실행하려면 webjobs를 선택하십시오. Azure 함수 는 기본적으로 5 분 동안 실행되며 프로세스가 5 분을 초과하면 Azure 함수에서 시간 초과 예외가 발생합니다. 당신은 할 수 증가 에 타임 아웃을 host.json에서 십분 .

참고 : 앱 서비스 계획 Azure 기능을 사용하는 경우 시간 종료 문제점이 없습니다.

구별해야 할 또 다른 이유는. azure 기능을 사용하면 기계 (컨테이너)가 즉시 생성되어 사용되면 파괴되므로 초기 시작 시간이 느려집니다.

콜드 스타트를 피하기 위해 azure 함수 앱은 프리미엄 계획을 발표했습니다. 여기서 하나의 인스턴스가 항상 실행되고로드에 따라 함수 앱이 확장을 시작하고 소비에 따라 하나의 인스턴스와 다른 인스턴스에 대한 요금이 청구됩니다.


첫 번째 포인트는 소비 계획을 사용하는 것입니다. 유료 SKU에는 시간 제한이 없습니다. 나는 두 번째 요점에 동의합니다.
토마스

두 지점 모두 소비 계획에 유효하다고 생각합니다. 지적 해 주셔서 감사합니다
Karthikeyan VK

4
타임 아웃에 대한 좋은 언급. 우리에게 이것은 중요한 요소입니다
Niels Filter

1
그러나 Azure 기능을 만드는 동안 appservice plan을 선택할 수 있습니다. 그러나 비록 전체 목적을 패배
Karthikeyan VK에게

1
@KarthikeyanVK, 함수 런타임 v2가 10 분 이상을 허용하므로 여전히 정확한지 확실하지 않습니다.
Thomas

6

나는이 답변으로 게임에 매우 늦었다는 것을 알고 있지만 이것이 여전히 Google의 최고 검색 결과 이므로 OP가 비용에 대한 우려가 있기 때문에 비용 관점 에서이 주제에 대한 지침을주고 싶었습니다. . 여기에는 각 서비스의 작동 방식에 대한 기술적 한계와 세부 사항에 대한 훌륭한 답변이 이미 있으므로 이러한 답변을 다시 작성하지는 않겠습니다.

웹 애플리케이션에 대해 이미 지불 한 비용과 달리 추가 비용없이 "무료"로 실행되는 항목이 필요한 경우 다음 두 가지 옵션이 있습니다.

  1. 웹 작업-기존 웹 앱과 함께 배포되며 웹 앱과 동일한 리소스를 사용합니다. 웹 작업을 사용하는 데 드는 추가 비용은 없지만 이미 언급 한 것처럼 웹 응용 프로그램의 성능 비용으로 이어질 수있는 몇 가지 제한 사항이 있습니다.
  2. 기능-소비 계획을 사용할 때 일정량의 무료 실행이 할당됩니다. 이 글을 쓰는 시점의 숫자는 실제로는 백만 건의 무료 실행으로 상당히 높습니다. 그러나 백만 개의 실행 제한은 문제를 일으킬 수있는 제한이 아닙니다. 400K GB-s (기가 바이트 초)입니다. 이것은 기본적으로 함수가 사용하는 메모리 양에 초 수를 곱한 값입니다 ( 가격 책정 페이지 의 공식 계산 참조 ). 이 무료 할당량이 얼마나 빨리 소모되는지 놀랄 것입니다.

비용에 대해 걱정하지만 비용 이 전혀 들지 않는 경우 더 많은 옵션을 사용할 수 있습니다.

  1. 기능-상대적으로 저렴한 가격으로 소비 계획 또는 앱 서비스 계획 중 하나를 실행할 수 있습니다. GB-s 청구 모델을 명심하십시오. 소비 계획을 사용하고 자주 "무거운"작업을 수행하는 경우 큰 계산서에 놀랄 수 있습니다.
  2. 클라우드 서비스-이 옵션은 주로 OP가 요청하지 않았기 때문에 대안으로 논의되지 않았습니다. 그러나 이것은 또한 가능한 옵션입니다. 클라우드 서비스는 궁극적으로 클라우드에서 실행되는 VM 일 뿐이므로 필요한 백그라운드 작업을 실행할 수 있으며 확장 / 축소가 아주 잘 이루어집니다 (실행을 위해 자체 트리거를 연결해야하지만 웹 작업 / 기능에 비해 약간의 불편 함) ). 사용 여부에 관계없이 인스턴스 당 지불하는 초기 비용이 더 많지만 지속적으로 실행해야하는 작업이 많고 "무거운"리프팅을 많이 수행하는 경우 클라우드 서비스가 더 나은 선택 일 수 있습니다 제 생각에는 실행 및 기가 바이트 초보다 고정 가격의 VM을 관리 / 모니터링하는 것이 더 쉽기 때문입니다.

일부 특정 시나리오를 읽고 관심이 있고 다른 웹 서비스, 기능, 클라우드 서비스 중 하나를 선택하는 이유에 관심이 있다면 최근에 webjobs vs functions vs cloud services 에 대한 블로그 게시물을 작성했습니다 .


1
답변 @Dan :-)에 감사드립니다. 클라우드 서비스는 여전히 훌륭하다고 말하지만 웹 작업과 기능을 동일한 핵심 SDK와 2 년 반 전에 공유하면서 웹 서버와 기능을 비교할 생각이었습니다. 서버리스의 목적을 실제로 이해하지 못했습니다. :-)
Thomas

3

주요 고려 사항은 Azure Functions가 버전 1 이후의 전체 .NET Framework 지원을 종료하고 v2.0에서 중단되었으며 현재 Preview v3.0에서는 변경되지 않는다는 것입니다. 😔

한편이 강력한 무장 방식은 고맙게도 Azure WebJobs 에는 적용되지 않았습니다 .

WebJobs SDK 버전 3.x는 .NET Core 및 .NET Framework 콘솔 앱을 모두 지원합니다.


네 좋은 지적입니다. 조차도 지금부터 사람들은 가능한 한 넷 코어를 사용해보십시오.
토마스

0

AppService와 WebJobs SDK를 기반으로 구축 된 두 Azure 기능 의 공통점차이점 은 무엇입니까 ? 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|
--------------------------------------------

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.