Webjobs do Azure vs Funções do Azure: como escolher

163

Criei alguns Webjobs do Azure que usam gatilhos e acabei de aprender sobre as Funções do Azure .

Pelo que entendi, as Funções do Azure parecem se sobrepor aos recursos do Azure Webjobs e tenho alguma dificuldade em entender quando escolher entre Function e Webjob:

  • Diferentemente dos Webjobs, as Funções só podem ser acionadas, mas não foram projetadas para executar processos contínuos (mas você pode escrever código para criar uma função contínua).

  • Você pode gravar Webjobs e funções usando vários idiomas (C #, node.js, python ...), mas pode escrever sua função no portal do Azure, para que seja mais fácil e rápido desenvolver o teste e implantar uma função.

  • Os Webjobs são executados como processos em segundo plano no contexto de um aplicativo da Web de serviço de aplicativo, aplicativo de API ou aplicativo móvel, enquanto as Funções são executadas usando um Plano de Serviço de Aplicativo Clássico / Dinâmico.

  • Com relação ao dimensionamento, o Functions parece oferecer mais possibilidades, pois você pode usar um plano de serviço de aplicativo dinâmico e pode dimensionar uma única função, enquanto que para um emprego na web é necessário dimensionar o aplicativo da Web inteiro.

Portanto, com certeza há uma diferença de preço, se você tiver um aplicativo Web em execução, poderá usá-lo para executar um trabalho na Web sem nenhum custo adicional, mas se eu não tiver um aplicativo Web existente e precisar escrever código para acionar uma fila devo usar um webjob ou uma função?

Há outras considerações a serem lembradas quando você precisar escolher?

Thomas
fonte
6
Este é um post que devo. :) Tentarei preparar uma resposta, mas isso pode ser um pouco aberto para o Stack Overflow, portanto, você pode precisar perguntar no MSDN se ele for fechado.
Chris Anderson-MSFT
Postagem no blog Nice (curta) sobre este tópico geekswithblogs.net/tmurphy/archive/2016/06/02/…
Todd Menier
Olá Todd, fique à vontade para editar minha pergunta e adicionar o link. Artigo interessante ^^
Thomas
@ chris-anderson-msft Podemos executar o PowerShell como webjob? Podemos instalar o pacote do PowerShell no Webjob?
Anomepani 11/11/19

Respostas:

170

Existem algumas opções aqui no App Service. Não tocarei nos Aplicativos Lógicos ou na Automação do Azure, que também tocam neste espaço.

WebJobs do Azure

Este artigo é honestamente a melhor explicação, mas vou resumir aqui.

WebJobs sob demanda, também conhecidos como. WebJobs agendados aka. WebJobs acionados

WebJobs acionados são WebJobs que são executados uma vez quando uma URL é chamada ou quando a propriedade schedule está presente em schedule.job . Os WebJobs agendados são apenas WebJobs que tiveram um Trabalho do Agendador do Azure criado para chamar nossa URL em um agendamento, mas também oferecemos suporte à propriedade agendar, como mencionado anteriormente.

Resumo:

  • + Executável / Script sob demanda
  • + Execuções agendadas
  • - É necessário acionar via ponto final .scm
  • - A escala é manual
  • - VM é sempre necessária

WebJobs contínuos (não SDK)

Esses trabalhos funcionam para sempre e nós os acordaremos quando eles falharem. Você precisa ativar o Always On para que funcionem, o que significa executá-los na camada Básica e acima.

Resumo:

  • + Executável / Script sempre em execução
  • - Requer sempre ativado - nível básico e acima
  • - VM é sempre necessária

WebJobs contínuos com o SDK WebJobs

Estes não são nada do ponto de vista "WebJobs the feature". Basicamente, temos esse doce SDK que escrevemos visando WebJobs, que permite executar código com base em gatilhos simples. Eu vou falar sobre isso mais tarde.

Resumo:

  • + Executável / Script sempre em execução
  • + Registro / painel mais rico
  • + Gatilhos suportados juntamente com tarefas de longa execução
  • - Requer sempre ativado - nível básico e acima
  • - A escala é manual para configurar
  • - Começar pode ser um pouco cansativo
  • - VM é sempre necessária

SDK do Azure WebJobs

