Na comunicação entre microsserviços, os payloads de resposta podem consumir largura de banda significativa, especialmente em conteúdo textual como JSON, HTML e CSS. O ASMCompressor permite adicionar filtros de compactação na camada de proxy para que todos os serviços compartilhem uma configuração única e consistente, evitando a implementação individual em cada linguagem ou framework. Este tópico descreve como usar o ASMCompressor no ASM para definir configurações de compactação em chamadas entre serviços.
Pré-requisitos
Um cluster ACK adicionado a uma instância do ASM versão 1.21 ou posterior. Para mais informações, consulte Adicionar um cluster a uma instância do ASM e Atualizar uma instância do ASM.
A aplicação de exemplo Bookinfo implantada na instância do ASM.
Recursos do Istio configurados para rotear tráfego entre diferentes versões de serviço.
Visão geral do recurso
O proxy oferece suporte a dois algoritmos de compactação: Gzip e Brotli.
O Gzip é um algoritmo amplamente utilizado, compatível com diversos servidores web e navegadores, conhecido pela alta taxa de compactação e velocidade. É comum seu uso para compactar conteúdo estático e dinâmico.
O Brotli é um algoritmo avançado que proporciona maior taxa de compactação e descompactação mais rápida, sendo muito usado na web. Geralmente, aplica-se a conteúdo estático, como arquivos HTML, CSS e JavaScript.
O Brotli oferece uma taxa de compactação superior à do Gzip, mas pode ser mais lento durante o processo.
Ativar e verificar a compactação Gzip
Etapa 1: Registrar o tamanho da resposta de linha de base
-
Obtenha o endereço do gateway de entrada.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, obtenha o Service address.
Na barra de endereços do navegador, insira
http://{ASM_GATEWAY_ADDRESS}/productpagepara acessar a aplicação Bookinfo. Substitua {ASM_GATEWAY_ADDRESS} pelo endereço obtido.-
Abra as ferramentas de desenvolvedor do navegador e verifique o tamanho da resposta da requisição
productpage.O tamanho da resposta é de 5,5 KB.
Etapa 2: Ativar a compactação Gzip
-
Crie um arquivo chamado
ingressgateway-gzip.yamlcom o seguinte conteúdo.Para obter uma descrição dos campos, consulte Referência do CRD ASMCompressor.
-
Execute o comando a seguir para ativar a compactação Gzip:
kubectl apply -f ingressgateway-gzip.yaml
Etapa 3: Verificar a compactação Gzip
Na barra de endereços do navegador, insira
http://{ASM_GATEWAY_ADDRESS}/productpagepara acessar a aplicação Bookinfo.-
Abra as ferramentas de desenvolvedor do navegador e verifique o tamanho da resposta da requisição
productpage.O tamanho da resposta caiu de 5,5 KB para 1,8 KB. Isso confirma que a compactação Gzip está ativada.
Etapa 4: Verificar a compactação Brotli
-
Modifique o VirtualService
bookinfo.-
Adicione o seguinte conteúdo abaixo de
spec.httpno arquivo bookinfo.yaml.- directResponse: body: string: >- Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! status: 200 match: - uri: prefix: /helloworldO conteúdo YAML atualizado é o seguinte:
-
Execute o comando a seguir para aplicar o VirtualService:
kubectl apply -f bookinfo.yaml
-
-
Ative a compactação Brotli.
-
Crie um arquivo chamado
ingressgateway-brotli.yamlcom o seguinte conteúdo.Para obter uma descrição dos campos, consulte Referência do CRD ASMCompressor.
-
Execute o comando a seguir para ativar a compactação Brotli:
kubectl apply -f ingressgateway-brotli.yaml
-
-
Verifique se a compactação Brotli está ativada.
-
Execute o comando a seguir para salvar a resposta do caminho
/helloworldno arquivoout.br:curl -I -H "Accept-Encoding: br" http://{ASM_GATEWAY_ADDRESS}/helloworld > out.br -
Instale o Brotli.
macOS: Execute o comando
brew install brotlipara instalar.No Windows, consulte as instruções de instalação em brotli.
-
Execute o comando
brotlipara descompactar o arquivoout.br:brotli -d out.brA criação de um arquivo
outdescompactado com o conteúdo correto confirma que a compactação Brotli está ativada.
-
Etapa 5: Verificar a configuração por rota
-
Após a configuração na Etapa 4, a compactação é ativada para respostas em todos os caminhos. Defina o IP do gateway como variável de ambiente e execute os comandos a seguir:
export ASM_GATEWAY_IP=<your_gateway_ip> curl ${ASM_GATEWAY_IP}/helloworld > helloworld_no_compress.html curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/helloworld > helloworld_compress.html curl ${ASM_GATEWAY_IP}/productpage > productpage_no_compress.html curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/productpage > productpage_compress.html -
Execute o comando
lspara comparar os tamanhos das respostas desses dois caminhos antes e depois da compactação:ls -lh total 40 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 1.2K 5 28 18:17 productpage_compress.html -rw-r--r--@ 1 user staff 5.2K 5 28 18:16 productpage_no_compress.html -
No VirtualService, adicione um nome à rota helloworld. O arquivo
bookinfo.yamlmodificado fica assim: -
Adicione uma configuração por rota ao ASMCompressor e desative a compactação na rota helloworld. O ASMCompressor modificado fica assim:
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMCompressor metadata: name: ingressgateway-gzip namespace: istio-system spec: compressor_library: brotli: quality: 5 window_bits: 15 isGateway: true portNumber: 80 request_direction_config: # Disable request compression. common_config: enabled: default_value: false runtime_key: NOT_EXISTENT_KEY response_direction_config: common_config: content_type: - application/json - text/plain - text/html min_content_length: 100 disable_on_etag_header: true per_route_configs: # Added per-route configuration. - disabled: true route_match: vhost: route: name: helloworld-route # Enter the route name configured in the VirtualService here. workloadSelector: labels: istio: ingressgateway -
Execute o comando a seguir para verificar se a compactação está desativada para respostas do caminho
/helloworld:curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/helloworld > helloworld_route_disabled.html -
Execute o comando
lsnovamente para verificar o tamanho atual da resposta do caminho /helloworld.ls -lh total 48 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 324B 5 28 19:29 helloworld_route_disabled.html -rw-r--r--@ 1 user staff 1.3K 5 28 19:30 productpage_compress.html -rw-r--r--@ 1 user staff 5.2K 5 28 18:16 productpage_no_compress.htmlIsso confirma que as configurações de compactação no nível de rota funcionam conforme esperado.