All Products
Search
Document Center

Microservices Engine:Peluncuran kanari ujung ke ujung dengan Spring Cloud Gateway atau Zuul yang dikelola sendiri

Last Updated:Jun 21, 2026

Spring Cloud Gateway dan Zuul adalah gateway API umum dalam arsitektur layanan mikro yang mendukung penerusan rute dan pemrosesan filter. Anda dapat mengonfigurasi aturan routing untuk mengarahkan permintaan ke lingkungan kanari guna memvalidasi dan menguji versi kanari. Fitur peluncuran kanari ujung ke ujung di Microservices Engine (MSE) memungkinkan Anda menerapkan pembatasan kecepatan trafik ujung ke ujung tanpa mengubah kode bisnis Anda. Topik ini menjelaskan cara mengonfigurasi gateway Spring Cloud Gateway atau Zuul untuk mengaktifkan peluncuran kanari ujung ke ujung.

Prasyarat

Latar Belakang

Topik ini menunjukkan cara menggunakan MSE untuk peluncuran kanari ujung ke ujung dengan mensimulasikan rantai panggilan layanan dunia nyata. Anda dapat menerapkan fitur ini tanpa mengubah kode aplikasi Anda. Cukup konfigurasikan aturan trafik untuk aplikasi ingress. MSE kemudian menyebarkan tag ini sepanjang rantai panggilan layanan. Selama setiap panggilan layanan, MSE secara preferensial mengarahkan trafik yang sesuai dengan kondisi kanari ke versi kanari yang sesuai. Jika versi kanari yang sesuai tidak tersedia, trafik tersebut secara otomatis dialihkan ke versi dasar (juga dikenal sebagai versi stabil).

Dalam contoh ini, empat aplikasi bisnis (spring-cloud-gateway, spring-cloud-a, spring-cloud-b, dan spring-cloud-c) serta Nacos Server yang berfungsi sebagai registri diterapkan. Rantai panggilan layanan adalah: spring-cloud-gateway->A->B->C.

Panggilan antar aplikasi mencakup panggilan layanan Spring Cloud dan Dubbo.

Peluncuran kanari ujung ke ujung menggunakan Tanda Lalu Lintas untuk secara preferensial mengarahkan trafik kanari ke node kanari. Hal ini memungkinkan Anda melakukan validasi kanari terkendali dan memastikan stabilitas sistem.

Validasi peluncuran kanari ujung ke ujung biasanya menggunakan strategi berikut:

  • Mengarahkan persentase kecil trafik produksi langsung ke versi kanari untuk pengujian.

  • Menyaring trafik produksi langsung berdasarkan aturan tertentu, seperti header atau cookie tertentu.

Topik ini menjelaskan cara mengonfigurasi kedua strategi tersebut untuk mendukung berbagai skenario rilis canary dalam arsitektur layanan mikro.

Langkah 1: Hubungkan aplikasi ke MSE

Hubungkan aplikasi layanan mikro dalam kluster Container Service for Kubernetes (ACK) ke Microservices Engine (MSE). Anda dapat memilih metode koneksi berdasarkan kebutuhan Anda. Untuk informasi selengkapnya, lihat Hubungkan aplikasi layanan mikro dalam kluster ACK ke Microservices Engine (MSE).

