全部产品
Search
文档中心

:Implementasi rilis canary end-to-end berdasarkan MSE cloud-native gateways

更新时间:Jan 09, 2026

Dalam skenario layanan mikro, panggilan antar aplikasi bersifat acak. Jika versi baru tersedia untuk aplikasi Spring Cloud atau Dubbo yang Anda deploy, lalu lintas dengan karakteristik tertentu mungkin tidak diarahkan ke versi tujuan dari aplikasi tersebut. Untuk mengatasi masalah ini, Anda dapat menggunakan fitur rilis canary end-to-end yang disediakan oleh Microservices Engine (MSE) untuk mengimplementasikan throttling lalu lintas end-to-end tanpa perlu memodifikasi kode bisnis Anda. Saat menggunakan fitur rilis canary end-to-end, Anda dapat membuat jalur dan menggunakannya sebagai lingkungan runtime independen untuk mengisolasi versi aplikasi. Anda dapat mengonfigurasi aturan jalur untuk mengarahkan lalu lintas yang sesuai dengan aturan ke versi tujuan aplikasi. Topik ini menjelaskan cara mengonfigurasi gateway cloud-native MSE untuk mengimplementasikan rilis canary end-to-end.

Proses implementasi

image

Batasan

  • Fitur rilis canary end-to-end terintegrasi dengan fitur routing berbasis tag yang disediakan oleh Microservices Governance. Jika Anda ingin mengimplementasikan fitur rilis canary end-to-end untuk aplikasi Anda, kami menyarankan agar Anda tidak mengonfigurasi aturan rilis canary dan aturan routing berbasis tag untuk aplikasi tersebut.

  • Untuk informasi lebih lanjut tentang batasan fitur rilis canary end-to-end pada aplikasi Java, lihat Kerangka kerja Java yang didukung oleh Microservices Governance.

  • Untuk mengimplementasikan rilis canary end-to-end versi terbaru, Anda harus memastikan bahwa versi gateway cloud-native MSE Anda adalah 2.0.6 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui gateway cloud-native MSE, lihat Perbarui gateway cloud-native MSE.

Skenario contoh

Topik ini memberikan contoh tentang cara mengimplementasikan rilis canary end-to-end dari gateway cloud-native MSE ke aplikasi layanan mikro dalam skenario penempatan pesanan di industri e-commerce. Dalam contoh ini, arsitektur aplikasi terdiri dari gateway cloud-native MSE dan arsitektur layanan mikro backend (Spring Cloud). Panggilan layanan backend melibatkan tiga aplikasi: pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Akses berbasis klien atau HTML ke aplikasi backend didukung. Instance Nacos MSE digunakan untuk penemuan layanan di antara aplikasi.

Setelah pelanggan melakukan pemesanan, lalu lintas mengalir ke gateway cloud-native MSE. Kemudian, gateway cloud-native MSE memanggil pusat transaksi (Aplikasi A), pusat transaksi (Aplikasi A) memanggil pusat komoditas (Aplikasi B), dan kemudian pusat komoditas (Aplikasi B) memanggil pusat inventaris (Aplikasi C). Proses pemanggilan berikut digunakan: Pelanggan > Gateway cloud-native MSE > Aplikasi A > Aplikasi B > Aplikasi C.

Fitur baru perlu dirilis seiring dengan iterasi bisnis. Dalam contoh ini, versi baru dirilis untuk Aplikasi A dan Aplikasi C. Sebelum versi baru secara resmi dirilis untuk Aplikasi A dan Aplikasi C, Anda harus menguji versi baru pada kedua aplikasi tersebut menggunakan rilis canary. Setelah versi baru terbukti stabil, Anda dapat merilis versi tersebut untuk aplikasi.

Fitur rilis canary end-to-end diimplementasikan berdasarkan gateway cloud-native MSE dan Microservices Governance. Anda dapat mengimplementasikan rilis canary end-to-end dari gateway ke beberapa aplikasi backend. Dengan cara ini, lalu lintas canary dengan karakteristik tertentu selalu dapat diarahkan ke versi canary aplikasi. Ini membantu Anda menguji versi beberapa aplikasi secara bersamaan menggunakan rilis canary. Jika suatu aplikasi tidak memiliki versi canary, lalu lintas secara otomatis diarahkan ke versi dasar aplikasi.

使用场景

