Como arrumar um servidor sobrecarregado?

O material, cuja tradução publicamos hoje, é dedicado a encontrar gargalos no desempenho do servidor, corrigir problemas, melhorar o desempenho do sistema e impedir a degradação do desempenho. Aqui, no caminho para resolver problemas de um servidor sobrecarregado, propõe-se executar as 4 etapas a seguir:

  1. Avaliação de uma situação: determinação de um gargalo de desempenho do servidor.
  2. Estabilização do servidor: a aplicação de medidas urgentes para melhorar a situação.
  3. Melhoria do sistema: expandindo e otimizando os recursos do sistema.
  4. Monitoramento de servidor: usando ferramentas automatizadas para impedir a ocorrência de problemas.



1. Avaliação da situação


Quando o tráfego sobrecarrega o servidor, o processador, a rede, a memória e as E / S de disco podem se tornar um gargalo de desempenho. Determinar o que exatamente causa o problema permite que você se concentre no mais importante. Considere alguns recursos da análise dos subsistemas de servidor mais importantes.

  • . , 80%, , . , 80-90%. 100%, . , , . , , , «» . , , , , .
  • . , , , , . , -, , . , , .
  • . , . , . . , (Out Of Memory, OOM). , , , .
  • /. , , , , . , , , (, ). — , .

O que discutiremos abaixo tem como objetivo solucionar problemas com o processador e a rede. O fato é que a maioria dos projetos sofre, durante períodos de pico de tráfego, justamente por esses problemas.

Você pode começar a solucionar problemas do servidor usando o comando top . Se houver essa oportunidade, aqui você pode recorrer aos dados históricos do provedor de hospedagem e aos dados coletados pelos sistemas de monitoramento.

2. Estabilização de servidor


Ter um servidor sobrecarregado no sistema pode levar rapidamente a falhas em cascata em outras partes do sistema. Como resultado, é importante, depois que se souber que o servidor está sobrecarregado, estabilizá-lo e só então investigar a situação com o objetivo de introduzir algumas melhorias sérias no sistema.

▍ Limitar a velocidade de processamento de consultas


Limitar a velocidade de processamento de solicitações permite proteger a infraestrutura limitando o número de solicitações recebidas. Isso é muito importante quando o desempenho do servidor diminui. À medida que o tempo de resposta do servidor aumenta, os usuários tendem a atualizar agressivamente a página, o que aumenta ainda mais a carga do servidor.

Embora se recusar a processar uma solicitação seja uma medida simples e eficaz, é melhor reduzir a carga no servidor limitando o número de solicitações que chegam a ele usando algum sistema externo. Pode ser, por exemplo, um balanceador de carga, servidor proxy reverso ou CDN. Abaixo estão os links para instruções para trabalhar com vários sistemas desse tipo:


Aqui está o material sobre como reduzir a carga do servidor usando várias abordagens para limitar a velocidade do processamento de solicitações.

Cache em HTTP


Procure maneiras de melhorar o armazenamento em cache do conteúdo. Se o recurso puder ser fornecido ao usuário a partir do cache HTTP (a partir do cache do navegador ou da CDN), ele não precisará ser solicitado ao servidor, o que reduz a carga no servidor.

Cabeçalhos HTTP como Cache-Control , Expires e ETag indicam como um recurso específico deve ser armazenado em cache. A auditoria e a correção desses cabeçalhos podem ajudar a melhorar o cache.

Embora você possa recorrer aos recursos dos trabalhadores do serviço para armazenamento em cache , eles usam um cache separado . Isso é uma ajuda ao sistema de cache do navegador principal, não um substituto para ele. Portanto, ao corrigir problemas de um servidor sobrecarregado, os esforços devem se concentrar na otimização do cache HTTP.

Diagnóstico


Inicie o Lighthouse e consulte os ativos estáticos de Servir com uma métrica de política de cache eficiente para ver uma lista de recursos com tempos de cache curtos e médios ( Time To Live , TTL). Revise os recursos listados e considere aumentar seu TTL. Aqui estão os termos estimados de armazenamento em cache aplicáveis ​​a vários recursos.

  • Os recursos estáticos precisam ser armazenados em cache por um longo período (1 ano).
  • Os recursos dinâmicos precisam ser armazenados em cache por um curto período de tempo (3 horas).

Configuração de cache


É necessário gravar o tempo de armazenamento em cache necessário, expresso em segundos, na diretiva de max-agecabeçalho Cache-Control . Aqui estão as instruções para definir este cabeçalho em diferentes sistemas:


Observe que a diretiva max-ageé apenas uma das muitas diretivas que afetam o cache. Existem outras diretivas e outros cabeçalhos que afetam os recursos de cache. Para entender melhor esse problema, é recomendável que você leia este guia de cache HTTP.

Reduction Redução gradual nas capacidades do sistema


