Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configurar compactação HTTP com o ASMCompressor

Última atualização: Jun 28, 2026

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

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

  1. Obtenha o endereço do gateway de entrada.

    1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

    3. Na página Ingress Gateway, obtenha o Service address.

  2. Na barra de endereços do navegador, insira http://{ASM_GATEWAY_ADDRESS}/productpage para acessar a aplicação Bookinfo. Substitua {ASM_GATEWAY_ADDRESS} pelo endereço obtido.

  3. 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

  1. Crie um arquivo chamado ingressgateway-gzip.yaml com o seguinte conteúdo.

    Para obter uma descrição dos campos, consulte Referência do CRD ASMCompressor.

    ingressgateway-gzip.yaml

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMCompressor
    metadata:
      name: ingressgateway-gzip
      namespace: istio-system
    spec:
      compressor_library:
        gzip:
          compression_level: BEST_COMPRESSION
          compression_strategy: DEFAULT_STRATEGY
          memory_level: 9
          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:  # Enable response compression.
        common_config:
          content_type:
          - application/json
          - text/plain
          - text/html
          min_content_length: 100
        disable_on_etag_header: true
      workloadSelector:
        labels:
          istio: ingressgateway
  2. Execute o comando a seguir para ativar a compactação Gzip:

    kubectl apply -f ingressgateway-gzip.yaml

Etapa 3: Verificar a compactação Gzip

  1. Na barra de endereços do navegador, insira http://{ASM_GATEWAY_ADDRESS}/productpage para acessar a aplicação Bookinfo.

  2. 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

  1. Modifique o VirtualService bookinfo.

    1. Adicione o seguinte conteúdo abaixo de spec.http no 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: /helloworld

      O conteúdo YAML atualizado é o seguinte:

      Modified bookinfo.yaml

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: bookinfo
      spec:
        gateways:
          - bookinfo-gateway
        hosts:
          - '*'
        http:
          - 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: /helloworld
          - match:
              - uri:
                  exact: /productpage
              - uri:
                  prefix: /static
              - uri:
                  exact: /login
              - uri:
                  exact: /logout
              - uri:
                  prefix: /api/v1/products
            route:
              - destination:
                  host: productpage
                  port:
                    number: 9080
      
    2. Execute o comando a seguir para aplicar o VirtualService:

      kubectl apply -f bookinfo.yaml
  2. Ative a compactação Brotli.

    1. Crie um arquivo chamado ingressgateway-brotli.yaml com o seguinte conteúdo.

      Para obter uma descrição dos campos, consulte Referência do CRD ASMCompressor.

      ingressgateway-brotli.yaml

      apiVersion: istio.alibabacloud.com/v1beta1
      kind: ASMCompressor
      metadata:
        name: ingressgateway-brotli
        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
        workloadSelector:
          labels:
            istio: ingressgateway
    2. Execute o comando a seguir para ativar a compactação Brotli:

      kubectl apply -f ingressgateway-brotli.yaml
  3. Verifique se a compactação Brotli está ativada.

    1. Execute o comando a seguir para salvar a resposta do caminho /helloworld no arquivo out.br:

      curl -I  -H "Accept-Encoding: br" http://{ASM_GATEWAY_ADDRESS}/helloworld > out.br
    2. Instale o Brotli.

      • macOS: Execute o comando brew install brotli para instalar.

      • No Windows, consulte as instruções de instalação em brotli.

    3. Execute o comando brotli para descompactar o arquivo out.br:

      brotli -d out.br

      A criação de um arquivo out descompactado com o conteúdo correto confirma que a compactação Brotli está ativada.

Etapa 5: Verificar a configuração por rota

  1. 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
  2. Execute o comando ls para 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
  3. No VirtualService, adicione um nome à rota helloworld. O arquivo bookinfo.yaml modificado fica assim:

    Modified YAML

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      gateways:
        - bookinfo-gateway
      hosts:
        - '*'
      http:
        - 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: /helloworld
          name: helloworld-route    # Specify a route name so the compression filter can match it.
        - match:
            - uri:
                exact: /productpage
            - uri:
                prefix: /static
            - uri:
                exact: /login
            - uri:
                exact: /logout
            - uri:
                prefix: /api/v1/products
          route:
            - destination:
                host: productpage
                port:
                  number: 9080
  4. 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
  5. 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
  6. Execute o comando ls novamente 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.html

    Isso confirma que as configurações de compactação no nível de rota funcionam conforme esperado.