Melhores práticas para Funções do Azure fiáveis

Funções do Azure é uma experiência de computação a pedido condicionada por eventos que expande a plataforma de aplicações Serviço de Aplicações do Azure existente com capacidades para implementar código acionado por eventos que ocorrem no Azure, em serviços de terceiros e em sistemas no local. As funções permitem-lhe criar soluções ao ligar a origens de dados ou soluções de mensagens, o que torna mais fácil processar e reagir a eventos. As funções são executadas em datacenters do Azure, que são complexos com muitos componentes integrados. Num ambiente de cloud alojado, espera-se que as VMs possam reiniciar ou mover ocasionalmente e que as atualizações dos sistemas ocorram. As suas aplicações de funções também provavelmente dependem de APIs externas, serviços do Azure e outras bases de dados, que também são propensas a falta de fiabilidade periódica.

Este artigo detalha algumas das melhores práticas para conceber e implementar aplicações de funções eficientes que permanecem em bom estado de funcionamento e têm um bom desempenho num ambiente baseado na cloud.

Escolha o plano de alojamento correto

Quando cria uma aplicação de funções no Azure, tem de escolher um plano de alojamento para a sua aplicação. O plano que escolher tem um efeito no desempenho, fiabilidade e custo. Existem três planos básicos de alojamento disponíveis para Funções:

Todos os planos de alojamento estão geralmente disponíveis (GA) ao executar o Linux ou o Windows.

No contexto da plataforma Serviço de Aplicações, o plano Premium utilizado para alojar dinamicamente as suas funções é o plano Elastic Premium (EP). Existem outros planos dedicados (Serviço de Aplicações) denominados Premium. Para saber mais, consulte o artigo Plano Premium .

O plano de alojamento que escolher determina os seguintes comportamentos:

  • A forma como a sua aplicação de funções é dimensionada com base na procura e na forma como a alocação de instâncias é gerida.
  • Os recursos disponíveis para cada instância da aplicação de funções.
  • Suporte para funcionalidades avançadas, como o Azure Rede Virtual conectividade.

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

É importante que escolha o plano correto quando criar a sua aplicação de funções. As funções proporcionam uma capacidade limitada de alternar o seu plano de alojamento, principalmente entre os planos Consumo e Elastic Premium. Para saber mais, veja Planear a migração.

Configurar o armazenamento corretamente

As funções exigem que uma conta de armazenamento seja associada à sua aplicação de funções. A ligação da conta de armazenamento é utilizada pelo anfitrião de Funções para operações como a gestão de acionadores e execuções de funções de registo. Também é utilizado quando dimensiona dinamicamente as aplicações de funções. Para saber mais, veja Considerações de armazenamento para Funções do Azure.

Um sistema de ficheiros configurado incorretamente ou uma conta de armazenamento na sua aplicação de funções pode afetar o desempenho e a disponibilidade das suas funções. Para obter ajuda com a resolução de problemas de uma conta de armazenamento configurada incorretamente, veja o artigo de resolução de problemas de armazenamento .

Definições de ligação de armazenamento

As aplicações de funções que dimensionam dinamicamente podem ser executadas a partir de um ponto final Ficheiros do Azure na sua conta de armazenamento ou a partir dos servidores de ficheiros associados às instâncias de escalamento horizontal. Este comportamento é controlado pelas seguintes definições de aplicação:

Estas definições só são suportadas quando está em execução num plano Premium ou num plano de Consumo no Windows.

Quando cria a sua aplicação de funções no portal do Azure ou com a CLI do Azure ou Azure PowerShell, estas definições são criadas para a sua aplicação de funções quando necessário. Quando cria os seus recursos a partir de um modelo de Resource Manager do Azure (modelo arm), também tem de incluir WEBSITE_CONTENTAZUREFILECONNECTIONSTRING no modelo.

Na sua primeira implementação com um modelo do ARM, não inclua WEBSITE_CONTENTSHARE, que é gerado automaticamente.

Pode utilizar os seguintes exemplos de modelo do ARM para ajudar a configurar corretamente estas definições:

Configuração da conta de armazenamento

Ao criar uma aplicação de funções, tem de criar ou associar a uma conta de Armazenamento do Azure para fins gerais que suporte armazenamento de Blobs, Filas e Tabelas. As funções dependem do Armazenamento do Azure para operações como a gestão de acionadores e execuções de funções de registo. A cadeia de ligação da conta de armazenamento da sua aplicação de funções encontra-se nas definições e WEBSITE_CONTENTAZUREFILECONNECTIONSTRING da aplicaçãoAzureWebJobsStorage.

