Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Configurer la compression HTTP avec ASMCompressor

Dernière mise à jour :Aug 11, 2026

Lorsque les microservices communiquent entre eux, les charges utiles des réponses peuvent consommer une bande passante considérable, en particulier pour le contenu textuel tel que JSON, HTML et CSS. ASMCompressor permet d'ajouter des filtres de compression au niveau du proxy afin que tous les services partagent une configuration de compression unique et cohérente, plutôt que d'implémenter la compression séparément dans chaque langage ou framework. Cette rubrique explique comment utiliser ASMCompressor dans ASM pour définir les paramètres de compression pour les appels interservices.

Prérequis

Présentation de la fonctionnalité

Le proxy prend en charge deux algorithmes de compression : Gzip et Brotli.

  • Gzip est un algorithme de compression largement utilisé, pris en charge par de nombreux serveurs web et navigateurs. Il se distingue par son taux de compression élevé et sa rapidité d'exécution. Il est généralement utilisé pour compresser à la fois le contenu statique et dynamique.

  • Brotli est un algorithme de compression avancé qui offre un taux de compression supérieur et une vitesse de décompression plus rapide. Il est couramment utilisé sur le web, notamment pour compresser le contenu statique tel que les fichiers HTML, CSS et JavaScript.

Bien que Brotli propose un taux de compression plus élevé que Gzip, sa vitesse de compression peut être plus lente.

Activer et vérifier la compression Gzip

Étape 1 : Enregistrer la taille de réponse de référence

  1. Obtenez l'adresse de la passerelle d'entrée.

    1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez Service Mesh > Mesh Management.

    2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez ASM Gateways > Ingress Gateway.

    3. Sur la page Ingress Gateway, récupérez l'Service address.

  2. Dans la barre d'adresse de votre navigateur, saisissez http://{ASM_GATEWAY_ADDRESS}/productpage pour accéder à l'application Bookinfo. Remplacez {ASM_GATEWAY_ADDRESS} par l'adresse obtenue.

  3. Ouvrez les outils de développement de votre navigateur et vérifiez la taille de la réponse pour la requête productpage.

    La taille de la réponse est de 5,5 Ko.

Étape 2 : Activer la compression Gzip****

  1. Créez un fichier nommé ingressgateway-gzip.yaml avec le contenu suivant.

    Pour une description des champs, consultez la rubrique Référence 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. Exécutez la commande suivante pour activer la compression Gzip :

    kubectl apply -f ingressgateway-gzip.yaml

Étape 3 : Vérifier la compression Gzip****

  1. Dans la barre d'adresse de votre navigateur, saisissez http://{ASM_GATEWAY_ADDRESS}/productpage pour accéder à l'application Bookinfo.

  2. Ouvrez les outils de développement de votre navigateur et vérifiez la taille de la réponse pour la requête productpage.

    La taille de la réponse passe de 5,5 Ko à 1,8 Ko. Cela confirme que la compression Gzip est activée.

Étape 4 : Vérifier la compression Brotli

  1. Modifiez le VirtualService bookinfo.

    1. Ajoutez le contenu suivant sous spec.http dans le fichier 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

      Le contenu YAML mis à jour est le suivant :

      bookinfo.yaml modifié

      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. Exécutez la commande suivante pour appliquer le VirtualService :

      kubectl apply -f bookinfo.yaml
  2. Activez la compression Brotli.

    1. Créez un fichier nommé ingressgateway-brotli.yaml avec le contenu suivant.

      Pour une description des champs, consultez la rubrique Référence 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. Exécutez la commande suivante pour activer la compression Brotli :

      kubectl apply -f ingressgateway-brotli.yaml
  3. Vérifiez que la compression Brotli est activée.

    1. Exécutez la commande suivante pour enregistrer la réponse du chemin /helloworld dans le fichier out.br :

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

      • macOS : Exécutez la commande brew install brotli pour l'installer.

      • Sous Windows, consultez les instructions d'installation sur la page brotli.

    3. Exécutez la commande brotli pour décompresser le fichier out.br :

      brotli -d out.br

      La création d'un fichier out décompressé au contenu correct confirme que la compression Brotli est activée.

Étape 5 : Vérifier la configuration par route

  1. Après la configuration effectuée à l'Étape 4, la compression est activée pour les réponses sur tous les chemins. Définissez l'adresse IP de la passerelle comme variable d'environnement et exécutez les commandes suivantes :

    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. Exécutez la commande ls pour comparer les tailles de réponse pour ces deux chemins avant et après la compression :

    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. Dans le VirtualService, ajoutez un nom à la route helloworld. Le fichier bookinfo.yaml modifié est le suivant :

    YAML modifié

    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. Ajoutez une configuration par route à l'ASMCompressor et désactivez la compression sur la route helloworld. L'ASMCompressor modifié est le suivant :

    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. Exécutez la commande suivante pour vérifier que la compression est désactivée pour les réponses du chemin /helloworld :

    curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/helloworld > helloworld_route_disabled.html
  6. Exécutez à nouveau la commande ls pour vérifier la taille actuelle de la réponse du chemin /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

    Cela confirme que les paramètres de compression au niveau de la route fonctionnent comme prévu.