Como suportar cargas crescentes do sistema: fale sobre preparativos em larga escala para a Black Friday

Olá Habr!

Em 2017, durante a Black Friday, a carga aumentou quase uma vez e meia e nossos servidores estavam no limite de possibilidades. Ao longo do ano, o número de clientes cresceu significativamente e ficou claro que, sem uma preparação preliminar completa, a plataforma pode simplesmente não suportar as cargas de 2018.

A meta foi definida como a mais ambiciosa possível: queríamos estar totalmente preparados para qualquer atividade, mesmo a mais poderosa, e começamos a retirar novas capacidades com antecedência durante o ano.

Nosso CTO Andrei Chizh ( chizh_andrey ) conta como nos preparamos para a Black Friday 2018, que medidas adotamos para evitar quedas e, é claro, os resultados de uma preparação tão cuidadosa.



Hoje eu quero falar sobre os preparativos para a Black Friday 2018. Por que agora, quando a maioria das principais vendas está atrasada? Começamos a nos preparar cerca de um ano antes dos eventos de grande escala e, por tentativa e erro, encontramos a solução ideal. Recomendamos que você cuide das estações quentes com antecedência e evite os fakaps que podem surgir no momento mais inoportuno.
O material será útil para quem deseja extrair o lucro máximo desses estoques, como o lado técnico da questão não é inferior ao marketing.

Características de tráfego em grandes vendas


Ao contrário da crença popular, a Black Friday não é apenas um dia por ano, mas quase uma semana inteira: as primeiras ofertas de desconto chegam de 7 a 8 dias antes da venda. O tráfego do site começa a crescer sem problemas durante toda a semana, atinge seu pico na sexta-feira e cai bastante no sábado para os indicadores regulares da loja.



É importante considerar: as lojas on-line tornam-se especialmente sensíveis a qualquer "desaceleração" no sistema. Além disso, nosso boletim de e-mail também sofreu um aumento significativo no número de envios.

É estrategicamente importante que passemos pela Black Friday sem quedas, pois a funcionalidade mais importante dos sites e listas de discussão das lojas depende da operação da plataforma, a saber:

  • Acompanhamento e emissão de recomendações de produtos,
  • A emissão de materiais relacionados (por exemplo, blocos de recomendações de design de imagens, como setas, logotipos, ícones e outros elementos visuais),
  • Emissão de imagens do produto do tamanho certo (para esses fins, temos o "ImageResizer" - um subsistema que baixa uma imagem do servidor da loja, a comprime no tamanho desejado e, através de servidores de cache, fornece imagens do tamanho certo para cada produto em cada bloco de recomendação).

De fato, durante a Black Friday 2019, a carga no serviço aumentou 40%, ou seja, o número de eventos que o sistema Retail Rocket monitora e processa nos sites das lojas online cresceu de 5 para 8 mil solicitações por segundo. Devido ao fato de estarmos nos preparando para cargas mais graves, experimentamos uma onda tão facilmente.



Preparação geral



A Black Friday é um momento quente para todo o varejo e para o comércio eletrônico em particular. O número de usuários e suas atividades no momento está aumentando às vezes. Por isso, como sempre, estamos completamente preparados para esse período ocupado. Acrescentamos aqui o fato de muitas lojas on-line estarem conectadas a nós, não apenas na Rússia, mas também na Europa, onde o hype é muito maior, e temos piores paixões do que as séries brasileiras. O que precisa ser feito para estar totalmente preparado para o aumento de cargas?

Trabalhar com servidores


Para começar, era necessário descobrir exatamente o que nos falta para aumentar a capacidade dos servidores. Já em agosto, começamos a solicitar novos servidores especificamente para a Black Friday - um total de 10 máquinas adicionais foram adicionadas. Em novembro, eles já estavam completamente em batalha.

Ao mesmo tempo, parte das máquinas de construção foi reinstalada para uso como servidores de aplicativos. Nós os preparamos imediatamente para o uso de diferentes funções: tanto para emitir recomendações quanto para o serviço ImageResizer, de modo que, dependendo do tipo de carga, cada um deles pudesse ser usado para uma dessas funções. No modo normal, os servidores de aplicativos e ImageResizer têm funções claramente definidas: os primeiros estão envolvidos na emissão de recomendações, os segundos fornecem imagens para cartas e blocos de recomendações no site das lojas on-line. Em preparação para a Black Friday, foi decidido fazer com que todos os servidores de dupla finalidade equilibrassem o tráfego entre eles, dependendo do tipo de carga.

