All Products
Search
Document Center

Microservices Engine:Implementasi rilis canary end-to-end berdasarkan Spring Cloud atau Zuul gateways yang dikelola sendiri

Last Updated:Jul 06, 2025

Spring Cloud dan Zuul gateways adalah dua jenis API gateway umum dalam arsitektur layanan mikro. Gateway ini mendukung fitur seperti pengalihan rute dan pemrosesan filter. Anda dapat mengonfigurasi aturan routing untuk mengarahkan permintaan ke versi canary guna memverifikasi dan menguji versi tersebut. Microservices Engine (MSE) menyediakan kemampuan rilis canary end-to-end yang memungkinkan Anda menerapkan pembatasan lalu lintas tanpa perlu memodifikasi kode bisnis. Topik ini menjelaskan cara mengimplementasikan rilis canary end-to-end menggunakan Spring Cloud atau Zuul gateways.

Prasyarat

Informasi Latar Belakang

Topik ini menggunakan simulasi proses panggilan untuk menjelaskan cara mengimplementasikan rilis canary end-to-end pada aplikasi layanan mikro menggunakan MSE. Untuk mengimplementasikan rilis canary end-to-end, Anda hanya perlu mengonfigurasi aturan lalu lintas canary untuk aplikasi ingress tanpa modifikasi kode aplikasi. Dengan cara ini, lalu lintas yang memenuhi aturan tertentu langsung dilewatkan ke versi canary berdasarkan tag versi. Saat aplikasi dipanggil, lalu lintas yang memenuhi aturan lalu lintas canary diprioritaskan ke versi canary aplikasi tersebut. Jika aplikasi tidak memiliki versi canary, lalu lintas akan diarahkan ke versi dasar atau stabil aplikasi.

Dalam contoh ini, aplikasi bisnis berikut telah diterapkan: spring-cloud-gateway, spring-cloud-a, spring-cloud-b, dan spring-cloud-c. Aplikasi nacos-server digunakan sebagai registri. Aplikasi bisnis dipanggil dalam urutan berikut: spring-cloud-gateway -> spring-cloud-a -> spring-cloud-b -> spring-cloud-c.

Pemanggilan aplikasi mencakup pemanggilan layanan Spring Cloud dan layanan Dubbo.

Fitur rilis canary end-to-end menyediakan penandaan lalu lintas. Lalu lintas canary yang ditandai diprioritaskan dikirim ke node canary. Ini membantu Anda melakukan rilis canary secara terkendali dan memastikan stabilitas.

Kebijakan berikut umumnya digunakan untuk rilis canary end-to-end:

  • Sebagian kecil lalu lintas online ditandai dan dikirim ke node canary.

  • Lalu lintas online difilter berdasarkan aturan tertentu. Misalnya, lalu lintas dengan header atau cookie tertentu dikirim ke node canary.

Topik ini menjelaskan cara mengonfigurasi kebijakan di atas untuk memenuhi persyaratan rilis canary yang berbeda dari arsitektur layanan mikro.

Langkah 1: Aktifkan Tata Kelola Layanan Mikro untuk aplikasi

Aktifkan Tata Kelola Layanan Mikro untuk aplikasi layanan mikro di klaster ACK. Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Aktifkan Tata Kelola Layanan Mikro untuk Aplikasi Layanan Mikro di Klaster ACK.

