Compartilhar via


Como aproveitar funções sem servidor

Dica

Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos .NET nativos de nuvem para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

No espectro, desde o gerenciamento de máquinas físicas até a utilização de recursos de nuvem, o sem servidor está no extremo. Sua única responsabilidade é seu código e você só paga quando seu código é executado. O Azure Functions fornece uma maneira de criar recursos sem servidor em seus aplicativos nativos de nuvem.

O que é sem servidor?

Sem servidor é um modelo de serviço relativamente novo de computação em nuvem. Isso não significa que os servidores sejam opcionais, seu código ainda é executado em um servidor em algum lugar. A distinção é que a equipe de aplicativos não se preocupa mais com o gerenciamento da infraestrutura do servidor. Em vez disso, o fornecedor de nuvem recebe essa responsabilidade. A equipe de desenvolvimento aumenta sua produtividade fornecendo soluções de negócios para os clientes, e não a estrutura.

A computação sem servidor usa contêineres sem estado disparados por evento para hospedar seus serviços. Eles podem escalar e reduzir verticalmente para atender à demanda conforme necessário. Plataformas sem servidor como o Azure Functions têm integração apertada com outros serviços do Azure, como filas, eventos e armazenamento.

Quais desafios são resolvidos sem servidor?

As plataformas sem servidor abordam muitas preocupações demoradas e caras:

  • Comprar máquinas e licenças de software
  • Hospedagem, proteção, configuração e manutenção dos computadores e seus requisitos de rede, energia e A/C
  • Patch e atualização de sistemas operacionais e software
  • Configurar servidores Web ou serviços de máquina para hospedar software de aplicativo
  • Configurar software de aplicativo em sua plataforma

Muitas empresas alocam grandes orçamentos para dar suporte a preocupações com a infraestrutura de hardware. Mover para a nuvem pode ajudar a reduzir esses custos; mudar aplicativos para sem servidor pode ajudar a eliminá-los.

Qual é a diferença entre um microsserviço e uma função sem servidor?

Normalmente, um microsserviço encapsula uma capacidade de negócios, como um carrinho de compras para um site de comércio eletrônico online. Ele expõe várias operações que permitem que um usuário gerencie sua experiência de compra. Uma função, no entanto, é um bloco leve e pequeno de código que executa uma operação de uso único em resposta a um evento. Os microsserviços normalmente são construídos para responder às solicitações, muitas vezes de uma interface. As solicitações podem ser baseadas em HTTP Rest ou gRPC. Os serviços sem servidor respondem a eventos. Sua arquitetura orientada a eventos é ideal para processar tarefas em segundo plano de execução curta.

Quais cenários são apropriados para sem servidor?

O Sem servidor expõe funções individuais de execução curta que são invocadas em resposta a um gatilho. Isso o torna ideal para processar tarefas em segundo plano.

Um aplicativo pode precisar enviar um email como uma etapa em um fluxo de trabalho. Em vez de enviar a notificação como parte de uma solicitação de microsserviço, coloque os detalhes da mensagem em uma fila. Uma Função do Azure pode remover da fila a mensagem e enviar o email de forma assíncrona. Isso poderia melhorar o desempenho e a escalabilidade do microsserviço. O nivelamento de carga baseado em fila pode ser implementado para evitar gargalos relacionados ao envio dos emails. Além disso, esse serviço autônomo pode ser reutilizado como um utilitário em vários aplicativos diferentes.

Mensagens assíncronas de filas e tópicos são um padrão comum para disparar funções sem servidor. No entanto, o Azure Functions pode ser acionado por outros eventos, como alterações no Armazenamento de Blobs do Azure. Um serviço que dá suporte a uploads de imagem pode ter uma Função do Azure responsável por otimizar o tamanho da imagem. A função pode ser acionada diretamente por inserções em Armazenamento de Blobs do Azure, mantendo a complexidade fora das operações de microsserviço.

Muitos serviços têm processos de execução longa como parte de seus fluxos de trabalho. Muitas vezes, essas tarefas são feitas como parte da interação do usuário com o aplicativo. Essas tarefas podem forçar o usuário a aguardar, afetando negativamente sua experiência. A computação sem servidor fornece uma ótima maneira de mover tarefas mais lentas fora do loop de interação do usuário. Essas tarefas podem ser dimensionadas com demanda sem exigir que todo o aplicativo seja dimensionado.

Quando você deve evitar sem servidor?

No provisionamento e escalonamento de soluções sem servidor sob demanda. Quando uma nova instância é invocada, as inicializações a frios são um problema comum. Uma inicialização a frio é o período de tempo necessário para provisionar essa instância. Normalmente, esse atraso pode ser de alguns segundos, mas pode ser mais longo dependendo de vários fatores. Depois de provisionada, uma única instância é mantida ativa desde que receba solicitações periódicas. Mas, se um serviço for chamado com menos frequência, o Azure poderá removê-lo da memória e exigir uma inicialização a frio quando invocado novamente. Iniciações a frio também são necessárias quando uma função é escalada horizontalmente para uma nova instância.

A Figura 3-9 mostra um padrão de inicialização a frio. Observe as etapas extras necessárias quando o aplicativo estiver a frio.

Cold versus warm startFigura 3-9. Inicialização a frio versus a quente.

Para evitar totalmente a inicialização a frio, você pode mudar de um plano de consumo para um plano dedicado. Você também pode configurar uma ou mais instâncias pré-aquecidas com a atualização do plano premium. Nesses casos, quando você precisa adicionar outra instância, ela já está pronta para funcionar. Essas opções podem ajudar a atenuar o problema de inicialização a frio associado à computação sem servidor.

Os provedores de nuvem cobram por sem servidor com base no tempo de execução da computação e na memória consumida. Operações de execução prolongada ou cargas de trabalho de alto consumo de memória nem sempre são os melhores candidatos para sem servidor. As funções sem servidor favorecem pequenas partes do trabalho que podem ser concluídas rapidamente. A maioria das plataformas sem servidor exige que as funções individuais sejam concluídas dentro de alguns minutos. Os Azure Functions usa como padrão a duração de 5 minutos de tempo limite, que pode ser configurada até 10 minutos. O plano premium do Azure Functions também pode atenuar esse problema, o tempo limite padrão é de 30 minutos com um limite superior não associado que pode ser configurado. Tempo de computação não é hora do calendário. Funções mais avançadas usando a estrutura do Durable Functions do Azure podem pausar a execução ao longo de vários dias. A cobrança é baseada no tempo de execução real, quando a função é ativada e retoma o processamento.

Por fim, aproveitar o Azure Functions para tarefas de aplicativo adiciona complexidade. É aconselhável primeiro arquitetar seu aplicativo com um design modular e pouco acoplado. Em seguida, identifique se há benefícios no sem servidor que justifiquem a complexidade adicional.