Istilah

  • Gateway cloud-native MSE: gateway generasi berikutnya yang kompatibel dengan Kubernetes Ingress. Gateway cloud-native MSE mendukung penemuan layanan berdasarkan beberapa sumber seperti Container Service for Kubernetes (ACK) dan instance Nacos. Gateway cloud-native MSE juga mendukung berbagai metode autentikasi login untuk menyediakan perlindungan keamanan.

  • Jalur: lingkungan terisolasi yang didefinisikan untuk aplikasi dengan versi yang sama. Hanya permintaan yang sesuai dengan aturan routing tertentu yang dapat diarahkan ke aplikasi yang ditandai dalam jalur. Sebuah aplikasi dapat termasuk dalam beberapa jalur. Sebuah jalur dapat berisi beberapa aplikasi. Aplikasi memiliki hubungan banyak-ke-banyak dengan jalur.

  • Grup jalur: kumpulan jalur. Grup jalur digunakan untuk membedakan antara tim atau skenario yang berbeda.

  • Lingkungan dasar: lingkungan tempat aplikasi yang tidak ditandai berjalan. Lingkungan dasar menyediakan pemulihan bencana untuk lingkungan lainnya.

Persiapan

Buat klaster ACK

Untuk informasi lebih lanjut, lihat Buat klaster ACK khusus (tidak dilanjutkan) atau Buat klaster ACK dikelola.

Aktifkan MSE Microservices Governance untuk aplikasi

Penting

Pastikan bahwa versi agen Java MSE adalah 3.2.3 atau lebih baru. Jika tidak, bisnis Anda mungkin terpengaruh secara negatif.

  1. Di tab Microservices Governance, aktifkan Edisi Profesional Microservices Governance.

  2. Aktifkan Microservices Governance untuk aplikasi layanan mikro di klaster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Aktifkan Microservices Governance untuk aplikasi layanan mikro Java di klaster ACK atau ACS.

Buat gateway cloud-native MSE

Untuk informasi lebih lanjut, lihat Buat gateway cloud-native MSE.

Hubungkan gateway cloud-native dengan sumber layanan

Untuk informasi lebih lanjut, lihat Tambahkan sumber layanan.

Catatan
  • Rilis canary end-to-end berdasarkan gateway cloud-native MSE mendukung klaster ACK atau instance MSE Nacos sebagai sumber layanan.

  • Gateway cloud-native MSE harus diterapkan di virtual private cloud (VPC) yang sama dengan klaster ACK atau instance MSE Nacos Anda.

1. Bangun lingkungan dasar untuk aplikasi bisnis