Aktifkan Tata Kelola Layanan Mikro untuk aplikasi di namespace ACK

  1. Masuk ke Konsol 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. Dalam kotak dialog ACK Application Access, atur parameter yang diperlukan dan klik OK.

    image

    Parameter

    Deskripsi

    Cluster type

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

    Catatan

    Jika Anda belum memberikan izin kepada ACK untuk memanggil MSE, Anda perlu mengklik tautan untuk melakukan otorisasi.

    Cluster Name/ID

    Pilih Cluster Name/ID untuk mana Anda ingin mengaktifkan Tata Kelola Layanan Mikro. Anda dapat menggunakan kata kunci untuk mencari nama atau ID klaster.

    ack-onepilot

    Tampilkan status komponen ack-onepilot. Untuk informasi tentang komponen ack-onepilot dan cara memperbarui komponen ack-onepilot, lihat ack-onepilot dan Instal dan perbarui komponen Tata Kelola Layanan Mikro.

    • Jika komponen ack-onepilot belum diinstal, klik Click Install di sebelah kanan ack-onepilot. Setelah instalasi selesai, status komponen ack-onepilot ditampilkan sebagai Installed.

    • Jika Anda melakukan operasi sebagai pengguna RAM dan pesan ditampilkan, menunjukkan bahwa Anda tidak memiliki izin untuk melakukan operasi tersebut, Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons. Di halaman Add-ons, cari ack-onepilot dan klik Instal pada kartu sumber daya.

    Catatan
    • Pada langkah ini, komponen ack-onepilot terlibat. Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons untuk melihat detail komponen.

    • Setelah komponen ack-onepilot diinstal, agen secara otomatis disuntikkan. Dalam hal ini, waktu mulai aplikasi dapat bertambah hingga 10 detik.

    • Saat Anda mengaktifkan Tata Kelola Layanan Mikro untuk namespace klaster, jika klaster yang diinginkan tidak berada di wilayah berikut, Anda harus memastikan bahwa klaster dapat mengakses Internet dan terhubung ke acm.aliyun.com:8080: China (Qingdao), China (Hangzhou), China (Beijing), China (Shanghai), China East 2 Finance, China (Shenzhen), China (Hong Kong), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

    Access Type

    Pilih Namespace Access.

    ACK Cluster Namespace

    Pilih ACK Cluster Namespace.

    Microservices Governance Namespace

    Pilih Microservices Governance Namespace.

Aktifkan Tata Kelola Layanan Mikro untuk aplikasi

  1. Masuk ke Konsol 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.

    image

    Parameter

    Deskripsi

    Cluster type

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

    Catatan

    Jika Anda belum memberikan izin kepada ACK untuk memanggil MSE, Anda perlu mengklik tautan untuk melakukan otorisasi.

    Cluster Name/ID

    Pilih Cluster Name/ID untuk mana Anda ingin mengaktifkan Tata Kelola Layanan Mikro. Anda dapat menggunakan kata kunci untuk mencari nama atau ID klaster.

    ack-onepilot

    Tampilkan status komponen ack-onepilot. Untuk informasi tentang komponen ack-onepilot dan cara memperbarui komponen ack-onepilot, lihat ack-onepilot dan Instal dan perbarui komponen Tata Kelola Layanan Mikro.

    • Jika komponen ack-onepilot belum diinstal, klik Click Install di sebelah kanan ack-onepilot. Setelah instalasi selesai, status komponen ack-onepilot ditampilkan sebagai Installed.

    • Jika Anda melakukan operasi sebagai pengguna RAM dan pesan ditampilkan, menunjukkan bahwa Anda tidak memiliki izin untuk melakukan operasi tersebut, Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons. Di halaman Add-ons, cari ack-onepilot dan klik Instal pada kartu sumber daya.

    Catatan
    • Pada langkah ini, komponen ack-onepilot terlibat. Anda dapat masuk ke Konsol ACK, dan klik nama klaster. Di halaman yang muncul, pilih Operations > Add-ons untuk melihat detail komponen.

    • Setelah komponen ack-onepilot diinstal, agen secara otomatis disuntikkan. Dalam hal ini, waktu mulai aplikasi dapat bertambah hingga 10 detik.

    Access Type

    Pilih Single Application Access.

    Access Procedure

    Lakukan langkah-langkah berikut:

    Step 1: Go to the ACK console, and click the cluster name. In the left-side navigation pane of the page that appears, choose Workloads > Deployments. Then, select the namespace to which the application belongs.

    Step 2: Click the name of the application. On the page that appears, click View in YAML.

    Step 3: Edit labels in the following format and click Update.

    spec:
      template:
        metadata:
          labels:
            # Nilai on menunjukkan bahwa Tata Kelola Layanan Mikro diaktifkan. Nilai on harus diapit tanda kutip ganda (").
            msePilotAutoEnable: "on"
            # Namespace MSE mikroservis tempat aplikasi Anda berada. Jika namespace yang Anda tentukan tidak ada, namespace dengan nama yang ditentukan akan dibuat secara otomatis.
            mseNamespace: 202401
            # Nama sebenarnya dari aplikasi tempat Tata Kelola Layanan Mikro diaktifkan. Nama tersebut harus diapit tanda kutip ganda (").
            msePilotCreateAppName: "your-deployment-name"