O Azure WebJobs SDK é um SDK completamente separado dos WebJobs, o recurso da plataforma. Ele foi projetado para ser executado em um WebJob, mas pode realmente ser executado em qualquer lugar. Temos clientes que os executam em funções de trabalho e até em prem ou em outras nuvens, embora o suporte seja apenas o melhor esforço.

O SDK visa facilitar a execução de algum código em reação a algum evento e tornar a ligação a services / etc. fácil. Honestamente, isso é melhor abordado em alguns documentos , mas o principal é a natureza "evento" + "código". Também fizemos alguns trabalhos interessantes sobre extensão, mas isso é secundário ao objetivo principal.

Resumo:

  • A maioria destes são mencionados acima
  • +Você pode estender e executar o que quiser. Controlo total.
  • - O material HTTP é um pouco instável, mas funciona

Funções do Azure

O Azure Functions tem como principal objetivo principal do SDK do WebJobs, hospedá-lo como um serviço e facilitar a introdução a outros idiomas. Também apresentamos o conceito "Sem servidor" aqui porque fazia muito sentido fazê-lo - sabemos como o SDK é dimensionado, para que possamos fazer coisas inteligentes para você.

O Azure Functions é uma experiência muito gerenciada. Não apoiamos trazer seu próprio host. Atualmente, não oferecemos suporte a extensões personalizadas, mas estamos investigando isso. Somos opinativos sobre o que você pode e o que não pode fazer, mas, pelas coisas que habilitamos, elas são lisas e fáceis de usar e gerenciar.

A maioria das coisas da "estrutura" que fizemos para melhorar as Funções passam pelo SDK do WebJobs, no entanto. Por exemplo, enviaremos um novo NuGet for WebJobs que realmente aumenta drasticamente a velocidade do registro, o que traz enormes benefícios de desempenho para os usuários do WebJobs SDK. Ao enviar as Funções como "WebJobs SDK como Serviço", aprimoramos muito muitos problemas de experiência.

Provavelmente sou tendencioso, já que o Functions é o nosso melhor e mais recente, mas sinta-se à vontade para tirar mais contras do Functions do meu jeito.

Provavelmente vou publicar um blog que elabora um pouco mais, mas tentei manter o mais sucinto possível para este fórum.

Chris Anderson-MSFT
fonte
1
Parece maravilhoso. DM me no Twitter (@crandycodes) se você tiver alguma dúvida. Eu posso ajudá-lo a promover suas amostras no Azure.com, se você também quiser compartilhar essas amostras.
Chris Anderson-MSFT
1
Eu pude ver isso sendo útil. Sei que há muito espaço para discutir como fazer a transição dos padrões de aplicativos para servidor e sem servidor. Isso parece relacionado ao que você acabou de descrever.
Chris Anderson-MSFT
1
Basicamente, pegamos seu código e configuração e criamos uma Função WebJob SDK (daí o nome Azure Functions) sob as cobertas. Portanto, seu código está sendo executado dentro de uma Função WebJob SDK que estamos gerenciando para você.
Chris Anderson-MSFT
1
Todo aplicativo de função possui 1 host (que você pode considerar um WebJob). Suas funções em um aplicativo de funções compartilham um sistema de arquivos, configurações de aplicativos, memória, CPU, etc. Fique à vontade para fazer uma nova pergunta.
Chris Anderson-MSFT
2
Sim. O gatilho do timer. Expressão Cron de {0 * / 30 * * * *} azure.microsoft.com/en-us/documentation/articles/…
Chris Anderson-MSFT
17

Sendo as Funções do Azure baseadas no WebJobs SDK, elas fornecem a maior parte da funcionalidade já disponível nos WebJobs, mas com alguns novos recursos interessantes.

Em termos de gatilhos , além dos já disponíveis para WebJobs (por exemplo, provedores de Barramento de Serviço, Filas de Armazenamento, Blobs de Armazenamento, agendas CRON, WebHooks, EventHub e Armazenamento em Nuvem de Arquivos), as Funções do Azure podem ser acionadas como APIs. E as chamadas HTTP não exigem credenciais kudu, mas podem ser autenticadas por meio do Azure AD e de provedores de identidade de terceiros.

Em relação às saídas , a única diferença é que o Functions pode retornar uma resposta quando chamado via HTTP.

Ambos suportam uma ampla variedade de idiomas , incluindo: bash (.sh), lote (.bat / .cmd), C #, F #, Node.Js, PHP, PowerShell e Python.