Langkah 1: Deploy versi dasar aplikasi backend

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi di sebelah kiri, klik Clusters. Lalu, klik nama klaster yang ingin Anda kelola.

  3. Di panel navigasi di sebelah kiri, pilih Workloads > Deployments.

  4. Di bagian atas halaman, pilih namespace klaster, dan klik Create from YAML.

  5. Deploy versi dasar aplikasi backend.

    Gunakan instance MSE Nacos sebagai sumber layanan

    Salin kode Yet Another Markup Language (YAML) berikut untuk menerapkan versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C.

    Penting

    Ganti {alamat server nacos} di kode dengan endpoint internal instance MSE Nacos yang Anda buat dan hapus tanda kurung kurawal {}.

    Tampilkan kode YAML

    # Kode YAML untuk versi dasar Aplikasi A
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-a
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-a
      template:
        metadata:
          labels:
            app: spring-cloud-a
            msePilotCreateAppName: spring-cloud-a
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-a
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20001
            livenessProbe:
              tcpSocket:
                port: 20001
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: {alamat server nacos}
            - name: dubbo.registry.address
              value: 'nacos://{alamat server nacos}:8848'
    ---
    # Kode YAML untuk versi dasar Aplikasi B
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-b
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-b
      template:
        metadata:
          labels:
            app: spring-cloud-b
            msePilotCreateAppName: spring-cloud-b
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-b
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20002
            livenessProbe:
              tcpSocket:
                port: 20002
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: {alamat server nacos}
            - name: dubbo.registry.address
              value: 'nacos://{alamat server nacos}:8848'
    ---
    # Kode YAML untuk versi dasar Aplikasi C
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-c
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-c
      template:
        metadata:
          labels:
            app: spring-cloud-c
            msePilotCreateAppName: spring-cloud-c
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-c
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20003
            livenessProbe:
              tcpSocket:
                port: 20003
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: {alamat server nacos}
            - name: dubbo.registry.address
              value: 'nacos://{alamat server nacos}:8848'

    Gunakan klaster ACK sebagai sumber layanan

    1. Salin kode YAML berikut untuk menerapkan instance MSE Nacos sebagai registri layanan mandiri.

      Penting

      Dalam kode YAML, endpoint versi dasar yang terdaftar dengan instance Nacos mandiri disediakan.

    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
    1. Salin kode YAML berikut untuk menerapkan versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C.

      Tampilkan kode YAML

      # Kode YAML untuk versi dasar Aplikasi A
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-a
        namespace: default
      spec:
        selector:
          matchLabels:
            app: spring-cloud-a
        template:
          metadata:
            labels:
              app: spring-cloud-a
              msePilotCreateAppName: spring-cloud-a
              msePilotAutoEnable: 'on'
          spec:
            containers:
            - name: spring-cloud-a
              image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
              imagePullPolicy: Always
              ports:
                - containerPort: 20001
              livenessProbe:
                tcpSocket:
                  port: 20001
                initialDelaySeconds: 30
                periodSeconds: 60
              # Akses instance Nacos mandiri menggunakan layanan Nacos.
              env:
              - name: spring.cloud.nacos.discovery.server-addr
                value: nacos-server
              - name: dubbo.registry.address
                value: 'nacos://nacos-server:8848'
      ---
      # Kode YAML untuk versi dasar Aplikasi B
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-b
        namespace: default
      spec:
        selector:
          matchLabels:
            app: spring-cloud-b
        template:
          metadata:
            labels:
              app: spring-cloud-b
              msePilotCreateAppName: spring-cloud-b
              msePilotAutoEnable: 'on'
          spec:
            containers:
            - name: spring-cloud-b
              image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
              imagePullPolicy: Always
              ports:
                - containerPort: 20002
              livenessProbe:
                tcpSocket:
                  port: 20002
                initialDelaySeconds: 30
                periodSeconds: 60
              # Akses instance Nacos mandiri menggunakan layanan Nacos.
              env:
              - name: spring.cloud.nacos.discovery.server-addr
                value: nacos-server
              - name: dubbo.registry.address
                value: 'nacos://nacos-server:8848'
      ---
      # Kode YAML untuk versi dasar Aplikasi C
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: spring-cloud-c
        namespace: default
      spec:
        selector:
          matchLabels:
            app: spring-cloud-c
        template:
          metadata:
            labels:
              app: spring-cloud-c
              msePilotCreateAppName: spring-cloud-c
              msePilotAutoEnable: 'on'
          spec:
            containers:
            - name: spring-cloud-c
              image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
              imagePullPolicy: Always
              ports:
                - containerPort: 20003
              livenessProbe:
                tcpSocket:
                  port: 20003
                initialDelaySeconds: 30
                periodSeconds: 60
              # Akses instance Nacos mandiri menggunakan layanan Nacos.
              env:
              - name: spring.cloud.nacos.discovery.server-addr
                value: nacos-server
              - name: dubbo.registry.address
                value: 'nacos://nacos-server:8848'
    2. Salin kode YAML berikut untuk membuat layanan untuk Aplikasi A yang berfungsi sebagai aplikasi ingress.

      Tampilkan kode YAML

      # Paparkan Aplikasi A.
      apiVersion: v1
      kind: Service
      metadata:
        name: sc-a
        namespace: default
      spec:
        ports:
          - port: 20001
            protocol: TCP
            targetPort: 20001
        selector:
          app: spring-cloud-a
        type: ClusterIP

Langkah 2: Gunakan gateway cloud-native MSE untuk memaparkan Aplikasi A

Kasus 1: Memaparkan layanan baru

Jika Anda belum menambahkan Aplikasi A ke gateway cloud-native, lakukan langkah-langkah berikut untuk memaparkan Aplikasi A:

  1. Masuk ke MSE console. Di panel navigasi di sebelah kiri, pilih Gateway Cloud-native > Gateway. Di halaman Gateway, klik nama gateway cloud-native yang dibuat. Di panel navigasi di sebelah kiri, klik Routes. Di halaman Rute, klik tab Services. Lalu, klik Add Service. Untuk informasi lebih lanjut, lihat Tambah layanan.

    • Gunakan klaster ACK sebagai sumber layanan

      • Service Source: Pilih Container Service.

      • Namespace: Pilih default.

      • Services: Pilih sc-a.

    • Gunakan instance MSE Nacos sebagai sumber layanan

      • Service Source: Pilih MSE Nacos.

      • Namespace: Pilih public.

      • Services: Pilih sc-A.

  2. Di halaman Routes, klik tab Routes. Di tab Rute, klik Add Route untuk membuat rute untuk sc-a atau sc-A dan gunakan rute tersebut untuk memaparkan layanan. Untuk informasi lebih lanjut, lihat Buat rute.

    Parameter

    Deskripsi

    Path

    Pilih Prefix dari daftar drop-down kondisi pencocokan dan masukkan /a di bidang path.

    Titik Rute

    Pilih Layanan Tunggal.

    Layanan Backend

    Pilih sc-A.