Uma redução gradual nos recursos do sistema é uma estratégia para limitar temporariamente a funcionalidade destinada a remover carga excessiva do servidor. Este conceito pode ser aplicado de várias maneiras diferentes. Por exemplo, fornecendo aos clientes uma página de texto estática em vez de um aplicativo completo, desativando a pesquisa ou retornando resultados de pesquisa abaixo do normal. Isso inclui desabilitar os recursos que exigem muitos recursos de projetos que não afetam sua funcionalidade básica. A principal atenção aqui deve ser dada à desativação da funcionalidade, que pode ser abandonada sem afetar muito os principais recursos do aplicativo.

3. Melhoria do sistema


▍Utilização da CDN


A tarefa de servir recursos estáticos pode ser transferida do servidor para a CDN (Content Delivery Network). Isso reduzirá a carga no servidor.

A principal função da CDN é entregar rapidamente materiais aos usuários através do uso de uma grande rede de servidores localizados próximos aos usuários. Além disso, algumas CDNs oferecem recursos adicionais relacionados ao desempenho. Entre eles - compactação de dados, balanceamento de carga, otimização de arquivos de mídia.

Configuração CDN


As vantagens da CDN são reveladas se a empresa que possui a rede possui um grande agrupamento de servidores distribuídos em todo o mundo. Portanto, oferecer suporte ao seu próprio serviço CDN raramente faz sentido. Uma configuração típica da CDN é um procedimento bastante rápido que leva cerca de meia hora. Consiste em atualizar os registros DNS para que eles apontem para a CDN.

Otimização CDN: Estudo de Caso


Para identificar recursos que não são atendidos usando a CDN (mas devem ser emitidos para usuários com uma CDN), você pode usar o WebPageTest . Na página de resultados, clique no retângulo assinado como Effective use of CDNe visualize a lista de recursos que devem ser atendidos pela CDN.


Resultados do WebPageTest

Solução de problemas


Se os recursos não forem armazenados em cache usando a CDN, descubra se as seguintes condições são verdadeiras:


▍ Escalando recursos de computação


A decisão de escalar os recursos de computação deve ser tomada com cautela. Embora muitas vezes seja possível resolver certos problemas recorrendo ao dimensionamento, tendo feito isso inoportuno, é possível complicar desnecessariamente o sistema e aumentar de maneira irracional o custo de seu suporte.

Diagnóstico


Um indicador alto de tempo para o primeiro byte ( Time To First Byte , TTFB) pode ser um sinal de que o servidor está atingindo seus limites. Você pode encontrar informações TTFB na seção Reduzir tempos de resposta do servidor (TTFB) do relatório Farol.

Para um estudo mais aprofundado da situação, você precisa usar alguma ferramenta de monitoramento e analisar o uso do processador. Se o valor de carga do processador atual ou previsto exceder 80% - isso significa que você precisa pensar em aumentar a capacidade do servidor.

Solução de problemas


A adição de um balanceador de carga ao sistema permite distribuir o tráfego entre vários servidores. Um balanceador de carga está localizado na frente do pool de servidores e distribui o tráfego para os servidores apropriados. Os provedores de nuvem oferecem aos usuários balanceadores de carga ( GCP , AWS , Azure ), mas você também pode usar seu próprio balanceador usando HAProxy ou NGINX . Depois que o balanceador de carga estiver pronto para funcionar, servidores adicionais poderão ser adicionados ao sistema.

Além do balanceamento de carga, a maioria dos provedores de nuvem oferece dimensionamento automático do poder de computação ( GCP , AWS ,Azure ). A escala automática está associada ao balanceamento de carga. Ou seja, com o dimensionamento automático de recursos em tempos de carregamento altos, recursos adicionais são alocados e, durante períodos de carga baixa, recursos desnecessários são desativados. Mas, mesmo considerando isso, deve-se notar que o dimensionamento automático também não é uma solução universal. Leva tempo para iniciar servidores automaticamente. As configurações de dimensionamento automático requerem configuração séria. Portanto, antes de aplicar um sistema complexo de dimensionamento automático, vale a pena tentar uma configuração relativamente simples com um balanceador de carga.

CompressionUsando compactação de dados


Os recursos de texto devem ser compactados usando o algoritmo gzip ou brotli. Em alguns casos, a compactação pode ajudar a reduzir o tamanho desses recursos em cerca de 70%.

Diagnóstico


Para encontrar recursos que precisam de compactação, você pode usar o indicador Habilitar compactação de texto no relatório Farol.

Solução de problemas


Para habilitar a compactação, você precisa editar as configurações do servidor. Aqui estão os detalhes sobre isso:


Otimização de imagens e outros materiais de mídia


Na imagem, encontra- se a maior parte dos materiais na maioria dos sites. A otimização da imagem pode levar a uma redução significativa no tamanho dos materiais do site. Além disso, essa otimização é realizada rapidamente.

Diagnóstico