Langkah 2: Terapkan aplikasi untuk simulasi

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, pilih namespace, dan klik Create from YAML.

    Dalam contoh ini, aplikasi nacos-server diterapkan sebagai registri, dan spring-cloud-gateway, spring-cloud-a, spring-cloud-b, serta spring-cloud-c diterapkan sebagai aplikasi bisnis. Anda dapat memperoleh kode sumber demo ini dari alibabacloud-microservice-demo.

    • Kode Yet Another Markup Language (YAML) untuk aplikasi nacos-server

      Tampilkan Kode YAML

      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
    • Kode YAML untuk aplikasi spring-cloud-c

      Tampilkan Kode YAML

      # 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
    • Kode YAML untuk aplikasi spring-cloud-b

      Tampilkan Kode YAML

      # 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
    • Kode YAML untuk aplikasi spring-cloud-a

      Tampilkan Kode YAML

      # 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
    • Kode YAML untuk aplikasi spring-cloud-gateway

      Tampilkan Kode YAML

      # 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 menanyakan hasil penyebaran:

    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 canary untuk spring-cloud-c dan spring-cloud-a

  1. Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan versi canary dari aplikasi spring-cloud-c.

    Tampilkan Kode 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 kode YAML berikut untuk menerapkan versi canary dari aplikasi spring-cloud-a.

    Tampilkan Kode 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 untuk lingkungan canary

  1. Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Full link grayscale.

  3. Klik Create Lane Group and Lane. Jika grup jalur tersedia di ruang layanan mikro yang Anda pilih, klik + Create Lane Group.

  4. Di halaman Full link grayscale, klik + Create Lane Group. Di panel Create Lane Group, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Lane Group Name

    Masukkan nama untuk grup jalur.

    Ingress Type

    Pilih Java Microservice Gateway.

    Lane Group Traffic Entry

    Pilih spring-cloud-gateway.

    Lane Group Application

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

    Setelah grup jalur dibuat, Anda dapat melihat grup jalur di bagian Lane Group halaman Full link grayscale. Untuk memodifikasi informasi tentang grup jalur, klik ikon 编辑 dan edit informasi tersebut.

Langkah 5: Buat jalur untuk lingkungan canary