Hubungkan berdasarkan namespace

  1. Login ke Konsol Microservices Engine (MSE) dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Di halaman Application list, klik ACK Application Access.

  4. Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Cluster type

    Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

    Catatan

    Jika Anda belum memberikan otorisasi kepada Container Service untuk mengakses Microservice Engine (MSE), klik Authorize.

    Cluster Name/ID

    Pilih Cluster Name/ID dari kluster target. Anda dapat mencari berdasarkan kata kunci.

    ack-onepilot

    Menampilkan status koneksi komponen ack-onepilot. Untuk informasi selengkapnya tentang komponen ack-onepilot dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen Microservice Engine (MSE).

    • Jika ack-onepilot belum diinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster ACK. Muncul pesan yang menunjukkan bahwa instalasi memerlukan waktu sekitar satu menit.

      Jika Anda menggunakan RAM user dan menerima error izin, login ke Konsol Container Service for Kubernetes, buka kluster target, klik Component Management, temukan ack-onepilot, lalu klik Install.

    • Jika ack-onepilot sudah diinstal, konsol menampilkan statusnya sebagai "Installed" diikuti nomor versi, misalnya Installed 4.2.0.

    Catatan
    • Langkah ini menghubungkan komponen ack-onepilot. Untuk melihat detailnya, login ke Konsol Container Service for Kubernetes, navigasi ke kluster target, lalu pilih Operations & Maintenance > Component Management.

    • Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan probe, yang dapat meningkatkan waktu startup aplikasi hingga 10 detik.

    • Saat Anda menghubungkan aplikasi menggunakan metode berbasis namespace, jika kluster target tidak berada di salah satu wilayah berikut, pastikan kluster dapat mengakses jaringan publik dan terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Tiongkok (Shanghai-Finance), Tiongkok (Shenzhen), Tiongkok (Hong Kong), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

    Access Type

    Pilih Namespace Access.

    Cluster Namespace

    Pilih Cluster Namespace.

    Microservices Governance Namespace

    Pilih Microservices Governance Namespace.

Hubungkan berdasarkan aplikasi tunggal

  1. Login ke Konsol Microservices Engine (MSE) dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Di halaman Application list, klik ACK Application Access.

  4. Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Cluster type

    Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

    Catatan

    Jika Anda belum memberikan otorisasi kepada Container Service untuk mengakses Microservice Engine (MSE), klik Authorize.

    Cluster Name/ID

    Pilih Cluster Name/ID dari kluster target. Anda dapat mencari berdasarkan kata kunci.

    ack-onepilot

    Menampilkan status koneksi komponen ack-onepilot. Untuk informasi selengkapnya tentang komponen ack-onepilot dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen Microservice Engine (MSE).

    • Jika ack-onepilot belum diinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster ACK. Muncul pesan yang menunjukkan bahwa instalasi memerlukan waktu sekitar satu menit.

      Jika Anda menggunakan RAM user dan menerima error izin, login ke Konsol Container Service for Kubernetes, buka kluster target, klik Component Management, temukan ack-onepilot, lalu klik Install.

    • Jika ack-onepilot sudah diinstal, konsol menampilkan statusnya sebagai "Installed" diikuti nomor versi, misalnya Installed 4.2.0.

    Catatan
    • Langkah ini menghubungkan komponen ack-onepilot. Untuk melihat detailnya, login ke Konsol Container Service for Kubernetes, navigasi ke kluster target, lalu pilih Operations & Maintenance > Component Management.

    • Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan probe, yang dapat meningkatkan waktu startup aplikasi hingga 10 detik.

    • Saat Anda menghubungkan aplikasi menggunakan metode berbasis namespace, jika kluster target tidak berada di salah satu wilayah berikut, pastikan kluster dapat mengakses jaringan publik dan terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Tiongkok (Shanghai-Finance), Tiongkok (Shenzhen), Tiongkok (Hong Kong), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

    Access Type

    Pilih Single Application Access.

    Access Procedure

    Ikuti langkah-langkah yang disediakan.

    Langkah 1: Buka halaman Workloads > Deployments kluster dan beralih ke namespace aplikasi.

    Langkah 2: Temukan aplikasi target dan klik View YAML.

    Langkah 3: Edit label dengan format berikut dan klik Update.

    spec:
      template:
        metadata:
          labels:
            # Setel ke "on" untuk mengaktifkan koneksi. Nilai harus diapit tanda kutip ganda.
            msePilotAutoEnable: "on"
            # Tentukan namespace governance. Jika namespace tidak ada, akan dibuat secara otomatis.
            mseNamespace: default
            # Tentukan nama aplikasi untuk terhubung ke MSE. Nama harus diapit tanda kutip ganda.
            msePilotCreateAppName: "your-deployment-name"

