![Prevenindo o aumento do escopo: guia para gerenciar equipes terceirizadas](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714062125_Prevenindo-o-aumento-do-escopo-guia-para-gerenciar-equipes-terceirizadas-150x150.jpg)
Prevenindo o aumento do escopo: guia para gerenciar equipes terceirizadas
25 de abril de 2024![Controladores de entrega de aplicativos: uma chave para a modernização de aplicativos](https://optimuscloud.com.br/wp-content/uploads/2024/04/1714068006_Controladores-de-entrega-de-aplicativos-uma-chave-para-a-modernizacao-150x150.jpg)
Controladores de entrega de aplicativos: uma chave para a modernização de aplicativos
25 de abril de 2024A latência é inimiga de aplicativos ágeis, e inicializações a frio – o tempo extra que uma função que não foi usada recentemente pode levar para responder a um evento – são apenas uma das causas disso. Não importa quando suas funções foram chamadas pela última vez, você deseja acionamentos extremamente rápidos e sem atraso enquanto uma função aquece.
Medir e melhorar as partidas a frio na plataforma e otimizar suas funções são importantes para melhorar o desempenho do aplicativo e mitigar a latência. Felizmente, há coisas que você pode fazer para evitar que uma inicialização a frio prejudique o desempenho do seu aplicativo. Antes de compartilhar algumas dicas, explicarei como a Microsoft abordou o problema no Azure Functions.
Como as funções do Azure atenuam as inicializações a frio
Desde o lançamento em 2016, o Azure Functions ajudou muitos clientes a desenvolver com eficiência uma lógica altamente escalonável e orientada a eventos usando a linguagem de programação de sua preferência. Ele foi desenvolvido para escalabilidade e produtividade do desenvolvedor, e o tempo de execução da função pode ser executado em qualquer lugar, até mesmo em sua própria máquina. Essa é a beleza das funções sem servidor.
No entanto, uma execução por instância não é o modelo mais eficiente para executar funções, por isso o Azure Functions fornece opções de simultaneidade por instância (se a sua carga de trabalho suportar). O benefício não é apenas um melhor desempenho, mas também uma redução drástica de inicializações a frio, uma vez que novas instâncias não serão iniciadas até que o limite de simultaneidade seja atingido.
O primeiro passo para melhorar o desempenho é medi-lo. Para medir o desempenho das Funções Azure, priorizamos o arranque a frio de gatilhos HTTP síncronos no modelo de consumo. Isso significa observar o que a plataforma e o host do Azure Functions devem fazer para executar a primeira função de gatilho HTTP em uma nova instância de máquina virtual (VM). Então nós melhoramos. Também estamos trabalhando para melhorar as partidas a frio em cenários assíncronos.
Para avaliar nosso progresso, executamos exemplos de aplicativos de função de gatilho HTTP que medem latências de inicialização a frio para todas as versões com suporte do Azure Functions, em todos os idiomas, para consumo do Windows e do Linux. Implantamos esses aplicativos de exemplo em todas as regiões e sub-regiões do Azure onde o Azure Functions é executado. Nossa função de teste chama esses aplicativos de amostra a cada poucas horas para acionar uma verdadeira inicialização a frio e, atualmente, gera cerca de 85.000 amostras de inicialização a frio diariamente.
Nos testes, pretendemos que a inicialização a frio seja de algumas centenas de milissegundos no percentil 50 e bem abaixo de um segundo no percentil 99, em todas as regiões e para todos os idiomas e plataformas suportadas. Construímos uma infraestrutura enorme para realizar esses testes.
Como lidamos com alertas
Nos últimos 18 meses, reduzimos a latência de inicialização a frio em aproximadamente 53% em todas as regiões e para todos os idiomas e plataformas com suporte.
Se alguma das métricas rastreadas começar a regredir, seremos imediatamente notificados e começaremos a investigar. E-mails diários, alertas e painéis históricos fornecem latências completas de inicialização a frio em vários percentis. Também realizamos análises específicas e acionamos alertas se nossos números de latência 50, 99 ou máxima regredirem.
Também coletamos perfis PerfView detalhados dos aplicativos de amostra implantados em regiões selecionadas. O detalhamento inclui pilhas de chamadas completas (modo de usuário e modo kernel) para cada milissegundo gasto durante a inicialização a frio. Os perfis revelam o uso da CPU e pilhas de chamadas, alternâncias de contexto, leituras de disco, chamadas HTTP, falhas graves de memória, compiladores just-in-time (JIT) de Common Language Runtime (CLR), coletores de lixo (GC), cargas de tipo e muitos outros detalhes. sobre os componentes internos do .NET. Relatamos todos esses detalhes em nossos pipelines de registro e recebemos alertas se as métricas regredirem. E estamos sempre buscando formas de fazer melhorias com base nesses perfis.
O caminho para o desempenho de força industrial
Às vezes, os desenvolvedores perguntam por que demora tanto para melhorar o desempenho. Nosso objetivo é alto e otimizamos a latência do percentil 99 — um feito desafiador de detecção e engenharia. Investigamos cenários de inicialização a frio no nível de milissegundos e ajustamos continuamente os algoritmos que alocam capacidade. Nossas principais áreas de foco são:
- Pools de aplicativos de função: Na arquitetura interna, devemos ter o número certo de pools de aplicativos de funções aquecidos e prontos para lidar com uma inicialização a frio para todas as plataformas e idiomas com suporte. Esses pools servem como espaços reservados, na verdade. Exatamente quantos são necessários depende do uso por região, além de capacidade extra suficiente para atender a picos inesperados. Refinamos continuamente nossos algoritmos para equilibrar os pools sem aumentar os custos.
- Latências do 99º percentil: Embora seja relativamente simples otimizar cenários de inicialização a frio para o percentil 50, é mais importante — embora muito mais difícil — abordar as latências do percentil 99, especialmente quando várias VMs estão envolvidas. Cada um executa diferentes processos e componentes e é configurado com características específicas de disco, rede e memória.
- criadores de perfil: Ferramentas especializadas de criação de perfil analisam cenários de inicialização a frio em nível de milissegundos, examinando pilhas de chamadas detalhadas e rastreando atividades tanto no nível do aplicativo quanto no sistema operacional. Os provedores PerfView e Event Tracing for Windows (ETW) são ótimos para resolver problemas com aplicativos baseados em Windows e .NET, mas também investigamos problemas em plataformas e idiomas. Às vezes, o criador de perfil até gera problemas ou falsos positivos, e isso leva ainda mais tempo para ser investigado.
6 maneiras de melhorar inicializações a frio em funções do Azure
Aprendemos muito com nossos testes que minimizaram o impacto das inicializações a frio no desempenho do aplicativo. Aqui estão algumas estratégias que você pode tentar analisar e melhorar ainda mais as inicializações a frio de seus aplicativos:
- Implante sua função como um pacote .zip (compactado). Minimize seu tamanho removendo arquivos e dependências desnecessários, como símbolos de depuração (arquivos .pdb) e arquivos de imagem desnecessários.
- Para implantação do Windows, execute suas funções a partir de um arquivo de pacote. Para fazer isso, use o
WEBSITE_RUN_FROM_PACKAGE=1
configurações do aplicativo. Se a sua aplicação utilizar o Armazenamento do Azure para armazenar conteúdo, implemente o Armazenamento do Azure na mesma região que a sua aplicação Azure Functions e considere utilizar o armazenamento premium para um arranque a frio mais rápido. - Ao implantar aplicativos .NET, publique com ReadyToRun para evitar custos adicionais do compilador JIT.
- No portal do Azure, navegue até seu aplicativo de funções. É isso Diagnosticar e resolver problemase revise todas as mensagens que aparecem abaixo Alertas de risco. Procure problemas que possam afetar as partidas a frio.
- Se a sua aplicação utilizar um plano Azure Functions Premium ou App Service, invoque gatilhos de aquecimento para pré-carregar dependências ou adicione a lógica personalizada necessária para ligar a pontos finais externos. (Esta opção não é compatível com aplicativos em planos de consumo.)
- Experimente o recurso “instâncias sempre prontas” em nossa mais nova opção de hospedagem para funções sem servidor orientadas a eventos, Flex Consumption, que está em versão prévia para acesso antecipado. Este plano oferece suporte a longos tempos de execução de funções e inclui rede privada, seleção de tamanho de instância, controle de simultaneidade e recursos de expansão rápida e grande em um modelo sem servidor.
Ainda sente o frio de uma partida a frio?
Se o seu aplicativo Azure Functions ainda não funcionar tão bem quanto você gostaria:
- Compartilhe seus comentários sobre a inicialização a frio do Azure Functions.
- Solicite a pré-visualização do Flex Consumo e tenha acesso antecipado à nova plataforma.
- Junte-se a nós em maio de 2024 no Microsoft Build, onde revelaremos a nova história de desempenho da plataforma sem servidor, ao vivo no palco.
A postagem Como conquistar partidas a frio para obter melhor desempenho apareceu pela primeira vez em The New Stack.