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?
fonte
Respostas:
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áriaWebJobs 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áriaWebJobs 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áriaSDK 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:
+
Você pode estender e executar o que quiser. Controlo total.-
O material HTTP é um pouco instável, mas funcionaFunçõ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.
+
Muitos idiomas suportados+
Escala dinâmica totalmente gerenciada+
Fácil de usar portal com UX para gerenciar conexões / etc.-
Host não personalizável (ainda)~
É executado em um "aplicativo" separado, que requer alguma configuração no seu repositório, mas facilita muito a manutenção a longo prazo.~
Nenhuma ferramenta (ainda)Algumas ferramentas estão agora em alfa ou visualização - https://www.npmjs.com/package/azurefunctions (atualização de fevereiro de 2017: Visual Studio Tools para Azure Functions agora disponível na visualização: https: //blogs.msdn .microsoft.com / webdev / 2016/12/01 / visual-studio-tools-for-azure-functions / )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.
fonte
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 :)
fonte
if (((preference == "Serverless") || (isRequired(flexibleHttpTriggers)) && (isOk(currentFunctionsTooling))) { goWithFunctions(); } else { continueWIthWebJobs(); }
:)De acordo com os documentos, o Azure Functions possui o seguinte que os WebJobs não:
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).
fonte
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.
fonte
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:
Se você estiver preocupado com os custos, mas não se limitar a nenhum custo , terá mais opções disponíveis.
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 .
fonte
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. 😔
A documentação deixa isso claro aqui ,
assim como essa resposta de feedback ,
bem como este problema / resposta do github .
Enquanto isso, felizmente, essa forte abordagem armada ainda não foi aplicada aos WebJobs do Azure :
fonte
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
fonte