Langkah 2: Terapkan aplikasi

  1. Login ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi kiri, pilih Clusters.

  2. Di halaman Clusters, klik kluster target Anda. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, pilih Namespaces lalu klik Create from YAML.

    Contoh ini menerapkan Nacos Server sebagai registri, bersama dengan empat aplikasi bisnis: spring-cloud-gateway, spring-cloud-a, spring-cloud-b, dan spring-cloud-c. Anda juga dapat memperoleh kode sumber dari Demo.

    • YAML untuk Nacos Server (registri)

      View YAML file

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nacos-server
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nacos-server
        template:
          metadata:
            labels:
              msePilotAutoEnable: "off"
              app: nacos-server
          spec:
            containers:
              - name: nacos-server
                image: 'registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/nacos-server:v2.1.2'
                env:
                  - name: MODE
                    value: standalone
                  - name: JVM_XMS
                    value: 512M
                  - name: JVM_XMX
                    value: 512M
                  - name: JVM_XMN
                    value: 256M
                imagePullPolicy: Always
                livenessProbe:
                  failureThreshold: 3
                  initialDelaySeconds: 15
                  periodSeconds: 10
                  successThreshold: 1
                  tcpSocket:
                    port: 8848
                  timeoutSeconds: 3
                readinessProbe:
                  failureThreshold: 5
                  initialDelaySeconds: 15
                  periodSeconds: 15
                  successThreshold: 1
                  tcpSocket:
                    port: 8848
                  timeoutSeconds: 3
                resources:
                  requests:
                    cpu: '1'
                    memory: 2Gi
            dnsPolicy: ClusterFirst
            restartPolicy: Always
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nacos-server
      spec:
        type: ClusterIP
        ports:
          - name: nacos-server-8848-8848
            port: 8848
            protocol: TCP
            targetPort: 8848
          - name: nacos-server-9848-9848
            port: 9848
            protocol: TCP
            targetPort: 9848
        selector:
          app: nacos-server
    • YAML untuk aplikasi spring-cloud-c

      View YAML file

      # Source: mse-simple-demo/templates/spring-cloud-c-deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-c
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: spring-cloud-c
        template:
          metadata:
            labels:
              msePilotAutoEnable: "on"
              msePilotCreateAppName: "spring-cloud-c"
              app: "spring-cloud-c"
          spec:
            containers:
              - name: spring-cloud-c
                image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1"
                imagePullPolicy: Always
                env:
                  - name: nacos.host
                    value: "nacos-server"
                  - name: nacos.namespace
                    value: "public"
                resources:
                  requests:
                    cpu: 1
                    memory: 2Gi
                  limits:
                    cpu: 1
                    memory: 2Gi
                ports:
                - name: http-port
                  containerPort: 20003
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                  - podAffinityTerm:
                      topologyKey: failure-domain.beta.kubernetes.io/zone
                    weight: 50
                  - podAffinityTerm:
                      topologyKey: kubernetes.io/hostname
                    weight: 100
    • YAML untuk aplikasi spring-cloud-b

      View YAML file

      # Source: mse-simple-demo/templates/spring-cloud-b-deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-b
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: spring-cloud-b
        template:
          metadata:
            labels:
              msePilotAutoEnable: "on"
              msePilotCreateAppName: "spring-cloud-b"
              app: "spring-cloud-b"
          spec:
            containers:
              - name: spring-cloud-b
                image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1"
                imagePullPolicy: Always
                env:
                  - name: nacos.host
                    value: "nacos-server"
                  - name: nacos.namespace
                    value: "public"
                resources:
                  requests:
                    cpu: 1
                    memory: 2Gi
                  limits:
                    cpu: 1
                    memory: 2Gi
                ports:
                  - name: http-port
                    containerPort: 20002
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                  - podAffinityTerm:
                      topologyKey: failure-domain.beta.kubernetes.io/zone
                    weight: 50
                  - podAffinityTerm:
                      topologyKey: kubernetes.io/hostname
                    weight: 100
    • YAML untuk aplikasi spring-cloud-a

      View YAML file

      # Source: mse-simple-demo/templates/spring-cloud-a-deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-a
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: spring-cloud-a
        template:
          metadata:
            labels:
              msePilotAutoEnable: "on"
              msePilotCreateAppName: "spring-cloud-a"
              app: "spring-cloud-a"
          spec:
            containers:
              - name: spring-cloud-a
                image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1"
                imagePullPolicy: Always
                env:
                  - name: nacos.host
                    value: "nacos-server"
                  - name: nacos.namespace
                    value: "public"
                resources:
                  requests:
                    cpu: 1
                    memory: 2Gi
                  limits:
                    cpu: 1
                    memory: 2Gi
                ports:
                  - name: http-port
                    containerPort: 20001
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                  - podAffinityTerm:
                      topologyKey: failure-domain.beta.kubernetes.io/zone
                    weight: 50
                  - podAffinityTerm:
                      topologyKey: kubernetes.io/hostname
                    weight: 100
    • YAML untuk aplikasi spring-cloud-gateway

      View YAML file

      # Source: mse-simple-demo/templates/spring-cloud-gateway-deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-gateway
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: spring-cloud-gateway
        template:
          metadata:
            labels:
              msePilotAutoEnable: "on"
              msePilotCreateAppName: "spring-cloud-gateway"
              app: spring-cloud-gateway
          spec:
            containers:
              - image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-gateway:3.0.1"
                imagePullPolicy: Always
                env:
                  - name: nacos.host
                    value: "nacos-server"
                  - name: nacos.namespace
                    value: "public"
                  - name: enable.auto
                    value: "true"
                  - name: enable.rpc.invoke
                    value: "true"
                  - name: enable.sql
                    value: "false"
                  - name: enable.sentinel.demo.flow
                    value: "true"
                name: "spring-cloud-gateway"
                resources:
                  requests:
                    cpu: 1
                    memory: 2Gi
                  limits:
                    cpu: 1
                    memory: 2Gi
                ports:
                  - containerPort: 20000
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                  - podAffinityTerm:
                      topologyKey: failure-domain.beta.kubernetes.io/zone
                    weight: 50
                  - podAffinityTerm:
                      topologyKey: kubernetes.io/hostname
                    weight: 100
      ---
      # Source: mse-simple-demo/templates/spring-cloud-gateway-service.yaml
      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
          service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
        name: spring-cloud-gateway-slb
      spec:
        ports:
          - port: 80
            protocol: TCP
            targetPort: 20000
        selector:
          app: spring-cloud-gateway
        type: LoadBalancer

    Jalankan perintah berikut untuk memeriksa status penerapan:

    kubectl get svc,deploy

    Output yang diharapkan:

    NAME                               TYPE           CLUSTER-IP   EXTERNAL-IP  PORT(S)             AGE
    service/kubernetes                 ClusterIP      172.16.x.x   <none>       443/TCP             23h
    service/nacos-server               ClusterIP      172.16.x.x   <none>       8848/TCP,9848/TCP   94s
    service/spring-cloud-gateway-slb   LoadBalancer   172.16.x.x   8.130.x.x    80:32641/TCP        57s
    NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/nacos-server           1/1     1            1           94s
    deployment.apps/spring-cloud-a         1/1     1            1           66s
    deployment.apps/spring-cloud-b         1/1     1            1           74s
    deployment.apps/spring-cloud-c         1/1     1            1           83s
    deployment.apps/spring-cloud-gateway   1/1     1            1           57s