Tenha em atenção as seguintes considerações ao criar esta conta de armazenamento:

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

  • Para melhorar o desempenho na produção, utilize uma conta de armazenamento separada para cada aplicação de funções. Isto é especialmente verdade com Durable Functions e funções acionadas pelo Hub de Eventos.

  • Para funções acionadas do Hub de Eventos, não utilize uma conta com Data Lake Storage ativada.

Processar conjuntos de dados grandes

Ao executar no Linux, pode adicionar armazenamento extra ao montar uma partilha de ficheiros. Montar uma partilha é uma forma conveniente de uma função processar um grande conjunto de dados existente. Para saber mais, veja Montar partilhas de ficheiros.

Organizar as suas funções

Como parte da sua solução, é provável que desenvolva e publique várias funções. Muitas vezes, estas funções são combinadas numa única aplicação de funções, mas também podem ser executadas em aplicações de funções separadas. Nos planos de alojamento Premium e Dedicado (Serviço de Aplicações), várias aplicações de funções também podem partilhar os mesmos recursos ao executar no mesmo plano. A forma como agrupa as suas funções e aplicações de funções pode afetar o desempenho, o dimensionamento, a configuração, a implementação e a segurança da sua solução global.

Para o plano Consumo e Premium, todas as funções numa aplicação de funções são dimensionadas dinamicamente em conjunto.

Para obter mais informações sobre como organizar as suas funções, veja Melhores práticas da organização de funções.

Otimizar implementações

Ao implementar uma aplicação de funções, é importante ter em atenção que a unidade de implementação das funções no Azure é a aplicação de funções. Todas as funções numa aplicação de funções são implementadas ao mesmo tempo, normalmente a partir do mesmo pacote de implementação.

Considere estas opções para uma implementação com êxito:

  • Faça com que as suas funções são executadas a partir do pacote de implementação. Esta execução a partir da abordagem do pacote proporciona os seguintes benefícios:

    • Reduz o risco de problemas de bloqueio de cópia de ficheiros.
    • Pode ser implementado diretamente numa aplicação de produção, o que aciona um reinício.
    • Saiba que todos os ficheiros no pacote estão disponíveis para a sua aplicação.
    • Melhora o desempenho das implementações de modelos do ARM.
    • Pode reduzir os tempos de início a frio, especialmente para funções JavaScript com grandes árvores de pacotes npm.
  • Considere utilizar a implementação contínua para ligar implementações à sua solução de controlo de origem. As implementações contínuas também lhe permitem executar a partir do pacote de implementação.

  • Para alojamento de planos Premium, considere adicionar um acionador de aquecimento para reduzir a latência quando forem adicionadas novas instâncias. Para saber mais, veja Funções do Azure acionador de aquecimento.

  • Para minimizar o tempo de inatividade da implementação e para conseguir reverter as implementações, considere utilizar blocos de implementação. Para saber mais, veja Funções do Azure blocos de implementação.

Escrever funções robustas

Existem vários princípios de estrutura que pode seguir ao escrever o código de função que ajudam no desempenho geral e na disponibilidade das suas funções. Estes princípios incluem:

Uma vez que as falhas transitórias são comuns na computação na cloud, deve utilizar um padrão de repetição ao aceder a recursos baseados na cloud. Muitos acionadores e enlaces já implementam a repetição.

Conceber para segurança

A segurança é melhor considerada durante a fase de planeamento e não depois de as suas funções estarem prontas. Para Saber como desenvolver e implementar funções de forma segura, veja Proteger Funções do Azure.

Considerar simultaneidade

À medida que a procura aumenta na sua aplicação de funções como resultado de eventos recebidos, as aplicações de funções em execução nos planos Consumo e Premium são reduzidas horizontalmente. É importante compreender como a sua aplicação de funções responde à carga e como os acionadores podem ser configurados para lidar com eventos recebidos. Para obter uma descrição geral, veja Dimensionamento orientado por eventos no Funções do Azure.

Os planos dedicados (Serviço de Aplicações) requerem que forneça para aumentar horizontalmente as suas aplicações de funções.

Contagem de processos de trabalho

Em alguns casos, é mais eficiente lidar com a carga ao criar vários processos, denominados processos de trabalho de linguagem, na instância antes do aumento horizontal. O número máximo de processos de trabalho de idioma permitidos é controlado pela definição FUNCTIONS_WORKER_PROCESS_COUNT . A predefinição para esta definição é 1, o que significa que não são utilizados vários processos. Após o número máximo de processos ser atingido, a aplicação de funções é aumentada horizontalmente para mais instâncias para processar a carga. Esta definição não se aplica a funções de biblioteca de classes C#, que são executadas no processo de anfitrião.

