Compartilhar via


Práticas recomendadas para uso confiável do Azure Functions

O Azure Functions é uma experiência de computação sob demanda controlada por eventos que estende a plataforma de aplicativo do Serviço de Aplicativo do Azure existente com recursos para implementar o código disparado por eventos que ocorrem no Azure, em um serviço de parceiro e em sistemas locais. O Functions permite que você crie soluções conectando-se a fontes de dados ou soluções de mensagens, o que facilita o processamento e a reação a eventos. O Functions é executado em data centers do Azure, que são complexos com muitos componentes integrados. Em um ambiente de nuvem hospedado, espera-se que as VMs possam ocasionalmente reiniciar ou mover e as atualizações de sistemas ocorram. Seus aplicativos de funções também provavelmente dependem de APIs externas, Serviços do Azure e outros bancos de dados, que também são propensos a não confiabilidade periódica.

Este artigo detalha algumas práticas recomendadas para projetar e implantar aplicativos de funções eficientes que permanecem íntegras e funcionam bem em um ambiente baseado em nuvem.

Escolher o plano de hospedagem correto

Ao criar um aplicativo de funções no Azure, você precisa escolher um plano de hospedagem para o aplicativo. O plano escolhido tem um efeito sobre o desempenho, a confiabilidade e o custo. Essas opções são os planos de hospedagem fornecidos pelo Azure Functions:

O plano de consumo flex geralmente é recomendado para hospedar seus aplicativos de escala dinâmica.

No contexto da plataforma do Serviço de Aplicativo, o plano Premium usado para hospedar dinamicamente suas funções é o Plano Elástico Premium (EP). Há outros planos dedicados (Serviço de Aplicativo) chamados Premium. Para obter mais informações, consulte o plano Premium do Azure Functions.

O plano de hospedagem que você escolher ditará os seguintes comportamentos:

  • Como seu aplicativo de funções é dimensionado com base na demanda e como a alocação de instâncias é gerenciada.
  • Os recursos disponíveis para cada instância do aplicativo de funções.
  • Suporte para funcionalidades avançadas, como conectividade à Rede Virtual do Azure.

Para saber mais sobre como escolher o plano de hospedagem correto e para obter uma comparação detalhada entre os planos, consulte opções de hospedagem do Azure Functions.

É importante que você escolha o plano correto ao criar seu aplicativo de funções. O Functions fornece uma capacidade limitada de alternar seu plano de hospedagem, principalmente entre o planos Consumo e Premium elásticos. Para obter mais informações, confira Plano de migração.

Configurar o armazenamento corretamente

As funções exigem que uma conta de armazenamento seja associada ao seu aplicativo de funções. A conexão da conta de armazenamento é usada pelo host do Functions para operações como gerenciamento de gatilhos e execuções de função de registro em log. Ele também é usado ao dimensionar dinamicamente aplicativos de funções. Para obter mais informações, confira Considerações de armazenamento do Azure Functions.

Uma conta de armazenamento ou sistema de arquivos configurado incorretamente em seu aplicativo de funções pode afetar o desempenho e a disponibilidade de suas funções. Para ajudar a solucionar problemas de uma conta de armazenamento configurada incorretamente, consulte o artigo solução de problemas de armazenamento.

Configurações de conexão do armazenamento

Os aplicativos de funções que são dimensionados dinamicamente podem ser executados de um ponto de extremidade do Arquivos do Azure em sua conta de armazenamento ou dos servidores de arquivos associados às suas instâncias escalonadas. Esse comportamento é controlado pelas seguintes configurações de aplicativo:

Essas configurações só têm suporte quando você executa em um plano Premium ou em um plano de consumo no Windows. Eles não são exigidos pelo plano de Consumo Flexível, que usa um contêiner do Armazenamento de blobs para hospedar pacotes de implantação em vez de um compartilhamento de Arquivos do Azure.

Quando você cria seu aplicativo de funções no portal do Azure ou usando a CLI do Azure ou Azure PowerShell, essas configurações são criadas para seu aplicativo de funções quando necessário. Ao criar seus recursos de um modelo do Azure Resource Manager (modelo do ARM), você também precisa incluir WEBSITE_CONTENTAZUREFILECONNECTIONSTRING no modelo.

Em sua primeira implantação usando um modelo do ARM, não inclua WEBSITE_CONTENTSHARE, que é gerado para você.

Você pode usar os seguintes exemplos de modelo do ARM para ajudar a definir corretamente essas configurações:

Importante

No momento, o serviço Arquivos do Azure não oferece suporte às conexões baseadas em identidade. O plano de consumo flex dá suporte total às identidades gerenciadas. Para obter mais informações, consulte Criar um aplicativo sem os arquivos do Azure.

Configuração da conta de armazenamento