Kasus 2: Memaparkan layanan yang ada

Untuk layanan yang diimpor, Anda dapat melakukan langkah-langkah berikut untuk memaparkan Aplikasi A:

Masuk ke MSE console. Di panel navigasi di sebelah kiri, pilih Gateway Cloud-native > Gateway. Di halaman Gateway, klik nama gateway cloud-native yang dibuat. Di halaman Routes, klik tab Routes. Di tab Rute, modifikasi rute yang ada dan gunakan rute tersebut untuk memaparkan layanan.

Parameter

Deskripsi

Path

Pilih Prefix dari daftar drop-down kondisi pencocokan dan masukkan /a di bidang path.

Titik Rute

Pilih Layanan Tunggal.

Layanan Backend

Pilih sc-A.

Langkah 3: Uji lalu lintas versi dasar

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

  2. Di panel navigasi sebelah kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateway, klik ID gateway.

  3. Di panel navigasi sebelah kiri, klik Overview.

  4. Di tab Endpoint, periksa alamat IP masuk dari instance Server Load Balancer (SLB).

  5. Gunakan perintah cURL untuk menguji lalu lintas versi dasar. Hasil pengujian menunjukkan bahwa lalu lintas melewati versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C. Contoh kode berikut memberikan contoh konfigurasi:

    # Perintah uji
    curl x.x.1.1/a
    
    # Hasil uji
    A[10.0.3.178][config=base] -> B[10.0.3.195] -> C[10.0.3.201]

    Dalam hasil uji, nama Aplikasi B dan Aplikasi C tidak diikuti oleh nomor versi. Hasil uji menunjukkan bahwa lalu lintas melewati versi dasar dari kedua aplikasi tersebut.

2. Bangun lingkungan canary untuk aplikasi bisnis

Dalam contoh ini, versi baru perlu dirilis untuk Aplikasi A dan Aplikasi C secara bersamaan karena peluncuran fitur baru. Anda perlu menggunakan fitur rilis canary end-to-end untuk menguji versi canary Aplikasi A dan Aplikasi C.

Langkah 1: Deploy versi canary aplikasi backend

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi sebelah kiri, klik Clusters. Lalu, klik nama klaster yang ingin Anda kelola.

  3. Di panel navigasi sebelah kiri, pilih Workloads > Deployments.

  4. Di bagian atas halaman, pilih namespace klaster, dan klik Create from YAML.

  5. Gunakan kode YAML berikut untuk menerapkan versi canary Aplikasi A dan Aplikasi C.

    Gunakan instance MSE Nacos sebagai sumber layanan

    Penting

    Ganti {alamat server nacos} di kode dengan endpoint internal instance MSE Nacos yang Anda buat dan hapus tanda kurung kurawal {}.

    Tampilkan kode YAML

    # Kode YAML untuk versi canary Aplikasi A
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-a-gray
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-a-gray
      template:
        metadata:
          labels:
            alicloud.service.tag: gray
            app: spring-cloud-a-gray
            msePilotCreateAppName: spring-cloud-a
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-a
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20001
            livenessProbe:
              tcpSocket:
                port: 20001
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: {alamat server nacos}
            - name: dubbo.registry.address
              value: 'nacos://{alamat server nacos}:8848'
    ---
    # Kode YAML untuk versi canary Aplikasi C
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-c-gray
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-c-gray
      template:
        metadata:
          labels:
            alicloud.service.tag: gray
            app: spring-cloud-c-gray
            msePilotCreateAppName: spring-cloud-c
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-c
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20003
            livenessProbe:
              tcpSocket:
                port: 20003
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: {alamat server nacos}
            - name: dubbo.registry.address
              value: 'nacos://{alamat server nacos}:8848'

    Gunakan klaster ACK sebagai sumber layanan

    Penting

    Dalam kode YAML, endpoint versi canary yang terdaftar dengan instance Nacos mandiri disediakan. Dibandingkan dengan kode YAML versi dasar, alicloud.service.tag:gray ditambahkan ke kode YAML versi canary.

    Tampilkan kode YAML

    # Kode YAML untuk versi canary Aplikasi A
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-a-gray
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-a
      template:
        metadata:
          labels:
            alicloud.service.tag: gray
            app: spring-cloud-a
            msePilotCreateAppName: spring-cloud-a
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-a
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20001
            livenessProbe:
              tcpSocket:
                port: 20001
              initialDelaySeconds: 30
              periodSeconds: 60
            # Akses instance Nacos mandiri menggunakan layanan Nacos.
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: nacos-server
            - name: dubbo.registry.address
              value: 'nacos://nacos-server:8848'
    
    ---
    # Kode YAML untuk versi canary Aplikasi C
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-c-gray
      namespace: default
    spec:
      selector:
        matchLabels:
          app: spring-cloud-c
      template:
        metadata:
          labels:
            alicloud.service.tag: gray
            app: spring-cloud-c
            msePilotCreateAppName: spring-cloud-c
            msePilotAutoEnable: 'on'
        spec:
          containers:
          - name: spring-cloud-c
            image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
            imagePullPolicy: Always
            ports:
              - containerPort: 20003
            livenessProbe:
              tcpSocket:
                port: 20003
              initialDelaySeconds: 30
              periodSeconds: 60
            # Akses instance Nacos mandiri menggunakan layanan Nacos.
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: nacos-server
            - name: dubbo.registry.address
              value: 'nacos://nacos-server:8848'