Ao utilizar FUNCTIONS_WORKER_PROCESS_COUNT um plano Premium ou um plano Dedicado (Serviço de Aplicações), tenha em atenção o número de núcleos fornecidos pelo seu plano. Por exemplo, o plano EP2 Premium fornece dois núcleos, pelo que deve começar com um valor de 2 e aumentar em dois, conforme necessário, até ao máximo.

Configuração do acionador

Ao planear o débito e o dimensionamento, é importante compreender como os diferentes tipos de acionadores processam eventos. Alguns acionadores permitem-lhe controlar os comportamentos de criação de batches e gerir a simultaneidade. Muitas vezes, ajustar os valores nestas opções pode ajudar cada instância a dimensionar adequadamente para as exigências das funções invocadas. Estas opções de configuração são aplicadas a todos os acionadores numa aplicação de funções e são mantidas no ficheiro host.json da aplicação. Veja a secção Configuração da referência de acionador específica para obter detalhes das definições.

Para saber mais sobre como as Funções processam fluxos de mensagens, veja Funções do Azure processamento de eventos fiável.

Planear ligações

As aplicações de funções em execução no Plano de consumo estão sujeitas a limites de ligação. Estes limites são impostos por instância. Devido a estes limites e como melhor prática geral, deve otimizar as suas ligações de saída a partir do código de função. Para saber mais, veja Gerir ligações no Funções do Azure.

Considerações específicas do idioma

Para o seu idioma à sua escolha, tenha em atenção as seguintes considerações:

Maximizar a disponibilidade

O arranque a frio é uma consideração fundamental para arquiteturas sem servidor. Para saber mais, consulte Inícios a frio. Se o arranque a frio for uma preocupação para o seu cenário, pode encontrar uma descrição mais aprofundada na mensagem Compreender o início a frio sem servidor .

O plano Premium é o plano recomendado para reduzir as constipações e manter o dimensionamento dinâmico. Pode utilizar a seguinte documentação de orientação para reduzir os arranques a frio e melhorar a disponibilidade nos três planos de alojamento.

Planear Orientação
Plano Premium Implementar um acionador de Aquecimento na sua aplicação de funções
Definir os valores para Always-Ready instâncias e o limite máximo de rajadas
Utilizar suporte de acionador de rede virtual ao utilizar acionadores não HTTP numa rede virtual
Planos dedicados Execute em, pelo menos, duas instâncias com a Verificação de Estado de Funcionamento do Serviço de Aplicações do Azure ativada
Implementar o dimensionamento automático
Plano de consumo • Reveja a utilização de padrões Singleton e as definições de simultaneidade para enlaces e acionadores para evitar colocar artificialmente limites à forma como a sua aplicação de funções é dimensionada.
Reveja a functionAppScaleLimit definição, que pode limitar o aumento horizontal
• Verifique se existe um limite de Quota de Utilização Diária (GB-Seg) definido durante o desenvolvimento e o teste. Considere remover este limite em ambientes de produção.

Monitorizar eficazmente

Funções do Azure oferece integração incorporada com o Aplicação Azure Insights para monitorizar a execução da função e os rastreios escritos a partir do seu código. Para saber mais, veja Monitorizar Funções do Azure. O Azure Monitor também fornece instalações para monitorizar o estado de funcionamento da própria aplicação de funções. Para saber mais, veja Monitorização com o Azure Monitor.

Deve ter em atenção as seguintes considerações ao utilizar a integração do Application Insights para monitorizar as suas funções:

  • Confirme que a definição da aplicação AzureWebJobsDashboard foi removida. Esta definição foi suportada na versão mais antiga das Funções. Se existir, remover AzureWebJobsDashboard melhora o desempenho das suas funções.

  • Reveja os registos do Application Insights. Se os dados que espera encontrar estiverem em falta, considere ajustar as definições de amostragem para capturar melhor o seu cenário de monitorização. Pode utilizar a excludedTypes definição para excluir determinados tipos de amostragem, como Request ou Exception. Para saber mais, veja Configurar a amostragem.

Funções do Azure também lhe permite enviar registos gerados pelo sistema e gerados pelo utilizador para os Registos do Azure Monitor. A integração com os Registos do Azure Monitor está atualmente em pré-visualização.

Criar na redundância

As suas necessidades empresariais podem exigir que as suas funções estejam sempre disponíveis, mesmo durante uma indisponibilidade do datacenter. Para saber como utilizar uma abordagem multi-regional para manter as suas funções críticas sempre em execução, veja Funções do Azure recuperação após desastre geográfico e elevada disponibilidade.

Passos seguintes

Gerir a sua aplicação de funções