Langkah 3: Terapkan versi kanari spring-cloud-c dan spring-cloud-a

  1. Login ke Konsol ACK. Gunakan YAML berikut untuk menerapkan versi kanari aplikasi spring-cloud-c:

    File YAML

    # Source: mse-simple-demo/templates/spring-cloud-c-gray-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-c-gray
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: spring-cloud-c-gray
          version: gray
      template:
        metadata:
          labels:
            msePilotAutoEnable: "on"
            msePilotCreateAppName: "spring-cloud-c"
            alicloud.service.tag: gray
            app: "spring-cloud-c-gray"
            version: gray
        spec:
          containers:
            - name: spring-cloud-c
              image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1"
              imagePullPolicy: Always
              env:
                - name: nacos.host
                  value: "nacos-server"
                - name: nacos.namespace
                  value: "public"
              resources:
                requests:
                  cpu: 1
                  memory: 2Gi
                limits:
                  cpu: 1
                  memory: 2Gi
              ports:
                - name: http-port
                  containerPort: 20002
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - podAffinityTerm:
                    topologyKey: failure-domain.beta.kubernetes.io/zone
                  weight: 50
                - podAffinityTerm:
                    topologyKey: kubernetes.io/hostname
                  weight: 100
  2. Gunakan YAML berikut untuk menerapkan versi kanari aplikasi spring-cloud-a:

    File YAML

    # Source: mse-simple-demo/templates/spring-cloud-a-gray-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-a-gray
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: spring-cloud-a-gray
          version: gray
      template:
        metadata:
          labels:
            msePilotAutoEnable: "on"
            msePilotCreateAppName: "spring-cloud-a"
            alicloud.service.tag: gray
            app: "spring-cloud-a-gray"
            version: gray
        spec:
          containers:
            - name: spring-cloud-a
              image: "registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1"
              imagePullPolicy: Always
              env:
                - name: nacos.host
                  value: "nacos-server"
                - name: nacos.namespace
                  value: "public"
              resources:
                requests:
                  cpu: 1
                  memory: 2Gi
                limits:
                  cpu: 1
                  memory: 2Gi
              ports:
                - name: http-port
                  containerPort: 20001
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - podAffinityTerm:
                    topologyKey: failure-domain.beta.kubernetes.io/zone
                  weight: 50
                - podAffinityTerm:
                    topologyKey: kubernetes.io/hostname
                  weight: 100