Catatan
  • Saat menggunakan fitur rilis canary end-to-end, Anda perlu menambahkan tag ke node aplikasi canary untuk membedakannya dari node lainnya. Dalam lingkungan kontainer, tambahkan alicloud.service.tag: ${tag} ke spec.template.metadata.labels. Dalam lingkungan Elastic Compute Service (ECS), tambahkan parameter startup Java -Dalicloud.service.tag=${tag}.

  • Jika Anda memilih Gateway Mikroservis Java untuk Jenis Ingress, MSE mendukung mode pengarahan jalur berikut:

    • Pengarahan berdasarkan isi permintaan: Jika isi permintaan dapat digunakan untuk mengidentifikasi node canary, kami sarankan Anda menggunakan mode pengarahan jalur ini. Jika isi permintaan tidak dapat digunakan untuk mengidentifikasi node canary, kami sangat menyarankan Anda menambahkan pengenal tersebut dengan menggunakan modifikasi sistem untuk mencapai efek rilis canary yang lebih baik. Misalnya, Anda dapat menggunakan mode ini untuk memastikan bahwa permintaan canary dilewatkan ke lingkungan yang sama.

    • Pengarahan berdasarkan persentase: Jika isi permintaan tidak dapat digunakan untuk mengidentifikasi node canary dan sistem warisan tidak dapat dimodifikasi, Anda dapat menggunakan mode ini. Namun, jika Anda menggunakan mode ini, permintaan dari sumber yang sama mungkin diarahkan ke node aplikasi di jalur yang berbeda. Akibatnya, permintaan canary mungkin dilewatkan ke lingkungan yang berbeda.

  • Mode lane routing mode harus sama untuk jalur dalam grup jalur. Anda hanya dapat memodifikasi parameter Path dan Mode Pengarahan Jalur saat membuat jalur pertama dalam grup jalur.

  1. Di bagian bawah halaman Full link grayscale, klik Click to Create First Split Lane. Jika jalur tersedia di ruang layanan mikro yang Anda pilih, klik Create Lane.

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

Parameter

Deskripsi

Add Node Tag

Tambahkan tag secara manual ke node aplikasi canary Anda untuk membedakan node tersebut dari node lainnya.

Enter lane information

Tag Jalur: tag permintaan yang dikirim ke node aplikasi di jalur.

Konfirmasi Hubungan Pencocokan: memungkinkan Anda memeriksa apakah jumlah node aplikasi yang ditandai sesuai dengan harapan.

Configure Routing and Canary Release Rules

Tentukan aturan untuk mengarahkan permintaan ke node aplikasi di jalur.

  • Path: Jika Anda mengosongkan parameter ini, semua path cocok.

  • Mode Rilis Canary: Pilih Rilis Canary Berdasarkan Rasio.

  • Rasio Aliran: Masukkan 30. Unit: persentase (%).

Catatan

Anda juga dapat mengonfigurasi persentase lalu lintas yang berbeda untuk setiap path gateway. Jika Anda mengaktifkan fitur ini, Anda harus memastikan bahwa jumlah persentase lalu lintas path yang dikonfigurasikan untuk semua grup jalur tidak melebihi 100%.

Pengarahan berdasarkan isi permintaan

Parameter

Deskripsi

Add Node Tag

Tambahkan tag untuk node aplikasi canary untuk membedakan node tersebut dari node lainnya.

Enter lane information

Tag Jalur: tag permintaan yang dikirim ke node aplikasi di jalur. Dalam contoh ini, gray digunakan sebagai tag jalur.

Konfirmasi Hubungan Pencocokan: memungkinkan Anda memeriksa apakah jumlah node aplikasi yang ditandai sesuai dengan harapan.

Configure Routing and Canary Release Rules

Konfigurasikan kondisi aturan pengarahan.

  • Masukkan nilai untuk parameter Path. Jika Anda tidak mengonfigurasi parameter ini, semua path cocok.

  • Canary Release Mode: Pilih Canary Release by Content.

  • Canary Release Condition: Tambahkan kondisi aturan. Pilih Meet All Conditions.

    Dalam contoh ini, Parameter Type diatur ke name, dan Value diatur ke xiaoming. Contoh konfigurasi:

    • Parameter Type: Pilih Parameter.

    • Parameter: Masukkan name.

    • Condition: Pilih ==.

    • Value: Masukkan xiaoming.

Pengarahan berdasarkan persentase
Penting

Pastikan versi agen Java MSE adalah 3.2.3 atau lebih baru. Jika tidak, kemampuan rilis canary berbasis persentase akan terpengaruh secara negatif.

Parameter

Deskripsi

Add Node Tag

Tambahkan tag secara manual ke node aplikasi canary Anda untuk membedakan node tersebut dari node lainnya.

Enter lane information

Tag Jalur: tag permintaan yang dikirim ke node aplikasi di jalur. Dalam contoh ini, gray digunakan sebagai tag jalur.