Sendo Funções atualmente na Visualização, as ferramentas ainda não são ideais. Mas a Microsoft está trabalhando nisso. Esperamos que tenhamos a mesma flexibilidade de desenvolver e testar funções localmente, como atualmente fazemos para WebJobs com Visual Studio.

As vantagens mais significativas e interessantes trazidas pelo Functions são a alternativa de ter um plano de serviço dinâmico com um modelo "sem servidor" , no qual não precisamos gerenciar instâncias ou dimensionamento de VM; tudo é gerenciado para nós. Além disso, por não termos instâncias dedicadas, pagamos apenas pelos recursos que realmente usamos.

Uma comparação mais detalhada entre os dois aqui: https://blog.kloud.com.au/2016/09/14/azure-functions-or-webjobs/

HTH :)

Paço da Cruz
fonte
Obrigado pela sua resposta Paco! Essa comparação pode interessar a muitas pessoas :-) Mas eu não estava procurando uma comparação, mas apenas tentando entender quando devo usar funções, em vez de webjobs!
Thomas
6
É difícil ter uma orientação clara, sem conhecer o contexto. É por isso que eu acreditava ter uma comparação pode ser de grande ajuda para as pessoas escolherem :) Eu diria que: if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); } :)
Paco de la Cruz
As funções podem retornar uma resposta quando chamadas via HTTP. Mas as funções são baseadas no WebJobs SDK. Estranho, não é?
RudyCo
Provavelmente é melhor dizer que eles foram baseados na WebJobs SDK, mas evoluíram um pouco de lá :)
Paco de la Cruz
14

De acordo com os documentos, o Azure Functions possui o seguinte que os WebJobs não:

  • Escalonamento automático (CPU e memória são escalonadas de acordo com as necessidades determinadas em tempo de execução)
  • Preços por uso (plano de consumo em vez de plano de serviço de aplicativos)
  • Mais eventos de acionamento (como WebHooks)
  • Desenvolvimento no navegador (o Visual Studio ainda é possível)
  • Suporte F #

Simplificando: o Azure Functions é o animal mais novo. Se você ainda não possui um plano de serviço de aplicativo, eu usaria o Functions porque, a longo prazo, não vejo nenhuma razão para começar melhor com WebJobs (as ferramentas do Functions talvez ainda não sejam tão estáveis).

user764754
fonte
14

Gostaria de acrescentar mais dois pontos aos posts antigos longos e pouco anteriores. se você escolher o plano de consumo em funções azuis, abaixo estão as limitações

Se você deseja executar trabalhos por mais de 10 minutos, escolha webjobs. As funções do Azure, são executadas apenas por 5 minutos por padrão, se seu processo exceder 5 minutos, a função azure emitirá uma exceção de tempo limite. Você pode aumentar o tempo limite para 10 minutos no host.json .

Nota: Não há problema de tempo limite se você estiver usando funções azuis do plano de serviço de aplicativos.

Outra razão para distinguir é. se você usar a função azul, seu horário de início inicial será lento, porque as máquinas (contêineres) são criadas dinamicamente e destruídas quando são usadas.

Para evitar o arranque a frio, o aplicativo de funções do azure lançou o plano premium, onde uma instância estará em execução o tempo todo e, com base na carga, o aplicativo de funções começará a ser dimensionado e você será cobrado por uma instância e outras instâncias com base no consumo.

Karthikeyan VK
fonte
Seu primeiro ponto somente se aplica é que você está usando o plano de consumo. Com um sku pago, você não tem limite de tempo limite. Eu concordo com o segundo ponto.
Thomas
Eu acho que ambos os pontos são válidos para o plano de consumo. Obrigado por apontar para fora
Karthikeyan VK
4
Grande menção de tempos limite. Para nós, este é um fator importante
Niels filtro
1
Mas você pode escolher o plano de serviço de aplicativos enquanto cria funções azuis. Mas isso derrota todo o propósito
Karthikeyan VK 28/02
1
@KarthikeyanVK, não tenho certeza se ainda é preciso, pois o tempo de execução da função v2 permite mais de 10 min?
Thomas
6

Percebo que estou muito atrasado para o jogo com esta resposta, mas como esse ainda é um dos principais resultados de pesquisa no Google, eu queria dar algumas orientações sobre esse tópico estritamente do ponto de vista dos custos, pois parece que o OP tem algumas preocupações com o custo . Já existem ótimas respostas aqui que falam sobre as limitações técnicas e detalhes de como cada serviço funciona, por isso não vou reformular essas respostas.