Langkah 4: Buat grup jalur kanari

  1. Login ke Konsol MSE Governance Center dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih .

  3. Di halaman End-to-end Canary Release, pilih namespace layanan mikro di bagian atas halaman. Jika tidak ada grup jalur di namespace layanan mikro yang dipilih, klik Create Lane Group and Lane. Jika grup jalur sudah ada, klik + Create Lane Group.

  4. Di panel Create Lane Group, klik + Create Lane Group. Di halaman Create Lane Group, konfigurasikan parameter berikut lalu klik OK.

    Parameter

    Deskripsi

    Lane group name

    Masukkan nama kustom untuk grup jalur.

    Ingress type

    Pilih java service gateway.

    ingress application

    Pilih spring-cloud-gateway.

    lane group application

    Pilih spring-cloud-a, spring-cloud-b, dan spring-cloud-c.

    Setelah grup jalur dibuat, Anda dapat melihatnya di bagian lane group pada halaman End-to-end Canary Release. Untuk mengedit grup jalur, klik ikon 编辑.

Langkah 5: Buat jalur kanari

Catatan
  • Untuk menggunakan fitur peluncuran kanari ujung ke ujung, tambahkan tag khusus ke aplikasi kanari Anda untuk membedakannya dari node lain. Di lingkungan kontainer, tambahkan alicloud.service.tag: ${tag} di bawah spec.template.metadata.labels. Di lingkungan ECS, tambahkan parameter startup Java -Dalicloud.service.tag=${tag}.

  • Jika Anda menggunakan gateway layanan mikro Java sebagai ingress untuk peluncuran kanari ujung ke ujung, MSE mendukung dua mode routing jalur.

    • Rilis canary berdasarkan konten: Mode ini direkomendasikan jika Anda dapat mengidentifikasi trafik kanari dari konten permintaan. Jika tidak, modifikasi sistem Anda untuk menyertakan pengenal unik dalam permintaan. Hal ini memastikan bahwa semua permintaan dalam satu sesi diarahkan secara konsisten.

    • Rilis canary berdasarkan rasio: Gunakan mode ini sebagai cadangan jika Anda tidak dapat mengidentifikasi trafik kanari dari konten permintaan dan tidak dapat memodifikasi sistem warisan. Kelemahannya adalah permintaan dari sumber yang sama mungkin diarahkan ke jalur yang berbeda, menghasilkan perilaku yang tidak konsisten.

  • Mode routing jalur harus konsisten di semua jalur dalam grup jalur. Anda hanya dapat menyesuaikan aturan routing gateway Path dan mode routing jalur saat membuat jalur pertama dalam grup.

  1. Di bagian bawah halaman End-to-end Canary Release, klik Click to Create First Split Lane. Jika jalur sudah ada di ruang layanan mikro yang dipilih, klik Create Lane.

  2. Di panel Create Lane, konfigurasikan parameter jalur dan klik OK.

