Aproveitando funções sem servidor
Gorjeta
Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
No espectro desde o gerenciamento de máquinas físicas até o aproveitamento de recursos de nuvem, vidas sem servidor no extremo 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 da nuvem.
O que é serverless?
Serverless é um modelo de serviço relativamente novo de computação em nuvem. Isso não significa que os servidores são opcionais - seu código ainda é executado em um servidor em algum lugar. A diferença é que a equipe de aplicativos não se preocupa mais com o gerenciamento da infraestrutura do servidor. Em vez disso, o fornecedor de nuvem assume essa responsabilidade. A equipe de desenvolvimento aumenta sua produtividade entregando soluções de negócios aos clientes, não encanamentos.
A computação sem servidor usa contêineres sem estado acionados por eventos para hospedar seus serviços. Eles podem ser dimensionados para atender à demanda conforme necessário. As plataformas sem servidor, como o Azure Functions, têm uma integração total com outros serviços do Azure, como filas, eventos e armazenamento.
Que desafios são resolvidos pelo serverless?
As plataformas sem servidor resolvem muitas preocupações demoradas e dispendiosas:
- Compra de máquinas e licenças de software
- Alojamento, proteção, configuração e manutenção das máquinas e seus requisitos de rede, alimentação e ar condicionado
- Aplicação de patches 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 do aplicativo dentro de sua plataforma
Muitas empresas alocam grandes orçamentos para dar suporte a preocupações com a infraestrutura de hardware. A migração para a nuvem pode ajudar a reduzir esses custos; Mudar aplicativos para serverless pode ajudar a eliminá-los.
Qual é a diferença entre um microsserviço e uma função sem servidor?
Normalmente, um microsserviço encapsula um recurso de negócios, como um carrinho de compras para um site de comércio eletrônico on-line. 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 pequeno e leve de código que executa uma operação de finalidade única em resposta a um evento. Os microsserviços são normalmente construídos para responder a solicitações, geralmente a partir 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 o processamento de tarefas em segundo plano de curta duração.
Quais cenários são apropriados para serverless?
O Serverless 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 e-mail 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 retirar a mensagem da fila 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 de e-mails. Além disso, esse serviço autônomo pode ser reutilizado como um utilitário em muitos aplicativos diferentes.
O sistema de mensagens assíncronas de filas e tópicos é um padrão comum para acionar 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 carregamentos de imagens 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 no Armazenamento de Blobs do Azure, mantendo a complexidade fora das operações de microsserviço.
Muitos serviços têm processos de longa execução 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 esperar, impactando negativamente sua experiência. A computação sem servidor fornece uma ótima maneira de mover tarefas mais lentas para fora do loop de interação do usuário. Essas tarefas podem ser dimensionadas de acordo com a demanda sem exigir que todo o aplicativo seja dimensionado.
Quando você deve evitar serverless?
Fornecimento e dimensionamento de soluções sem servidor sob demanda. Quando uma nova instância é invocada, os arranques a frio são um problema comum. Um arranque a frio é o período de tempo que demora a provisionar esta instância. Normalmente, esse atraso pode ser de alguns segundos, mas pode ser maior dependendo de vários fatores. Uma vez 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 um início a frio quando for reinvocado. As partidas a frio também são necessárias quando uma função é dimensionada para uma nova instância.
A Figura 3-9 mostra um padrão de arranque a frio. Observe as etapas extras necessárias quando o aplicativo está frio.
Figura 3-9. Arranque a frio versus arranque a quente.
Para evitar totalmente os arranques a frio, 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 uso. Essas opções podem ajudar a mitigar o problema de inicialização a frio associado à computação sem servidor.
Os provedores de nuvem cobram pelo serverless com base no tempo de execução da computação e na memória consumida. Operações de longa duração ou cargas de trabalho de alto consumo de memória nem sempre são os melhores candidatos para serverless. As funções sem servidor favorecem pequenos blocos de trabalho que podem ser concluídos rapidamente. A maioria das plataformas sem servidor requer funções individuais para serem concluídas em poucos minutos. O Azure Functions assume como padrão uma duração de tempo limite de 5 minutos, que pode ser configurada até 10 minutos. O plano premium do Azure Functions também pode atenuar esse problema, padronizando os tempos limite para 30 minutos com um limite superior ilimitado que pode ser configurado. 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. O faturamento é baseado no tempo de execução real - quando a função acorda 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 de acoplamento flexível. Em seguida, identifique se há benefícios que o serverless ofereceria que justifiquem a complexidade adicional.