Konfirmasi Hubungan Pencocokan: memungkinkan Anda memeriksa apakah jumlah node aplikasi yang ditandai sesuai dengan harapan.

Configure Routing and Canary Release Rules

Konfigurasikan kondisi aturan pengarahan.

  • Path: Jika Anda mengosongkan parameter ini, semua path cocok.

  • Canary Release Mode: Pilih Canary Release by Ratio.

  • Flow ratio: Masukkan 30%.

Setelah jalur dibuat, Anda dapat melihat detail jalur di bagian Traffic Distribution halaman Full-link Grayscale. Anda juga dapat melakukan operasi berikut:

  • Temukan jalur dan klik Enable di kolom Actions untuk membuat jalur berlaku. Dengan cara ini, lalu lintas diarahkan berdasarkan konfigurasi jalur. Lalu lintas yang memenuhi aturan pengarahan diprioritaskan ke versi aplikasi yang tag-nya sesuai dengan jalur. Jika versi aplikasi yang ditandai tidak ada, lalu lintas diarahkan ke versi aplikasi yang tidak ditandai.

  • Temukan jalur dan klik Disable di kolom Actions untuk menonaktifkan jalur yang telah dibuat. Lalu lintas aplikasi kemudian diarahkan ke versi aplikasi yang tidak ditandai.

  • Klik ikon 图标 untuk melihat persentase lalu lintas jalur.

  • Klik ikon 应用状态图标 untuk mengonfigurasi status aplikasi di jalur.

Langkah 6: Uji pengarahan lalu lintas

Pengarahan berdasarkan isi permintaan
  1. Jalankan perintah curl berikut untuk menguji lalu lintas yang diarahkan ke versi 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 sebelumnya, 8.130.x.x adalah alamat IP publik yang diekspos oleh aplikasi spring-cloud-gateway.

  2. Jalankan perintah curl berikut untuk menguji lalu lintas yang diarahkan ke versi canary:

    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
    • Jika name=xiaoming dibawa dalam permintaan, permintaan dilewatkan ke versi canary.

    • Sebagai contoh, jika permintaan dengan tag canary dikirim ke spring-cloud-a dan spring-cloud-c, permintaan tersebut diarahkan ke node canary dari kedua aplikasi tersebut.

    • Jika permintaan dikirim ke spring-cloud-b, permintaan tersebut masih dikirim ke node dasar aplikasi karena tidak ada node canary yang tersedia untuk aplikasi ini.

Pengarahan berdasarkan persentase

Gunakan skrip Python3 berikut untuk menguji persentase lalu lintas yang diarahkan ke versi canary. Anda harus menginstal paket requests sebelum melakukan pengujian. Ganti x.x.x.x dengan alamat IP instance Server Load Balancer (SLB) ingress yang terkait dengan spring-cloud-gateway.

# 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('Distribusi Lalu Lintas:', count_map)

if __name__ == '__main__':
    cal_tag_count(ENTRY_URL, TOTAL_REQUEST)

Hasil berikut menunjukkan bahwa sekitar 30% lalu lintas diarahkan ke lingkungan canary.

image.png

Langkah 7: Implementasikan observabilitas

Jika terjadi masalah pada aplikasi, Anda dapat menggunakan kemampuan observabilitas yang disediakan di konsol MSE untuk melihat data abnormal. Ini membantu Anda dengan cepat menemukan masalah.

Implementasikan Observabilitas Tata Kelola Layanan Mikro

Di halaman Full link grayscale MSE Tata Kelola Layanan Mikro, klik aplikasi tujuan. Di bagian Application QPS Monitoring, Anda dapat melihat data lalu lintas versi dasar dan versi canary dari jalur terkait.

image

  • Total QPS: total QPS aplikasi.

  • Exception QPS: jumlah permintaan error aplikasi.

  • GrayQPS: QPS versi canary aplikasi.

Referensi