Parameter

Deskripsi

Add node tag

Tambahkan tag secara manual ke node aplikasi kanari Anda untuk membedakannya dari node biasa.

Enter lane information

Lane Tag: Tag tujuan untuk trafik yang sesuai dengan aturan jalur.

Confirm Matching Relationship: Verifikasi bahwa jumlah node aplikasi dengan tag ini benar.

Configure routing and canary release rules

Tentukan aturan untuk mengarahkan trafik ke jalur ini.

  • Masukkan Path. Jika dibiarkan kosong, semua path akan dicocokkan.

  • Canary Release Mode: Pilih Canary Release by Ratio.

  • Traffic percentage: 30%.

Catatan

Anda juga dapat mengatur persentase trafik yang berbeda untuk setiap path gateway. Jika Anda menggunakan fitur ini, pastikan total persentase trafik untuk path yang sama di semua grup jalur tidak melebihi 100%.

Route by content

Parameter

Deskripsi

Add node tag

Tambahkan tag secara manual ke node aplikasi kanari Anda untuk membedakannya dari node biasa.

Enter lane information

Lane Tag: Tag tujuan untuk trafik yang sesuai dengan kondisi jalur ini. Contoh ini menetapkan tag jalur ke gray.

Confirm Matching Relationship: Verifikasi bahwa jumlah node aplikasi dengan tag ini benar.

Configure routing and canary release rules

Tentukan kondisi aturan routing.

  • Masukkan Path. Jika dibiarkan kosong, semua path akan dicocokkan.

  • Canary Release Mode: Pilih Canary Release by Content.

  • Canary Release Condition: Tambahkan aturan baru dan pilih Meet All Conditions.

    Contoh ini menetapkan kondisi untuk mengarahkan permintaan di mana parameter name memiliki nilai xiaoming.

    • Parameter Type: Parameter

    • Parameter: name

    • Condition: ==

    • Value: xiaoming

Route by ratio
Penting

Pastikan agen Java MSE versi 3.2.3 atau lebih baru. Jika tidak, rilis canary berbasis persentase mungkin tidak berfungsi dengan benar.

Parameter

Deskripsi

Add node tag

Tambahkan tag secara manual ke node aplikasi kanari Anda untuk membedakannya dari node biasa.

Enter lane information

Lane Tag: Tag tujuan untuk trafik yang sesuai dengan kondisi jalur ini. Contoh ini menetapkan tag jalur ke gray.

Confirm Matching Relationship: Verifikasi bahwa jumlah node aplikasi dengan tag ini benar.

Configure routing and canary release rules

Tentukan kondisi aturan routing.

  • Masukkan Path. Jika dibiarkan kosong, semua path akan dicocokkan.

  • Canary Release Mode: Pilih Canary Release by Ratio.

  • Traffic percentage: 30%.

Setelah membuat jalur, Anda dapat melihat detailnya di bagian Traffic Distribution pada halaman End-to-end Canary Release dan melakukan tindakan berikut:

  • Di kolom Actions, klik Enable. Ini mengaktifkan jalur dan mengarahkan trafik sesuai aturannya. Trafik yang sesuai aturan secara preferensial diarahkan ke versi aplikasi dengan tag jalur yang sesuai. Jika versi tersebut tidak tersedia, trafik diarahkan ke versi aplikasi tanpa tag.

  • Di kolom Actions, klik Close. Ini menonaktifkan jalur, dan trafik selanjutnya diarahkan ke versi aplikasi tanpa tag.

  • Klik ikon 图标 untuk melihat persentase trafik untuk jalur tersebut.

  • Klik ikon 应用状态图标 untuk mengatur status aplikasi dalam jalur tersebut.

