Compartilhar via


Aproveitando funções sem servidor

Dica

Esse conteúdo é um trecho do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Miniatura de capa do eBook

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 possui essa responsabilidade. A equipe de desenvolvimento aumenta sua produtividade fornecendo soluções de negócios aos clientes, não ao encanamento.

A computação sem servidor usa contêineres sem estado disparados por evento para hospedar seus serviços. Eles podem expandir e reduzir para atender à demanda conforme necessário. Plataformas sem servidor, como o Azure Functions, têm uma 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:

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

Muitas empresas alocam orçamentos grandes 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 funcionalidade 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 pequeno bloco leve de código que executa uma operação de finalidade única em resposta a um evento. Os microsserviços normalmente são construídos para responder a solicitações, geralmente 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 e 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 os torna ideais 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 disparado 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 disparada diretamente por inserções no Armazenamento de Blobs do Azure, mantendo a complexidade fora das operações de microsserviço.

Muitos serviços têm processos de execução prolongada como parte de seus fluxos de trabalho. Geralmente, 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, inicializações lentas 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. Uma vez provisionada, uma única instância é mantida ativa desde que receba solicitações periódicas. No entanto, se um serviço for chamado com menos frequência, o Azure poderá removê-lo da memória e requerer um novo início ao ser reiniciado. 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.

Frio versus início quenteFigura 3-9. Início frio versus início quente.

Para evitar que o frio comece completamente, 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 início frio associado à computação sem servidor.

Os provedores de nuvem cobram por falta de servidor com base no tempo de execução de computação e na memória consumida. Operações de execução longa 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 de trabalho que podem ser concluídas rapidamente. A maioria das plataformas sem servidor exige funções individuais para serem concluídas em poucos minutos. O Azure Functions usa como padrão uma 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, pois o tempo limite padrão é de 30 minutos, com um limite superior configurável sem restrições. Tempo de computação não é tempo de calendário. Funções mais avançadas usando a estrutura do Azure Durable Functions 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 sem servidor que justificam a complexidade adicional.