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
Klaster Container Service for Kubernetes (ACK) yang dikelola telah dibuat. Untuk informasi lebih lanjut, lihat Buat Klaster ACK yang Dikelola.
Tata Kelola Layanan Mikro telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan Tata Kelola Layanan Mikro.
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
Masuk ke Konsol 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.
Dalam kotak dialog ACK Application Access, atur parameter yang diperlukan dan klik OK.

Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika 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.
CatatanPada 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
Masuk ke Konsol 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 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.
CatatanPada 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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih .
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
Kode YAML untuk aplikasi spring-cloud-c
Kode YAML untuk aplikasi spring-cloud-b
Kode YAML untuk aplikasi spring-cloud-a
Kode YAML untuk aplikasi spring-cloud-gateway
Jalankan perintah berikut untuk menanyakan hasil penyebaran:
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 canary untuk spring-cloud-c dan spring-cloud-a
Masuk ke Konsol ACK. Gunakan kode YAML berikut untuk menerapkan versi canary dari aplikasi spring-cloud-c.
Gunakan kode YAML berikut untuk menerapkan versi canary dari aplikasi spring-cloud-a.
Langkah 4: Buat grup jalur untuk lingkungan canary
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih .
Klik Create Lane Group and Lane. Jika grup jalur tersedia di ruang layanan mikro yang Anda pilih, klik + Create Lane Group.
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
Saat menggunakan fitur rilis canary end-to-end, Anda perlu menambahkan
tagke node aplikasi canary untuk membedakannya dari node lainnya. Dalam lingkungan kontainer, tambahkanalicloud.service.tag: ${tag}kespec.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.
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.
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.
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.
|
Pengarahan berdasarkan persentase
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.
|
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
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]CatatanDalam perintah sebelumnya,
8.130.x.xadalah alamat IP publik yang diekspos oleh aplikasi spring-cloud-gateway.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]CatatanJika
name=xiaomingdibawa 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.

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.

Total QPS: total QPS aplikasi.
Exception QPS: jumlah permintaan error aplikasi.
GrayQPS: QPS versi canary aplikasi.