Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Improving control plane push efficiency with adaptive xds optimization

Dernière mise à jour :Aug 11, 2026

Si votre plan de contrôle transmet inefficacement de grands volumes de configurations non pertinentes, utilisez la fonctionnalité d'optimisation xds adaptative pour améliorer l'efficacité des pushes. Cette fonctionnalité analyse les relations d'appel entre les services afin de générer automatiquement des ressources sidecar optimisées. Elle ne pousse ensuite que les configurations nécessaires vers les services requis, ce qui réduit le trafic réseau et améliore les performances ainsi que la réactivité de votre maillage de services.

Important
  • Pour activer l'optimisation xds adaptative, votre instance ASM doit être en version 1.15.3.63 ou ultérieure. Pour plus d'informations sur la mise à niveau d'une instance, consultez Mettre à niveau une instance ASM.

  • La fonctionnalité d'optimisation xds adaptative prend uniquement en charge les services utilisant le protocole HTTP.

Contexte

Par défaut, le maillage de services ne peut pas déterminer les dépendances d'appel entre les services. Par conséquent, la configuration sidecar stocke des informations sur tous les services du plan de données. Chaque modification apportée au plan de contrôle ou au plan de données, telle que la création d'une nouvelle règle de service virtuel dans le plan de contrôle, amène le plan de contrôle à pousser de nouvelles configurations vers tous les sidecars du plan de données.

Pour résoudre ce problème, activez la fonctionnalité d'optimisation xds adaptative afin de créer automatiquement des ressources sidecar qui optimisent les pushes de configuration. Une fois cette fonctionnalité activée, une passerelle de sortie nommée istio-axds-egressgateway est déployée dans le cluster. Tout le trafic HTTP initial est dirigé vers cette passerelle de sortie, qui analyse automatiquement les dépendances des services en se basant sur les journaux d'accès. Ce processus est entièrement automatique. Pour plus d'informations sur les effets de l'optimisation liés à l'application de ressources sidecar, consultez Optimisation des pushes de configuration avec des ressources sidecar.

Prérequis

Étape 1 : Activer l'optimisation xds adaptative

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez 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, sélectionnez Mesh Optimization Center > Adaptive xds optimization.

  3. Sur la page Adaptive xds optimization, activez le commutateur Enable adaptive xds optimization. Dans la boîte de dialogue Confirm, cliquez sur OK.

    Après avoir cliqué sur OK, l'état Updating s'affiche sous le commutateur Enable adaptive xds optimization. Une fois la mise à jour terminée, le commutateur Enable adaptive xds optimization est activé et une liste des namespaces pouvant être optimisés de manière adaptative s'affiche en dessous.

Étape 2 : Activer l'optimisation du namespace

Lorsque vous activez l'optimisation xds adaptative pour un namespace, la fonctionnalité optimise automatiquement tous les services qu'il contient en utilisant des ressources sidecar. Vous pouvez également activer cette fonctionnalité pour un service spécifique en ajoutant l'annotation asm.alibabacloud.com/asm-adaptive-xds: true aux annotations du service.

  1. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Optimization Center > Adaptive xds optimization.

  2. Sur la page Adaptive xds optimization, dans la liste Select namespaces to be optimized, activez le commutateur situé à côté du namespace du service cible. Cet exemple utilise le namespace default. Dans la boîte de dialogue Confirm, cliquez sur OK.

  3. Sur la page de détails de l'instance ASM, sélectionnez Traffic Management Center > Sidecar Traffic Configuration dans le volet de navigation de gauche.

  4. Sur la page Sidecar Traffic Configuration, consultez les détails des ressources sidecar.

    Vous pouvez voir des ressources sidecar créées automatiquement dont les noms commencent par axds. Chaque ressource sidecar correspond à un service de l'application Bookinfo que vous avez déployée dans le cadre des prérequis. La page affiche quatre ressources sidecar : axds-details (étendue app:details), axds-productpage (étendue app:productpage), axds-ratings (étendue app:ratings) et axds-reviews (étendue app:reviews). La source de toutes les ressources est System et le namespace est default.