Em seguida, adicionamos dois servidores grandes para o Kafka (Apache Kafka) e obtivemos um cluster de 5 máquinas poderosas. Infelizmente, tudo não correu tão bem quanto gostaríamos: no processo de sincronização de dados, duas novas máquinas ocuparam toda a largura do canal de rede e tivemos que descobrir com urgência como executar o processo de adição de maneira rápida e segura para toda a infraestrutura. Para resolver esse problema, nossos administradores tiveram que sacrificar valentemente o fim de semana.

Trabalhar com dados


Além dos servidores, decidimos otimizar os arquivos para facilitar o carregamento, e um grande passo para nós foi a tradução de arquivos estáticos. Todos os arquivos estáticos hospedados anteriormente nos servidores foram levados para o S3 + Cloudfront. Eles queriam fazer isso há muito tempo, uma vez que a carga no servidor estava próxima dos valores-limite, e agora um excelente motivo apareceu.

Uma semana antes da Black Friday, aumentamos o tempo de armazenamento em cache das imagens para 3 dias, para que, no caso de uma queda no ImageResizer, imagens anteriormente armazenadas em cache fossem obtidas do cdn. Também reduziu a carga em nossos servidores, porque quanto mais a imagem é armazenada, menos frequentemente precisamos gastar recursos no redimensionamento.

E por último, mas não menos importante: cinco dias antes da Black Friday, uma moratória foi anunciada na implantação de qualquer nova funcionalidade, bem como em qualquer trabalho com infraestrutura - toda a atenção foi direcionada para lidar com o aumento de cargas.

Planos de resposta a emergências


Por melhor que seja a preparação, o fakapy é sempre possível. E desenvolvemos três planos de resposta para possíveis situações críticas:

  • redução de carga
  • desativando alguns serviços,
  • desligamento completo do serviço.

Plano A: redução de carga. Deveria estar envolvido se, devido a um aumento na carga, nossos servidores ultrapassassem os tempos de resposta aceitáveis. Nesse caso, preparamos mecanismos para reduzir gradualmente a carga, trocando parte do tráfego para servidores Amazon, o que simplesmente daria "200 OK" a todas as solicitações e forneceria uma resposta vazia. Entendemos que isso é uma degradação da qualidade do serviço, mas a escolha entre o fato de o serviço não funcionar ou não mostrar recomendações para cerca de 10% do tráfego é óbvia.

Plano B: Desativando serviços. Implicou uma degradação parcial do serviço. Por exemplo, reduzindo a velocidade de cálculo de recomendações pessoais para descarregar alguns bancos de dados e canais de comunicação. No modo normal, as recomendações são calculadas no modo em tempo real, criando uma versão da loja online para cada visitante, mas sob condições de cargas maiores, uma diminuição na velocidade permite que outros serviços principais continuem funcionando.

Plano C: para o Armagedom. Se ocorrer uma falha completa do sistema, preparamos um plano que nos desconectará com segurança dos clientes. Os compradores simplesmente deixarão de ver recomendações; o desempenho de uma loja online não será afetado. Para fazer isso, teríamos que redefinir nosso arquivo de integração para que novos usuários deixassem de interagir com o serviço. Ou seja, desativaríamos o trabalho do nosso código de rastreamento principal, o serviço pararia de coletar dados e calcularia recomendações e o usuário simplesmente veria uma página sem blocos de recomendações. Para todos aqueles que receberam o arquivo de integração anteriormente, fornecemos a opção de alternar os registros DNS para a Amazon e um stub 200 OK.

Sumário


Lidamos com toda a carga, mesmo sem a necessidade de usar máquinas de construção adicionais. E, graças à preparação antecipada, não precisamos de nenhum dos planos de resposta desenvolvidos. Mas todo o trabalho realizado é uma experiência inestimável que nos ajudará a lidar com os influxos de tráfego mais inesperados e enormes.
Como em 2017, a carga no serviço aumentou 40%, e o número de usuários nas lojas online da Black Friday aumentou 60%. Todas as dificuldades e erros ocorreram durante o período preparatório, o que salvou a nós e nossos clientes de situações imprevistas.

Como você se sente sobre a Black Friday? Como se preparar para cargas críticas?

Source: https://habr.com/ru/post/pt445900/


All Articles