Langkah 6: Uji trafik dasar dan kanari

Berdasarkan konten permintaan
  1. Jalankan perintah curl berikut untuk menguji trafik dasar:

    curl 8.130.x.x/A/a
    A[192.168.x.x][config=base] -> B[192.168.x.x] -> C[192.168.x.x]
    Catatan

    Dalam perintah tersebut, 8.130.x.x adalah Alamat IP publik yang diekspos oleh Spring Cloud Gateway.

  2. Jalankan perintah curl berikut untuk menguji trafik kanari:

    curl 8.130.x.x/A/a?name=xiaoming
    Agray[192.168.x.x][config=base] -> B[192.168.x.x] -> Cgray[192.168.x.x]
    Catatan
    • Saat permintaan menyertakan parameter name=xiaoming, permintaan tersebut cocok dengan tag kanari, yang kemudian disebarkan ke downstream.

    • Misalnya, permintaan dengan tag kanari yang dikirim ke aplikasi A dan C diarahkan ke node kanari untuk aplikasi A dan C.

    • Saat permintaan mencapai aplikasi B, permintaan tersebut diarahkan ke node dasar karena node kanari untuk aplikasi B tidak tersedia.

Berdasarkan rasio

Untuk menguji pemisahan trafik berdasarkan rasio, gunakan skrip Python 3 berikut. Pastikan paket requests telah diinstal dan ganti x.x.x.x dengan alamat SLB ingress untuk Spring Cloud Gateway Anda.

# pip3 install requests
# python3 traffic.py
import requests
TOTAL_REQUEST = 100
ENTRY_URL = 'http://x.x.x.x/A/a'
def parse_tag(text:str):
    '''
    A[10.0.23.64][config=base] -> B[10.0.23.65] -> C[10.0.23.61]
    Agray[10.0.23.64][config=base] -> B[10.0.23.65] -> Cgray[10.0.23.61]
    Ablue[10.0.23.64][config=base] -> B[10.0.23.65] -> Cblue[10.0.23.61]
    '''
    print(text)
    app_parts = text.split(' -> ')
    # tag_app: C[10.0.23.61] / Cgray[10.0.23.61]
    tag_app = app_parts[-1]
    splits = tag_app.split('[')
    # tag_part: C / Cgray
    tag_part = splits[0]
    tag = tag_part[1:]
    return tag if len(tag) > 0 else 'base'
def get_tag(url:str):
    resp = requests.get(url)
    resp.encoding = resp.apparent_encoding
    return parse_tag(resp.text)
def cal_tag_count(url:str, total_request:int):
    count_map = {}
    for i in range(total_request):
        tag = get_tag(url)
        if tag not in count_map:
            count_map[tag] = 1
        else:
            count_map[tag] += 1
    print()
    print('Total Request:', total_request)
    print('Traffic Distribution:', count_map)
if __name__ == '__main__':
    cal_tag_count(ENTRY_URL, TOTAL_REQUEST)

Setelah menjalankan skrip, output menunjukkan sekitar 30% trafik diarahkan ke lingkungan kanari.

Langkah 7: Observabilitas

Jika terjadi masalah aplikasi, gunakan observabilitas MSE untuk melihat data pengecualian dan cepat menemukan masalahnya.

Observabilitas Governance Layanan Mikro

Di halaman End-to-end Canary Release MSE Microservices Governance, klik aplikasi target. Bagian Application QPS Monitoring menampilkan data trafik untuk versi dasar dan kanari dari jalur yang sesuai.

image

  • Total QPS: Total permintaan per detik (QPS) untuk aplikasi.

  • Exception QPS: Jumlah permintaan gagal untuk aplikasi.

  • Canary QPS: Permintaan per detik (QPS) untuk versi kanari aplikasi.

Dokumen terkait