Quando você cria um aplicativo de funções, é necessário criar ou vincular uma conta de armazenamento do Azure de uso geral que oferece suporte ao armazenamento de Tabelas, Blobs e Filas. Isso ocorre porque o Functions usa o Armazenamento do Azure para operações como gerenciamento de gatilhos e log de execuções de função. A cadeia de conexão da conta de armazenamento para seu aplicativo de funções é encontrada nas AzureWebJobsStorage configurações WEBSITE_CONTENTAZUREFILECONNECTIONSTRING do aplicativo.

Tenha em mente as seguintes considerações ao criar essa conta de armazenamento:

  • Para reduzir a latência, crie a conta de armazenamento na mesma região que o aplicativo de funções.

  • Use uma conta de armazenamento separada para cada aplicativo de funções para maximizar o desempenho na produção. Esse aspecto é particularmente verdadeiro com o Durable Functions e as funções disparadas pelos Hubs de Eventos.

  • Para funções disparadas pelos Hubs de Eventos, não use uma conta com o Data Lake Storage habilitado.

Gerenciando conjuntos de dados grandes

Ao executar no Linux, você pode adicionar armazenamento extra montando um compartilhamento de arquivos. Montar um compartilhamento é uma maneira conveniente para uma função processar um grande conjunto de dados existente. Para obter mais informações, confira Montar compartilhamentos de arquivo.

Organizar suas funções

Como parte de sua solução, você provavelmente desenvolverá e publicará várias funções. Essas funções geralmente são combinadas em um único aplicativo de funções, mas também podem ser executadas em aplicativos de funções separados. Nos planos de hospedagem Premium e Dedicado (Serviço de aplicativo), vários aplicativos de funções também podem compartilhar os mesmos recursos executando no mesmo plano. Como você agrupa suas funções e aplicativos de funções pode afetar o desempenho, o dimensionamento, a configuração, a implantação e a segurança da solução geral.

Para Consumo e Premium, todas as funções em um aplicativo de funções são dinamicamente dimensionadas juntas.

Para obter mais informações sobre como organizar suas funções, consulte Melhores recomendadas na organização de funções.

Otimizar implantações

Ao implantar um aplicativo de funções, é importante ter em mente que a unidade de implantação para funções no Azure é o aplicativo de funções. Todas as funções em um aplicativo de funções são implantadas ao mesmo tempo, geralmente do mesmo pacote de implantação.

Considere estas opções para uma implantação bem-sucedida:

  • Fazer com que suas funções executem no pacote de implantação. Essa abordagem de executar do pacote oferece os seguintes benefícios:

    • Reduz o risco de problemas de bloqueio de cópia de arquivo.
    • Pode ser implantada diretamente em um aplicativo de produção, o que dispara uma reinicialização.
    • Saber que todos os arquivos no pacote estão disponíveis para seu aplicativo.
    • Melhora o desempenho das implantações de modelo do ARM.
    • Pode reduzir os tempos de inicialização a frio, especialmente para funções JavaScript com árvores de pacotes npm grandes.
  • Considere usar a implantação contínua para conectar implantações à sua solução de controle do código-fonte. As implantações contínuas também permitem que você execute no pacote de implantação.

  • Para o Plano Premium de hospedagem, considere adicionar um gatilho de aquecimento para reduzir a latência quando novas instâncias forem adicionadas. Para obter mais informações, consulte o gatilho de aquecimento do Azure Functions.

  • Para minimizar o tempo de inatividade da implantação e ser capaz de reverter implantações, considere o uso de Slots de implantação. Para obter mais informações, consulte Slots de implantação do Azure Functions.

Escrever funções robustas

Há vários princípios de design que você pode seguir ao escrever seu código de função, que ajudam com o desempenho geral e a disponibilidade de suas funções. Esses princípios incluem:

Como as falhas transitórias são comuns na computação em nuvem, você deve usar um padrão de nova tentativa ao acessar recursos baseados em nuvem. Muitos gatilhos e vinculações já implementam novas tentativa.

Design para segurança

A segurança é melhor considerada durante a fase de planejamento, e não depois que suas funções estão prontas para começar. Para saber como desenvolver e implantar funções com segurança, consulte Protegendo o Azure Functions.

Considerar a simultaneidade

À medida que a demanda se baseia em seu aplicativo de funções como resultado de eventos de entrada, os aplicativos de funções em execução nos planos Consumo e Premium são escalados. É importante entender como seu aplicativo de funções responde à carga e como os gatilhos podem ser configurados para lidar com eventos de entrada. Para obter mais informações, consulte Dimensionamento controlado por eventos no Azure Functions.

Os planos Dedicados (Serviço de Aplicativo) exigem que você forneça o dimensionamento de seus aplicativos de funções.

Contagem de processos de trabalho

