All Products
Search
Document Center

Microservices Engine:Implementasikan deploy blue-green, pengujian A/B, dan rilis canary menggunakan MSE Cloud-native Gateway

Last Updated:Jul 06, 2025

Cloud-native Gateway dari Microservices Engine (MSE) adalah layanan terkelola yang berfungsi sebagai ingress dan menyediakan kemampuan manajemen trafik dalam skala besar. Cloud-native Gateway mendukung berbagai sumber layanan seperti Container Service for Kubernetes (ACK), MSE Nacos, MSE ZooKeeper, registri Enterprise Distributed Application Service (EDAS), registri Serverless App Engine (SAE), alamat tetap, dan Domain Name System (DNS). Cloud-native Gateway memberikan solusi terpadu untuk mendukung versi layanan dan mengimplementasikan rilis canary. Topik ini menjelaskan cara mengimplementasikan strategi rilis layanan yang berbeda dengan menggunakan kluster ACK dan instance Nacos untuk penemuan layanan.

Prasyarat

ACK

Dalam contoh ini, kluster ACK digunakan untuk penemuan layanan. Layanan backend didaftarkan ke CoreDNS menggunakan API layanan berbasis anotasi. Layanan backend menyediakan Operasi API yang digunakan untuk memeriksa versi yang digunakan. Jalur permintaan adalah /version dan versi yang digunakan adalah v1. Gateway cloud-native diintegrasikan dengan kluster ACK dan dapat memperoleh informasi layanan dari kluster ACK secara real-time. Dengan cara ini, gateway cloud-native dapat mengekspos layanan backend kepada pengguna eksternal.

基于容器服务K8s服务发现方式的业务架构图

Deploy aplikasi

  1. Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan aplikasi dengan versi v1.

    Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
    spec:
      ports:
      - port: 8080
        protocol: TCP
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin-v1
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: specialyang/spring-cloud-httpbin-k8s:v1
            imagePullPolicy: Always
            name: spring-cloud-httpbin-k8s
            ports:
            - containerPort: 8080
  2. Masuk ke Konsol MSE. Pada halaman Overview gateway yang diinginkan, klik Routes di panel navigasi di sebelah kiri. Lalu, klik tab Source. Klik Add Source untuk menambahkan layanan kontainer sebagai sumber layanan.

    image

  3. Di panel navigasi di sebelah kiri, klik Routes. Pilih tab Service. Klik Tambah Layanan. Di panel Tambah Layanan, tambahkan layanan httpbin yang ingin Anda ekspos ke gateway cloud-native.

  4. Tambahkan versi v1 ke layanan httpbin.

    Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.

    Catatan

    Anda harus memfilter node v1 berdasarkan tag untuk v1. Saat ini, hanya v1 yang diterapkan. Oleh karena itu, node v1 mencakup 100% dari node instance.

    image

  5. Pada halaman Pengaturan Rute, buat rute untuk layanan untuk mengekspos layanan kepada pengguna eksternal. Rute Operasi API yang digunakan untuk mengekspos layanan httpbin adalah /version. Permintaan diteruskan ke versi v1 dari layanan httpbin.

  6. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1

Lakukan deploy blue-green

Dalam deploy blue-green, versi baru dari layanan harus menggunakan jumlah sumber daya yang sama dengan versi saat ini. Setelah deploy blue-green selesai, semua trafik dialihkan ke versi baru.

基于容器服务K8s服务发现机制的蓝绿发布

  1. Terapkan versi v2 untuk layanan httpbin menggunakan sumber daya API berbasis anotasi dari ACK. Jumlah replika adalah tiga.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin-v2
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: httpbin
          version: v2
      template:
        metadata:
          labels:
            app: httpbin
            version: v2
        spec:
          containers:
          - image: specialyang/spring-cloud-httpbin-k8s:v2
            imagePullPolicy: Always
            name: spring-cloud-httpbin-k8s
            ports:
            - containerPort: 8080
  2. Tambahkan versi v2 ke layanan httpbin.

    Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.

    Catatan

    Anda harus memfilter node v2 berdasarkan tag untuk v2. Saat ini, jumlah node v1 sama dengan jumlah node v2 dalam sebuah instance. Oleh karena itu, node v1 dan v2 masing-masing mencakup 50% dari node instance.

    image

  3. Ubah layanan dalam rute yang dibuat untuk beralih trafik dari v1 ke v2 dalam deploy blue-green.

    Untuk informasi lebih lanjut tentang cara memodifikasi aturan routing untuk gateway cloud-native, lihat Modifikasi aturan routing.

    image

  4. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2

