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
Un cluster ACK a été ajouté à une instance ASM version 1.21 ou ultérieure. Pour plus d'informations, consultez les rubriques Ajouter un cluster à une instance ASM et Mettre à niveau une instance ASM.
L'exemple d'application Bookinfo est déployé sur l'instance ASM.
Les ressources Istio sont configurées pour router le trafic entre différentes versions de service.
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
-
Obtenez l'adresse de la passerelle d'entrée.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page Ingress Gateway, récupérez l'Service address.
Dans la barre d'adresse de votre navigateur, saisissez
http://{ASM_GATEWAY_ADDRESS}/productpagepour accéder à l'application Bookinfo. Remplacez {ASM_GATEWAY_ADDRESS} par l'adresse obtenue.-
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****
-
Créez un fichier nommé
ingressgateway-gzip.yamlavec le contenu suivant.Pour une description des champs, consultez la rubrique Référence CRD ASMCompressor.
-
Exécutez la commande suivante pour activer la compression Gzip :
kubectl apply -f ingressgateway-gzip.yaml
Étape 3 : Vérifier la compression Gzip****
Dans la barre d'adresse de votre navigateur, saisissez
http://{ASM_GATEWAY_ADDRESS}/productpagepour accéder à l'application Bookinfo.-
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
-
Modifiez le VirtualService
bookinfo.-
Ajoutez le contenu suivant sous
spec.httpdans 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: /helloworldLe contenu YAML mis à jour est le suivant :
-
Exécutez la commande suivante pour appliquer le VirtualService :
kubectl apply -f bookinfo.yaml
-
-
Activez la compression Brotli.
-
Créez un fichier nommé
ingressgateway-brotli.yamlavec le contenu suivant.Pour une description des champs, consultez la rubrique Référence CRD ASMCompressor.
-
Exécutez la commande suivante pour activer la compression Brotli :
kubectl apply -f ingressgateway-brotli.yaml
-
-
Vérifiez que la compression Brotli est activée.
-
Exécutez la commande suivante pour enregistrer la réponse du chemin
/helloworlddans le fichierout.br:curl -I -H "Accept-Encoding: br" http://{ASM_GATEWAY_ADDRESS}/helloworld > out.br -
Installez Brotli.
macOS : Exécutez la commande
brew install brotlipour l'installer.Sous Windows, consultez les instructions d'installation sur la page brotli.
-
Exécutez la commande
brotlipour décompresser le fichierout.br:brotli -d out.brLa création d'un fichier
outdécompressé au contenu correct confirme que la compression Brotli est activée.
-
Étape 5 : Vérifier la configuration par route
-
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 -
Exécutez la commande
lspour 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 -
Dans le VirtualService, ajoutez un nom à la route helloworld. Le fichier
bookinfo.yamlmodifié est le suivant : -
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 -
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 -
Exécutez à nouveau la commande
lspour 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.htmlCela confirme que les paramètres de compression au niveau de la route fonctionnent comme prévu.