Langkah 2: Buat grup jalur untuk lingkungan canary

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

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

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

  4. Di panel Create Lane Group, konfigurasikan parameter dan klik OK.

    Parameter

    Deskripsi

    Nama Grup Jalur

    Masukkan nama untuk grup jalur.

    Jenis Ingress

    Pilih Gateway Cloud-native MSE.

    Ingress Gateway

    Pilih gateway cloud-native tujuan.

    Aplikasi Grup Jalur

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

    创建泳道组.png

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

Langkah 3: Buat jalur untuk lingkungan canary

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

  • MSE mendukung mode routing jalur berikut jika Anda memilih MSE Cloud-native Gateway untuk Jenis Ingress saat membuat grup jalur terkait.

    • Routing berdasarkan konten permintaan: Jika konten permintaan dapat digunakan untuk mengidentifikasi node canary, kami sarankan Anda menggunakan mode routing jalur ini. Jika konten permintaan tidak dapat digunakan untuk mengidentifikasi node canary, kami juga 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.

    • Routing berdasarkan persentase: Jika konten 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 routing jalur harus sama untuk jalur dalam grup jalur. Anda hanya dapat memodifikasi mode routing jalur saat membuat jalur pertama dalam grup jalur.

  1. Di bagian bawah halaman Grayscale tautan penuh, klik Buat Jalur Pertama Split. Jika jalur tersedia di ruang layanan mikro yang Anda pilih, klik Buat Jalur.

  2. Di panel Buat Jalur, konfigurasikan parameter dan klik OK.

    Buat jalur yang menggunakan routing berdasarkan konten permintaan

    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 diberi tag sesuai dengan yang diharapkan.

    Tambah Aturan Rilis Canary

    Tentukan aturan untuk merutekan permintaan ke node aplikasi di jalur.

    • Mode Rilis Canary: Pilih Canary Release by Content.

    • Kondisi Rilis Canary: Pilih Memenuhi Semua Kondisi.

      Rincian konfigurasi dalam contoh ini:

      • Jenis Parameter: Setel parameter ini ke Header.

      • Parameter: Setel parameter ini ke canary.

      • Kondisi: Setel parameter ini ke ==.

      • Nilai: Setel parameter ini ke gray.

    Mode routing jalur

    Kondisi Rilis Canary

    Efek

    Memenuhi Semua Kondisi

    Lalu lintas yang memenuhi semua kondisi diarahkan ke jalur terkait.

    Memenuhi Salah Satu Kondisi

    Lalu lintas yang memenuhi salah satu kondisi berikut diarahkan ke jalur terkait.

    Deskripsi kondisi

    Kondisi

    Deskripsi

    Contoh rilis canary end-to-end

    Contoh permintaan gateway cloud-native

    ==

    Pencocokan tepat. Kondisi terpenuhi jika nilai lalu lintas dan nilai kondisi persis sama.

    image.png

    image.png

    !=

    Pencocokan tidak sama. Kondisi terpenuhi jika nilai lalu lintas dan nilai kondisi tidak sama.

    image.png

    image.png

    in

    Pencocokan inklusif. Kondisi terpenuhi jika nilai lalu lintas termasuk dalam daftar tertentu.

    image.png

    image.png

    Persentase

    Pencocokan persentase. Prinsip: Kondisi terpenuhi jika 'hash(get(key)) % 100 < value'.

    image.png

    image.png

    Pencocokan ekspresi reguler

    Pencocokan ekspresi reguler. Kondisi terpenuhi jika nilai lalu lintas cocok berdasarkan aturan ekspresi reguler yang ditentukan.

    image.png

    image.png

    Buat jalur yang menggunakan routing berdasarkan persentase

    Catatan

    Untuk membuat jalur yang menggunakan routing berdasarkan persentase, pastikan bahwa versi ack-onepilot adalah 3.0.18 atau lebih baru dan versi agen adalah 3.2.3 atau lebih baru.

    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 diberi tag sesuai dengan yang diharapkan.

    Konfigurasikan Routing dan Aturan Rilis Canary

    Tentukan aturan untuk merutekan permintaan ke node aplikasi di jalur.

    • Canary Release Mode: Pilih Canary Release by Ratio.

    • Flow ratio: Masukkan 30. Unit: persentase (%).

    Catatan

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