Trafik yang mengakses sumber daya API menggunakan jalur permintaan /version telah beralih dari v1 ke v2.

Lakukan pengujian A/B

Pengujian A/B mengarahkan trafik ke versi baru layanan berdasarkan metadata permintaan pengguna. Pengujian A/B secara dinamis mengarahkan trafik berdasarkan isi permintaan. Dalam contoh ini, versi baru hanya dapat diakses oleh permintaan yang memiliki nilai User-Agent Android, dan permintaan lainnya dikirim ke versi asli.

基于容器服务K8s服务发现机制的A/B测试

  1. Versi v1 dan v2 dari layanan httpbin masih digunakan. Selain itu, dua aturan routing perlu dibuat.

    • Permintaan yang cocok dengan jalur /version diarahkan ke versi v1.

    • Permintaan yang cocok dengan jalur /version dan berisi Android di header User-Agent diarahkan ke versi v2.

    Catatan

    Rute versi-v2 harus ditambahkan dengan header permintaan yang digunakan untuk pencocokan.

  2. Jalankan perintah berikut untuk mengirim permintaan uji yang tidak berisi Android di header User-Agent:

    curl ${GATEWAY_EXTERNAL_IP}/version

    Output perintah:

    version: v1
  3. Jalankan perintah berikut untuk mengirim permintaan uji yang berisi Android di header User-Agent:

    curl -H "User-Agent: Mozilla/5.0 (Linux; Android 4.0.3)" ${GATEWAY_EXTERNAL_IP}/version

    Output perintah:

    version: v2

Permintaan didistribusikan ke versi layanan yang berbeda berdasarkan sistem operasi dari mana permintaan dikirim.

Lakukan rilis canary

Fitur rilis canary memungkinkan sejumlah kecil trafik diarahkan ke versi baru layanan. Setelah versi baru diverifikasi, lebih banyak trafik secara bertahap diarahkan ke versi baru hingga semua trafik diarahkan ke versi baru. Dalam proses ini, versi baru diperluas dan versi asli diperkecil untuk memaksimalkan pemanfaatan sumber daya.

基于容器服务K8s服务发现机制的金丝雀发布

  1. Dalam rilis canary, jumlah replika di versi baru tidak perlu konsisten dengan versi asli. Satu-satunya persyaratan adalah bahwa sumber daya di versi baru harus cukup untuk menangani trafik canary ke versi tersebut. Dalam kasus ini, jumlah replika di versi baru diatur menjadi 1. Anda dapat melihat distribusi node versi di bagian Versi Layanan halaman Layanan.

    image

  2. Buat rute untuk meneruskan trafik ke versi baru dan asli layanan berdasarkan bobot node.

    Dalam proses ini, Anda harus mengonfigurasi versi v1 dan v2 untuk layanan httpbin dan menentukan bobot berdasarkan mana trafik diarahkan. Sebagai contoh, Anda dapat memilih Label Routing untuk Layanan Tujuan dan mengatur bobot versi v1 menjadi 80% dan bobot versi v2 menjadi 20%.

  3. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v2
    version: v1
    version: v2
    version: v1
    version: v1

Dua dari sepuluh permintaan mengakses versi v2. Rasio distribusi trafik ini adalah rasio yang diharapkan.

Catatan

Dalam skenario bisnis nyata, Anda dapat secara bertahap meningkatkan persentase trafik untuk versi baru setelah versi tersebut diverifikasi. Saat Anda meningkatkan persentase trafik, Anda harus memperluas versi baru dan memperkecil versi asli.

Nacos

Dalam contoh ini, layanan backend menyediakan Operasi API yang digunakan untuk memeriksa versi yang digunakan. Jalur permintaan adalah /version dan versi yang digunakan adalah v1. Gateway cloud-native diintegrasikan dengan instance MSE Nacos dan dapat memperoleh informasi layanan dari instance MSE Nacos secara real-time. Dengan cara ini, gateway cloud-native dapat mengekspos layanan backend kepada pengguna eksternal.

