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
-
Login ke Konsol Microservices Engine (MSE) dan pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Di halaman Application list, klik ACK Application Access.
-
Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika 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
-
Login ke Konsol Microservices Engine (MSE) dan pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Di halaman Application list, klik ACK Application Access.
-
Di kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika 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
-
Login ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi kiri, pilih Clusters.
-
Di halaman Clusters, klik kluster target Anda. Di panel navigasi kiri, pilih .
-
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)
-
YAML untuk aplikasi spring-cloud-c
-
YAML untuk aplikasi spring-cloud-b
-
YAML untuk aplikasi spring-cloud-a
-
YAML untuk aplikasi spring-cloud-gateway
Jalankan perintah berikut untuk memeriksa status penerapan:
kubectl get svc,deployOutput 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
-
Login ke Konsol ACK. Gunakan YAML berikut untuk menerapkan versi kanari aplikasi spring-cloud-c:
-
Gunakan YAML berikut untuk menerapkan versi kanari aplikasi spring-cloud-a:
Langkah 4: Buat grup jalur kanari
-
Login ke Konsol MSE Governance Center dan pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih .
-
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.
-
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
-
Untuk menggunakan fitur peluncuran kanari ujung ke ujung, tambahkan
tagkhusus ke aplikasi kanari Anda untuk membedakannya dari node lain. Di lingkungan kontainer, tambahkanalicloud.service.tag: ${tag}di bawahspec.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.
-
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.
-
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.
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.
|
Route by ratio
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.
|
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
-
Jalankan perintah
curlberikut 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]CatatanDalam perintah tersebut,
8.130.x.xadalah Alamat IP publik yang diekspos oleh Spring Cloud Gateway. -
Jalankan perintah
curlberikut 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.

-
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.