Se você precisar absolutamente de algo que seja executado "de graça" (como sem nenhum custo adicional ao que você já pagou pelo seu aplicativo da web), você terá duas opções:

  1. Webjobs - implantados ao lado de seu aplicativo Web existente e usam os mesmos recursos que seu aplicativo Web. Não há custo monetário adicional para usar os webjobs, mas existem algumas limitações, como já mencionado, que podem levar a custos de desempenho no seu aplicativo da web.
  2. Funções - Ao usar o plano de consumo, você recebe uma certa quantidade de execuções gratuitas. O número no momento da redação deste artigo é realmente bastante alto, 1 milhão de execuções gratuitas. No entanto, o limite de 1 milhão de execução não é o limite que provavelmente causará problemas; são os 400K GB-s (segundos em gigabytes). Isso é basicamente um cálculo da quantidade de memória que sua função usa multiplicada pelo número de segundos em que é executada (consulte o cálculo oficial na página de preços aqui ). Você ficará surpreso com a rapidez com que esse lote gratuito é usado.

Se você estiver preocupado com os custos, mas não se limitar a nenhum custo , terá mais opções disponíveis.

  1. Funções - Você pode executar no plano de consumo ou no plano de serviço de aplicativos por um preço relativamente barato. Lembre-se, porém, do modelo de cobrança de GB-s. Se você estiver usando o plano de consumo e fazendo um trabalho frequente e "pesado" - pode se surpreender com uma grande fatura.
  2. Serviços em nuvem - essas opções não foram discutidas como uma alternativa, principalmente porque o OP não perguntou sobre isso. Mas esta também é uma opção viável. Os serviços em nuvem são, em última análise, apenas VMs em execução na nuvem, para que você possa executar qualquer trabalho em segundo plano que precisar e eles aumentam / diminuem muito bem (embora você precise conectar seus próprios gatilhos para execução, um pequeno inconveniente em comparação aos webjobs / funções ) Eles têm mais custo inicial associado a eles (porque você paga, por exemplo, se você o usa ou não), mas se você tem trabalhos que precisam ser executados constantemente e estão fazendo muito trabalho "pesado", os serviços em nuvem podem ser uma escolha melhor porque é mais fácil gerenciar / monitorar uma VM com preço fixo do que execuções e segundos em gigabytes, na minha opinião.

Se você está interessado em ler alguns cenários específicos e por que eu escolheria um (webjobs, funções, serviços em nuvem) sobre o outro, recentemente escrevi recentemente uma postagem no blog sobre webjobs x funções vs serviços em nuvem .

Dan
fonte
1
Obrigado pela resposta @Dan :-) Eu diria que o serviço em nuvem ainda é bom, mas eu estava pensando em comparar funções e funções da web, pois elas compartilham o mesmo SDK principal e 2 anos e meio antes, eu realmente não entendia o propósito de sem servidor :-)
Thomas
3

Uma consideração importante é que o Azure Functions parou de oferecer suporte ao .NET Framework completo após a versão 1, que foi descontinuada na v2.0 e que não será alterada no agora na versão v3.0. 😔

Enquanto isso, felizmente, essa forte abordagem armada ainda não foi aplicada aos WebJobs do Azure :

A versão 3.x do WebJobs SDK oferece suporte aos aplicativos de console do .NET Core e do .NET Framework.

Nicholas Petersen
fonte
Sim, bom argumento. Mesmo assim, a partir de agora as pessoas devem tentar usar o núcleo da rede o máximo possível.
Thomas
0

Gostaria de mostrar quais são os pontos em comum e as diferenças entre as duas funções do Azure criadas sobre o AppService e o WebJobs SDK. O WebJobs SDK lhe dará mais liberdade para brincar, enquanto as funções do Azure são mais estruturadas e com menos responsabilidades para os desenvolvedores.

Quando você olha para os pontos em comum Ambos usam o modo de programação orientado a função, ligações para acionamento / entrada / saída, suportam bibliotecas externas e podem executar e depurar localmente artigos de toalete Supportruntime.

Diferenças

|-----------------------|------------------|
|      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|
--------------------------------------------

insira a descrição da imagem aqui

Sajeetharan
fonte