基于Nacos注册中心服务发现方式的业务架构图

Deploy aplikasi

  1. Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan aplikasi dengan versi v1.

    Untuk informasi lebih lanjut tentang cara menerapkan aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.

    Catatan
    • Variabel ${NACOS_SERVER_ADDRESS} dalam file YAML harus diganti dengan alamat instance MSE Nacos Anda. Jika instance MSE Nacos Anda berada di VPC yang sama dengan gateway, Anda dapat mengganti variabel tersebut dengan titik akhir internal instance. Jika tidak, ganti variabel tersebut dengan titik akhir publik instance.

    • Di ACK, data dalam label pod dapat dianggap sebagai metadata node. Di Nacos, metadata node ditentukan oleh data yang dibawa saat layanan didaftarkan. Dalam kerangka Spring Cloud, Anda dapat menggunakan variabel lingkungan spring.cloud.nacos.discovery.metadata.xxx untuk menambahkan metadata untuk node. Dalam contoh ini, version digunakan untuk membedakan node yang memiliki versi berbeda. Dalam hal ini, atur spring.cloud.nacos.discovery.metadata.version ke v1 untuk aplikasi.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin-v1
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: httpbin
      template:
        metadata:
          labels:
            app: httpbin
        spec:
          containers:
          - image: specialyang/spring-cloud-httpbin-nacos:v1
            imagePullPolicy: Always
            name: spring-cloud-httpbin-nacos
            ports:
            - containerPort: 8080
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: ${NACOS_SERVER_ADDRESS} 
            - name: spring.cloud.nacos.discovery.metadata.version
              value: v1
  2. Masuk ke Konsol MSE. Pada halaman Overview gateway yang diinginkan, klik Routes di panel navigasi di sebelah kiri. Lalu, klik tab Source untuk menambahkan instance MSE Nacos sebagai sumber layanan.

  3. Di panel navigasi di sebelah kiri, klik Routes. Lalu, klik tab Service untuk mengimpor layanan httpbin yang ingin Anda ekspos ke gateway cloud-native, dan pilih MSE Nacos sebagai sumber layanan.

  4. Tambahkan versi v1 ke layanan httpbin.

    Catatan

    Anda harus memfilter node v1 berdasarkan tag untuk v1. Saat ini, hanya v1 yang diterapkan. Oleh karena itu, node v1 mencakup 100% dari node instance.

    image

  5. Pada halaman Pengaturan Rute, buat rute untuk layanan untuk mengekspos layanan kepada pengguna eksternal. Rute Operasi API yang digunakan untuk mengekspos layanan httpbin adalah /version. Permintaan diteruskan ke versi v1 dari layanan httpbin.

  6. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v1

Lakukan deploy blue-green

Dalam deploy blue-green, versi baru layanan harus menggunakan jumlah sumber daya yang sama dengan versi saat ini. Setelah deploy blue-green selesai, trafik dialihkan ke versi baru.

1

  1. Terapkan versi baru v2 dari layanan httpbin.

    Catatan

    Prosedur untuk mendaftarkan aplikasi dengan instance Nacos sama dengan prosedur untuk mendaftarkan layanan dengan kluster ACK. Tambahkan konfigurasi spring.cloud.nacos.discovery.metadata.version=v2 untuk aplikasi. Saat aplikasi dimulai, aplikasi secara otomatis didaftarkan ke instance Nacos dan membawa metadata kustom. Gateway cloud-native dapat menggunakan metadata tersebut untuk membedakan node dari versi yang berbeda.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin-v2
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: httpbin
      template:
        metadata:
          labels:
            app: httpbin
        spec:
          containers:
          - image: specialyang/spring-cloud-httpbin-nacos:v2
            imagePullPolicy: Always
            name: spring-cloud-httpbin-nacos
            ports:
            - containerPort: 8080
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: ${NACOS_SERVER_ADDRESS}
            - name: spring.cloud.nacos.discovery.metadata.version
              value: v2
  2. Tambahkan versi v2 ke layanan httpbin.

    Untuk informasi lebih lanjut tentang cara menambahkan versi layanan ke gateway cloud-native, lihat Kelola versi layanan.

    Catatan

    Anda harus memfilter node v2 berdasarkan tag untuk v2. Saat ini, jumlah node v1 sama dengan jumlah node v2 dalam sebuah instance. Oleh karena itu, node v1 dan v2 masing-masing mencakup 50% dari node instance.

    image

  3. Ubah layanan tujuan dalam rute yang dibuat untuk beralih trafik dari v1 ke v2 dalam deploy blue-green.

    Untuk informasi lebih lanjut tentang cara memodifikasi aturan routing untuk gateway cloud-native, lihat Modifikasi aturan routing.

  4. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2
    version: v2