Em alguns casos, é mais eficiente lidar com a carga criando vários processos, chamados processos de trabalho de linguagem, na instância antes da expansão. O número máximo de processos de trabalho de idioma permitidos é controlado pela configuraçãoFUNCTIONS_WORKER_PROCESS_COUNT. O padrão para essa configuração é 1, o que significa que vários processos não são usados. Depois que o número máximo de processos é atingido, o aplicativo de funções é expandido para mais instâncias para lidar com a carga. Essa configuração não se aplica a funções de biblioteca de classes C#, que são executados no processo de host.

Ao usar FUNCTIONS_WORKER_PROCESS_COUNT em um plano Premium ou plano Dedicado (Serviço de Aplicativo), tenha em mente o número de núcleos fornecidos pelo seu plano. Por exemplo, o plano Premium EP2 fornece dois núcleos, portanto, você deve começar com um valor de 2 e aumentar em dois conforme necessário, até o máximo.

Configuração de gatilho

Ao planejar a taxa de transferência e o dimensionamento, é importante entender como os diferentes tipos de gatilhos processam eventos. Alguns gatilhos permitem que você controle os comportamentos de lote e gerencie a simultaneidade. Geralmente, ajustar os valores nessas opções pode ajudar a escalar cada instância adequadamente para as demandas das funções invocadas. Essas opções de configuração são aplicadas a todos os gatilhos em um aplicativo de funções e são mantidas no arquivo host.json para o aplicativo. Consulte a seção Configuração da referência de gatilho específica para obter detalhes de configurações.

Para saber mais sobre como o Functions processa fluxos de mensagens, confira Processamento de eventos confiáveis no Azure Functions.

Planejar conexões

Os aplicativos de funções em execução noPlano de consumo estão sujeitos a limites de conexão. Esses limites são aplicados por instância. Devido a esses limites e como uma melhor prática geral, você deve otimizar suas conexões de saída do código de função. Para obter mais informações, consulte Gerenciar conexões no Azure Functions.

Considerações específicas de linguagens

Para sua linguagem de escolha, tenha em mente as seguintes considerações:

Maximizar a disponibilidade

O início frio é uma consideração importante para arquiteturas sem servidor. Para obter mais informações, veja Inicializações a frio. Se a inicialização a frio for uma preocupação no seu cenário, encontre uma análise aprofundada na postagem Noções básicas sobre a inicialização a frio sem servidor.

O plano Premium é o plano recomendado para reduzir as iniciações a frio e, ao mesmo tempo, manter a escala dinâmica. Você pode usar as diretrizes a seguir para reduzir as iniciações a frio e melhorar a disponibilidade em todos os três planos de hospedagem.

Plano Diretrizes
Plano Premium Implementar um gatilho de aquecimento em seu aplicativo de funções
Definir os valores para instâncias Always-Ready e o limite máximo de intermitência
Usar o suporte a gatilhos de rede virtual ao usar gatilhos não HTTP em uma rede virtual
Planos dedicados Executar em pelo menos duas instâncias com a verificação de integridade do Serviço de Aplicativo do Azure habilitada
Implementar o dimensionamento automático
Plano de Consumo • Revise o uso de padrões Singleton e as configurações de simultaneidade para vinculações e gatilhos a fim de evitar colocar limites artificialmente em como seu aplicativo de funções é dimensionado.
Revise a functionAppScaleLimit configuração, que pode limitar a expansão
• Verifique se há um limite de cota de uso diário (GB-seg) definido durante o desenvolvimento e o teste. Considere remover esse limite em ambientes de produção.

Monitorar com eficiência

O Azure Functions oferece integração interna com o Azure Applicatio Insights para monitorar a execução da função e os rastreamentos gravados do seu código. Para obter mais informações, consulte Monitorar execuções no Azure Functions. O Azure Monitor também fornece recursos para monitorar a saúde do próprio aplicativo de funções. Para saber mais, consulte Monitorar Azure Functions.

Você deve estar ciente das seguintes considerações ao usar a integração do Application Insights para monitorar suas funções:

  • Certifique-se de que a configuração do aplicativo AzureWebJobsDashboard foi removida. Essa configuração era suportada na versão mais antiga do Functions. Se ela existir, a remoção AzureWebJobsDashboard melhora o desempenho de suas funções.

  • Revisar os logs do Application Insights. Se os dados que você espera encontrar estão ausentes, considere ajustar as configurações de amostragem para capturar melhor o cenário de monitoramento. Você pode usar a excludedTypes configuração para excluir determinados tipos da amostragem, como Request ou Exception. Para obter mais informações, confira Configurar amostragem.

O Azure Functions também permite que você envie logs gerados pelo sistema e pelo usuário para o Logs do Azure Monitor. Atualmente, a integração aos Logs do Azure Monitor está em versão prévia.

Criar em redundância

Suas necessidades de negócios talvez exijam que suas funções sempre estejam disponíveis, mesmo quando um data center estiver indisponível. Para saber como usar uma abordagem multi-regional para manter suas funções críticas sempre em execução, consulte Confiabilidade no Azure Functions.

Próximas etapas

Gerenciar seu aplicativo de funções