Setelah jalur dibuat, Anda dapat melihat detail jalur di bagian Distribusi Lalu Lintas pada halaman Full link Grayscale. Anda juga dapat melakukan operasi berikut:

  • Cari jalur dan klik Aktifkan di kolom Tindakan untuk membuat jalur berlaku. Dengan cara ini, lalu lintas diarahkan berdasarkan konfigurasi jalur. Lalu lintas yang memenuhi aturan routing diprioritaskan untuk diarahkan ke versi aplikasi yang tag-nya sesuai dengan jalur. Jika versi aplikasi yang diberi tag tidak ada, lalu lintas diarahkan ke versi aplikasi yang tidak diberi tag.

  • Cari jalur dan klik Nonaktifkan di kolom Tindakan untuk menonaktifkan jalur yang dibuat. Lalu lintas aplikasi kemudian diarahkan ke versi aplikasi yang tidak diberi tag.

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

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

Langkah 4: Uji lalu lintas versi canary

Uji jalur yang menggunakan routing berdasarkan konten permintaan

Gunakan perintah cURL untuk menguji lalu lintas canary. Dalam hasil uji, lalu lintas melewati versi canary Aplikasi A dan Aplikasi C. Aplikasi B tidak memiliki versi canary, dan lalu lintas secara otomatis diarahkan ke versi dasar Aplikasi B.

# Perintah uji
curl -H "canary: gray" x.x.x.x/a

# Hasil uji
Agray[10.0.3.177][config=base] -> B[10.0.3.195] -> Cgray[10.0.3.180]

Uji jalur yang menggunakan routing berdasarkan persentase

Anda dapat menjalankan skrip Python berikut untuk menguji distribusi permintaan yang dirutekan berdasarkan nilai persentase. Anda harus menginstal paket requests dan mengganti x.x.x.x dengan alamat IP instance SLB yang terkait dengan gateway cloud-native.

Tampilkan skrip Python

# pip3 install requests
# python3 traffic.py
import requests


TOTAL_REQUEST = 100
ENTRY_URL = 'http://x.x.x.x/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% permintaan diarahkan ke lingkungan canary.

image

(Opsional) 3. Implementasi 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.

Observabilitas pada gateway cloud-native

Di halaman Routes dari gateway cloud-native MSE, klik tab Services. Di tab Layanan, klik nama layanan yang ingin Anda lihat. Di halaman yang muncul, lihat data metrik setiap layanan di tab Monitor.

基础监控

Observabilitas pada Microservices Governance

Di halaman Full link Grayscale dari MSE Microservices Governance, klik aplikasi tujuan. Di bagian QPS Data, Anda dapat melihat data lalu lintas versi dasar (versi tanpa tag) dan versi canary dari jalur terkait.

应用监控

  • Total QPS: total QPS aplikasi.

  • Exception QPS: jumlah permintaan error dari aplikasi.

  • GrayQPS: QPS versi canary aplikasi.

Observabilitas pada ARMS

Jika aplikasi Anda terhubung ke Application Real-Time Monitoring Service (ARMS), Anda dapat melihat data lalu lintas lingkungan canary di tab Grayscale tautan penuh pada halaman Analisis Berbasis Skenario di konsol ARMS dan menentukan apakah akan melakukan rollback atau melanjutkan proses rilis.

image