Descarregar redirecionamentos não-regex para Fastly em vez de Nginx (rotas)
Este tópico sugere uma solução para um problema típico de desempenho de redirecionamentos que você pode ter ao descarregar redirecionamentos não-regex para Fastly em vez de Nginx no Adobe Commerce na infraestrutura em nuvem.
Produtos e versões afetados
- Adobe Commerce na infraestrutura em nuvem (todas as versões) em ambientes
Master/Production/Staging
aproveitando o Fastly
Problema
Na infraestrutura em nuvem do Adobe Commerce, um grande número de redirecionamentos/regravações que não são regex não pode ser feito na camada Nginx e, como resultado, pode causar problemas de desempenho.
Causa
O arquivo routes.yaml
no diretório .magento/routes.yaml
define as rotas do Adobe Commerce na infraestrutura de nuvem.
Se o tamanho do arquivo do routes.yaml
for de 32 KB ou maior, você deverá descarregar os redirecionamentos/regravações não-regex no Fastly.
Essa camada Nginx não pode lidar com um grande número de redirecionamentos/regravações que não sejam regex, ou ocorrerão problemas de desempenho.
Solução
A solução é descarregar esses redirecionamentos não-regex para Fastly. Crie um caminho de erro genérico para redirecionar para Fastly.
As etapas a seguir detalharão como colocar redirecionamentos em Fastly em vez de Nginx.
-
Crie um dicionário do Edge.
Primeiro, você pode usar VCL trechos no Adobe Commerce para definir um dicionário de borda. Ele conterá os redirecionamentos.
Algumas limitações:
-
Fastly não pode fazer regex nas entradas do dicionário. É só uma combinação exata. Para obter mais informações sobre essas limitações, consulte os documentos de Fastly sobre as limitações do dicionário de borda.
-
Fastly tem um limite de 1000 entradas em um único dicionário. Fastly pode expandir esse limite, mas isso leva à terceira advertência.
-
Sempre que você atualizar as entradas e implantar o VCL atualizado em todos os nós, há um aumento de tempo de carregamento geométrico com dicionários em expansão. Isso significa que um dicionário de 2000 entradas carregará de fato de 3x a 4x mais lento do que um dicionário de 1000 entradas. Mas isso só é um problema quando você está implantando o VCL (atualizando o dicionário ou alterando o código da função VCL).
Isso não afeta o tempo que Fastly leva para processar uma solicitação; afeta apenas o tempo que Fastly leva para enviar uma nova configuração.
De modo geral, as alterações de configuração levam em média alguns segundos, geralmente não mais do que 5 a 10 segundos. Portanto, um aumento de 2x nos itens do dicionário leva mais de 30 segundos para que sua configuração seja implementada. Um aumento de 4x levaria mais perto de 2 minutos. Isso leva à quarta advertência.
-
Há um limite bem rígido de 10.000 entradas em um dicionário de borda.
É altamente recomendável consolidar sua lista de redirecionamentos. Você pode usar vários dicionários, mas esteja ciente de que qualquer atualização feita no VCL levará vários minutos para realmente popular através do Fastly.
-
-
Comparar o URL ao(s) Dicionário(s).
Quando a pesquisa URL ocorrer, a comparação será feita para aplicar o código de erro personalizado se uma correspondência for encontrada.
Use outro trecho VCL para adicionar algo como o seguinte a
vcl_recv
:code language-none declare local var.redir-path STRING; set var.redir-path = table.lookup(redirects, std.tolower(req.url), ""); if (var.redir-path != "") { error 912 var.redir-path; }
Aqui, estamos verificando se o URL existe na entrada da tabela. Em caso positivo, estamos chamando um erro interno Fastly e transmitindo para esse erro o redirecionamento URL da tabela.
-
Gerenciar o redirecionamento.
Quando uma correspondência é encontrada, a ação executada é definida para aquele
obj.status
, neste caso, um redirecionamento de movimentação permanente 301.Use um trecho final em
vcl_error
para enviar os códigos de erro 301 de volta ao cliente:code language-none if (obj.status == 912) { set obj.http.location = obj.response; set obj.status = 301; set obj.response = "Moved Permanently"; return(deliver); }
Com este bloco, estamos verificando se o código de erro transmitido de
vcl_recv
corresponde e, em caso positivo, definiremos o local para a mensagem de erro transmitida, alteraremos o código de status para 301 e a mensagem para "Movido Permanentemente". Nesse momento, a resposta deve estar pronta para retornar ao cliente.
Serviço de preparo
Se você não quiser executar um ambiente de preparo do Adobe Commerce, mas quiser ver a aparência desses redirecionamentos, poderá configurar uma conta de preparo diretamente no Fastly.
Leitura relacionada
- Fastly VCL referência
- Configurar rotas na documentação do desenvolvedor
- Configure Fastly em nossa documentação do desenvolvedor
- VCL folha de características de expressão regular em nossa documentação do desenvolvedor
- Práticas recomendadas para modificar tabelas de banco de dados no Manual de implementação do Commerce