Existem vários indicadores no relatório Lighthouse que indicam possíveis opções de otimização de imagem. Para procurar imagens grandes que precisam de otimização, você pode usar as ferramentas comuns de desenvolvedor de navegador. Essas imagens podem muito bem se tornar boas candidatas à otimização.

Aqui está uma lista de métricas de relatório LightHouse às quais você deve prestar atenção ao explorar a possibilidade de otimização de imagem:


Se você estiver usando as ferramentas de desenvolvedor do Chrome para ajudar a otimizar suas imagens, siga estas etapas:

  • Registre a atividade de rede da página.
  • Clique em Imgpara filtrar recursos que não são de imagem.
  • Clique em uma coluna Sizepara classificar os arquivos de imagem por tamanho.

Solução de problemas


Primeiro, vamos falar sobre o que deve ser feito se você tiver pouco tempo.

Em tal situação, você deve prestar atenção às imagens grandes e às imagens baixadas com mais frequência do que outras. Após encontrá-los, eles devem ser submetidos à otimização manual, usando uma ferramenta como o Squoosh . Fotos grandes geralmente são boas candidatas para otimização. Por exemplo, tirado de um recurso como Hero Images .

Aqui está o que você precisa prestar atenção ao otimizar imagens:

  • Tamanho: as imagens não devem ser maiores que o necessário.
  • : , 80-85 , 30-40% .
  • : JPEG, PNG. MP4, GIF.

Agora, algumas palavras sobre como abordar a otimização de imagem para quem tem um pouco mais de tempo.

Se as imagens compõem uma parcela significativa dos materiais do site, considere usar um serviço CDN especializado projetado para trabalhar com imagens para sua manutenção. Esses serviços permitem remover o ônus de trabalhar com imagens do servidor principal. A configuração de um projeto para usar esse serviço CDN é simples, mas requer a atualização de links existentes para imagens, para que aponte para recursos da CDN. Aqui está o material sobre o uso de serviços CDN especializados projetados para imagens.

Minificação de JavaScript e CSS


A minificação de código permite reduzir seu tamanho removendo caracteres desnecessários.

Diagnóstico


Dê uma olhada nas métricas Minify CSS e Minify JavaScript no relatório Lighthouse para identificar os recursos que precisam de minificação.

Solução de problemas


Se você não tiver muito tempo, concentre-se em reduzir o código JavaScript. Na maioria dos sites, a quantidade de código JavaScript excede a quantidade de código CSS; portanto, essa mudança fornecerá melhores resultados. Aqui é material sobre minifying JavaScript, e aqui está em minifying CSS.

4. Monitoramento de Servidor


As ferramentas de monitoramento de servidor suportam a coleta e visualização de dados usando os painéis de controle. Eles podem notificar os usuários sobre vários eventos relacionados ao desempenho do servidor. O uso dessas ferramentas pode ajudar a prevenir e mitigar problemas de desempenho do servidor.

Ao configurar um sistema de monitoramento, você deve buscar a maior simplicidade possível. A coleta excessiva de dados e notificações muito frequentes podem causar efeitos negativos. Quanto maior a variedade de dados coletados e com mais freqüência eles forem coletados, mais caro será coletá-los e armazená-los. E se o responsável pelo estado do servidor for bombardeado com mensagens sobre eventos menores, ele, como resultado, ignorará essas mensagens.

As notificações devem conter métricas que descrevam os problemas de maneira consistente e precisa. Por exemplo, o tempo de resposta do servidor (latência) é uma métrica especialmente boa para isso: permite identificar um grande número de situações problemáticas e está diretamente relacionada à forma como o servidor é percebido pelos usuários. As notificações baseadas em métricas de baixo nível, como a utilização do processador, podem desempenhar o papel de um complemento útil, mas podem indicar apenas uma pequena parte dos possíveis problemas. Além disso, as notificações não devem se basear em indicadores médios, mas em indicadores correspondentes aos percentis 95-99. Caso contrário, a análise de médias pode facilmente resultar em problemas que não afetam todos os usuários.

Configuração de monitoramento


Todos os principais provedores de nuvem fornecem aos clientes suas próprias ferramentas de monitoramento ( GCP , AWS , Azure ). Além disso, a ferramenta Netdata pode ser notada aqui - uma excelente alternativa gratuita de código aberto às ferramentas do provedor. Independentemente do que exatamente você usa, será necessário instalar um aplicativo de agente em cada servidor que você deseja monitorar. Depois de concluir a configuração do sistema, configure as notificações. Aqui estão as instruções para configurar diferentes ferramentas de monitoramento:


Sumário


Hoje falamos sobre como identificar e corrigir problemas de desempenho do servidor. Gostaria de acreditar que seus servidores funcionarão de maneira estável e que os conselhos deste material não serão úteis para você. E se algo der errado - esperamos que você tenha encontrado algo aqui que o ajude a lidar com o problema o mais rápido possível.

Queridos leitores! O que você faz em uma situação em que o servidor no qual seu projeto está sendo executado começa a ficar mais lento?


All Articles