Étape 3 : Déclencher l'optimisation

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

  2. Dans la barre d'adresse de votre navigateur, saisissez http://{IP address of the ingress gateway}/productpage pour accéder à l'application Bookinfo.

    Remplacez {IP address of the ingress gateway} par l'adresse IP obtenue à l'étape précédente.

  3. Vérifiez la ressource sidecar optimisée de manière adaptative.

    1. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > Sidecar Traffic Configuration.

    2. Sur la page Sidecar Traffic Configuration, recherchez la ressource axds-productpage et cliquez sur View YAML dans la colonne Actions. Voici un exemple.

      apiVersion: networking.istio.io/v1beta1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: productpage.default.svc.cluster.local
        creationTimestamp: '2024-01-05T07:52:56Z'
        generation: 4
        labels:
          asm-adaptive-xds-system: 'true'
          asm-system: 'true'
          provider: asm
        name: axds-productpage
        namespace: default
        resourceVersion: '23688435'
        uid: 753e3603-6bee-4dd1-b1fc-2e735a88****
      spec:
        egress:
          - hosts:
              - arms-prom/*
              - default/details.default.svc.cluster.local
              - default/kubernetes.default.svc.cluster.local
              - default/reviews.default.svc.cluster.local
              - istio-system/*
              - kube-system/*
        workloadSelector:
          labels:
            app: productpage

      Vous constatez qu'après avoir accédé à l'application Bookinfo, la ressource Sidecar axds-productpage, générée pour optimiser le service productpage, a automatiquement ajouté les services details et reviews dont dépend le service productpage, sans nécessiter de configuration manuelle.

Optimisation xds adaptative : comparaison des performances

Les tests suivants comparent les performances du plan de contrôle et du plan de données dans le namespace asm-perf selon deux scénarios : avec l'optimisation xds adaptative désactivée et avec celle-ci activée.

  • Mise à l'échelle horizontale d'une charge de travail : augmentation du déploiement httpbin de 2 à 400 réplicas.

  • Génération de trafic de test : envoi de requêtes aléatoires depuis l'application sleep vers différentes applications httpbin pour déclencher un nouveau push de configuration adaptative.

  • Redémarrage d'une charge de travail : déclenchement d'un redéploiement de l'application httpbin pour simuler des scénarios de mise à l'échelle et de mise à jour des charges de travail.

Étape 1 : Préparer l'environnement

  1. Clonez le dépôt de scripts d'exemple.

    git clone https://github.com/AliyunContainerService/asm-labs.git && \
      cd asm-labs/asm-perf/adativexds
  2. Configurez l'environnement de test.

    bash run.sh -s

    Cette commande crée les ressources suivantes dans votre cluster :

    • Le namespace asm-perf.

    • Les charges de travail prometheus et grafana pour la surveillance.

    • Une application sleep et une application httpbin avec deux réplicas pour recevoir les pushes de configuration.

    Exécutez la commande suivante pour transférer un port vers le tableau de bord de surveillance. Vous pouvez ensuite accéder au tableau de bord en visitant localhost:3000.

    kubectl port-forward svc/grafana -n asm-perf 3000

Étape 2 : Comparer les performances

  1. Effectuez une mise à l'échelle horizontale de la charge de travail.

    bash run.sh -su

    Attendez quelques instants, puis vérifiez le tableau de bord. Les résultats suivants sont attendus :

    Sans optimisation xds adaptative

    Utilisation du CPU de l'application Sleep

    image.png

    Utilisation de la mémoire de l'application Sleep

    image.png

    Bande passante réseau de l'application Sleep

    image.png

    Trafic du plan de contrôle
    1. Sur la page Base Information de l'instance ASM, notez l'ID CLB associé à CLB Instance for Exposing Istio Pilot.

    2. Connectez-vous à la console Classic Load Balancer (CLB). Cliquez sur l'icône Monitoring du CLB correspondant, sélectionnez Listener > Bandwidth/Traffic et consultez le graphique Listener Traffic.

      image.png

    Lorsque les services du maillage changent, le plan de contrôle pousse de nouvelles configurations, ce qui engendre une certaine surcharge de performance.

    Avec optimisation xds adaptative

    Utilisation du CPU de l'application Sleep

    image.png

    Utilisation de la mémoire de l'application Sleep

    image.png

    Bande passante réseau de l'application Sleep

    image.png

    Trafic du plan de contrôle

    image.png

    Lorsque les services du maillage changent, le plan de contrôle pousse de nouvelles configurations, ce qui engendre une certaine surcharge de performance. Toutefois, l'impact sur les performances est moindre par rapport au scénario où l'optimisation xds adaptative est désactivée.

    Configuration des ressources sidecar
    1. Consultez la configuration active des ressources sidecar pour l'application sleep.

      kubectl get sidecar axds-sleep -n asm-perf -o yaml

      Résultat attendu :

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2025-04-03T03:09:42Z"
        generation: 2
        labels:
          asm-adaptive-xds-system: "true"
          asm-system: "true"
          provider: asm
        name: axds-sleep
        namespace: asm-perf
        resourceVersion: "14844729886"
        uid: 31dfc081-b0ec-403f-b420-91f3c3e5f8fb
      spec:
        egress:
        - hosts:
          - arms-prom/*
          - asm-perf/grafana.asm-perf.svc.cluster.local
          - default/kubernetes.default.svc.cluster.local
          - istio-system/*
          - kube-system/*
        workloadSelector:
          labels:
            app: sleep

      Le champ spec.egress.hosts répertorie plusieurs services. Cela signifie que seules les modifications apportées à ces services listés déclencheront un nouveau push de configuration vers l'application sleep. Pour plus d'informations sur l'impact des ressources sidecar sur les performances, consultez Optimisation des pushes de configuration avec des ressources sidecar.

  2. Générez du trafic de test. Envoyez un total de 100 requêtes aléatoires depuis l'application sleep vers différentes applications httpbin.

    bash run.sh -t

    Une fois les requêtes terminées, vérifiez à nouveau le tableau de bord.

    Sans optimisation xds adaptative

    Utilisation du CPU de l'application Sleep

    image.png

    Utilisation de la mémoire de l'application Sleep

    image

    Bande passante réseau de l'application Sleep

    image

    Trafic du plan de contrôle

    image

    Lorsque l'optimisation xds adaptative est désactivée, l'initiation du trafic depuis l'application sleep n'affecte pas la distribution des configurations, car chaque charge de travail possède déjà la configuration complète.

    Avec optimisation xds adaptative

    Utilisation du CPU de l'application Sleep

    image

    Utilisation de la mémoire de l'application Sleep

    image

    Bande passante réseau de l'application Sleep

    image

    Trafic du plan de contrôle

    image.png

    L'initiation du trafic depuis l'application sleep déclenche des pushes de configuration depuis le plan de contrôle.

    Configuration des ressources sidecar
    1. Consultez la configuration active des ressources sidecar pour l'application sleep.

      kubectl get sidecar axds-sleep -n asm-perf -o yaml

      Résultat attendu :

      Résultat attendu

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2025-04-03T05:26:00Z"
        generation: 90
        labels:
          asm-adaptive-xds-system: "true"
          asm-system: "true"
          provider: asm
        name: axds-sleep
        namespace: asm-perf
        resourceVersion: "14845598119"
        uid: a272cb0f-6e6a-492e-9ee1-b0d072813c19
      spec:
        egress:
        - hosts:
          - arms-prom/*
          - asm-perf/grafana.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v102.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v113.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v115.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v116.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v121.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v122.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v13.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v131.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v136.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v144.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v145.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v151.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v158.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v17.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v170.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v174.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v19.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v203.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v218.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v220.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v222.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v223.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v227.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v230.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v235.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v24.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v240.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v243.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v245.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v247.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v252.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v254.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v257.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v258.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v259.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v26.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v260.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v265.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v266.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v269.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v270.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v271.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v276.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v281.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v283.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v30.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v32.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v321.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v325.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v33.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v330.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v331.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v335.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v338.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v34.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v340.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v341.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v345.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v346.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v348.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v353.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v354.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v357.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v36.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v365.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v368.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v370.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v373.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v378.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v379.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v387.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v390.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v397.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v41.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v46.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v47.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v48.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v52.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v58.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v62.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v66.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v68.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v7.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v86.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v89.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v91.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v92.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v94.asm-perf.svc.cluster.local
          - default/kubernetes.default.svc.cluster.local
          - istio-system/*
          - kube-system/*
        workloadSelector:
          labels:
            app: sleep

      Le champ spec.egress.hosts répertorie plusieurs services. Cela signifie que seules les modifications apportées à ces services listés déclencheront un nouveau push de configuration vers l'application sleep. Pour plus d'informations sur l'impact des ressources sidecar sur les performances, consultez Optimisation des pushes de configuration avec des ressources sidecar.

  3. Redémarrez la charge de travail.

    bash run.sh -r

    Une fois toutes les charges de travail redémarrées, vérifiez les changements de trafic du plan de contrôle.

    Sans optimisation xds adaptative Trafic du plan de contrôle

    image

    Lorsque les services du maillage changent, le plan de contrôle pousse de nouvelles configurations, ce qui engendre une certaine surcharge de performance.

    Avec optimisation xds adaptative Trafic du plan de contrôle

    image

    Lors du redémarrage des charges de travail, le volume des pushes de configuration est considérablement réduit par rapport au scénario où l'optimisation xds adaptative est désactivée.

  4. Restaurez l'environnement de test.

    bash run.sh -sd

    Il faut environ deux minutes pour que les pods de l'application httpbin passent de 400 à 2 réplicas, ramenant ainsi l'environnement à son état initial.

Opérations connexes

Désactiver l'optimisation xds adaptative

  1. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Optimization Center > Adaptive xds optimization.

  2. Sur la page Adaptive xds optimization, désactivez le commutateur Enable adaptive xds optimization. Dans la boîte de dialogue Confirm, cliquez sur OK.

    Après avoir cliqué sur OK, l'état Updating s'affiche sous le commutateur Enable adaptive xds optimization. Une fois la mise à jour terminée, le commutateur Enable adaptive xds optimization est désactivé.

  3. Sur la page de détails de l'instance, dans le volet de navigation de gauche, sélectionnez Traffic Management Center > Sidecar Traffic Configuration.

    Les ressources sidecar créées par la fonctionnalité d'optimisation xds adaptative sont désormais supprimées.

Modifier la configuration de la passerelle de sortie

L'activation de l'optimisation xds adaptative déploie une passerelle de sortie nommée istio-axds-egressgateway dans votre cluster ACK. Cette passerelle est visible sur la page Network > Services de votre cluster cible dans la console ACK. Tout le trafic HTTP initial est dirigé vers cette passerelle de sortie, qui analyse automatiquement les dépendances des services à partir de ses journaux d'accès. Vous pouvez modifier la configuration de la passerelle de sortie pour gérer différentes charges de trafic selon vos besoins.

  1. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Optimization Center > Adaptive xds optimization.

  2. Sur la page Adaptive xds optimization, cliquez sur l'onglet Egress Gateway Configuration. Modifiez la configuration de la passerelle de sortie selon vos besoins, puis cliquez sur Update Settings.

    Après avoir cliqué sur Update Settings, le maillage de services passe brièvement en état de mise à jour. Une fois la mise à jour terminée, la passerelle de sortie est mise à jour avec la configuration spécifiée.

    Remarque

    ASM vous permet de modifier les paramètres de ressources de la passerelle de sortie, le nombre de réplicas de la passerelle, l'état de la mise à l'échelle automatique HPA, les seuils de surveillance des métriques HPA, ainsi que le nombre maximal et minimal de réplicas HPA.