Trafik yang mengakses sumber daya API menggunakan jalur permintaan /version telah beralih dari v1 ke v2.

Lakukan pengujian A/B

Pengujian A/B mengarahkan trafik ke versi baru layanan berdasarkan metadata permintaan pengguna. Pengujian A/B secara dinamis mengarahkan trafik berdasarkan isi permintaan. Dalam contoh ini, versi baru hanya dapat diakses oleh permintaan yang memiliki nilai User-Agent Android, dan permintaan lainnya dikirim ke versi asli.

2

  1. Versi v1 dan v2 dari layanan httpbin masih digunakan. Selain itu, dua aturan routing perlu dibuat.

    • Permintaan yang cocok dengan jalur /version diarahkan ke versi v1.

    • Permintaan yang cocok dengan jalur /version dan berisi Android di header User-Agent diarahkan ke versi v2.

    Catatan

    Rute versi-v2 harus ditambahkan dengan header permintaan yang digunakan untuk pencocokan.

  2. Jalankan perintah berikut untuk mengirim permintaan uji yang tidak berisi Android di header User-Agent:

    curl ${GATEWAY_EXTERNAL_IP}/version

    Output perintah:

    version: v1
  3. Jalankan perintah berikut untuk mengirim permintaan uji yang berisi Android di header User-Agent:

    curl -H "User-Agent: Mozilla/5.0 (Linux; Android 4.0.3)" ${GATEWAY_EXTERNAL_IP}/version

    Output perintah:

    version: v2

Permintaan didistribusikan ke versi layanan yang berbeda berdasarkan sistem operasi dari mana permintaan dikirim.

Lakukan rilis canary

Fitur rilis canary memungkinkan sejumlah kecil trafik diarahkan ke versi baru layanan. Setelah versi baru diverifikasi, lebih banyak trafik secara bertahap diarahkan ke versi baru hingga semua trafik diarahkan ke versi baru. Dalam proses ini, versi baru diperluas dan versi asli diperkecil untuk memaksimalkan pemanfaatan sumber daya.

3

  1. Dalam rilis canary, jumlah replika di versi baru tidak perlu konsisten dengan versi asli. Satu-satunya persyaratan adalah bahwa sumber daya di versi baru harus cukup untuk menangani trafik canary ke versi tersebut. Dalam kasus ini, jumlah replika di versi baru diatur menjadi 1. Anda dapat melihat distribusi node versi di bagian Versi Layanan halaman Layanan.

    image

  2. Buat rute untuk meneruskan trafik ke versi baru dan asli layanan berdasarkan bobot node.

    Dalam proses ini, Anda harus mengonfigurasi versi v1 dan v2 untuk layanan httpbin dan menentukan bobot berdasarkan mana trafik diarahkan. Sebagai contoh, Anda dapat memilih Label Routing untuk Layanan Tujuan dan mengatur bobot versi v1 menjadi 80% dan bobot versi v2 menjadi 20%.

  3. Jalankan perintah berikut untuk mengirim permintaan uji:

    for i in {1..10}; do curl "${GATEWAY_EXTERNAL_IP}/version"; echo "";  done

    Output perintah:

    version: v1
    version: v1
    version: v1
    version: v1
    version: v1
    version: v2
    version: v1
    version: v2
    version: v1
    version: v1

Dua dari sepuluh permintaan mengakses versi v2. Rasio distribusi trafik ini adalah rasio yang diharapkan.

Catatan

Dalam skenario bisnis nyata, Anda dapat secara bertahap meningkatkan persentase trafik untuk versi baru setelah versi tersebut diverifikasi. Saat Anda meningkatkan persentase trafik, Anda harus memperluas versi baru dan memperkecil versi asli.