Anda dapat menerapkan rilis canary aplikasi frontend dengan kebijakan pemantauan dan rollback untuk membangun mekanisme andal yang menjamin stabilitas sistem. Koordinasi ketiga kebijakan tersebut membantu menjaga performa dan stabilitas tinggi aplikasi frontend selama iterasi dan pembaruan berkelanjutan. Topik ini menjelaskan cara mengonfigurasi Microservices Engine (MSE) cloud-native gateway untuk mengimplementasikan rilis canary pada aplikasi frontend.
Implementasikan rilis canary ujung ke ujung
Dalam skenario layanan mikro, panggilan antaraplikasi bersifat acak. Jika tersedia versi baru untuk aplikasi Spring Cloud atau Dubbo yang Anda deploy, traffic dengan karakteristik tertentu mungkin tidak diarahkan ke versi baru tersebut. Untuk mengimplementasikan rilis canary ujung ke ujung, Anda dapat menggabungkan rilis canary aplikasi frontend dengan rilis canary ujung ke ujung berbasis gateway cloud-native yang disediakan oleh MSE.
Setiap permintaan dari pengguna frontend melewati Cloud-native Gateway, tempat permintaan diautentikasi oleh sistem permission, lalu menambahkan identifier unik pengguna, seperti userid: 001, ke cookie permintaan.
Gateway dikonfigurasi dengan plug-in frontend-gray yang memetakan dan meneruskan traffic grayscale berdasarkan aturan yang telah dikonfigurasi.
Prasyarat
Kluster ACK yang dikelola telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Gateway cloud-native MSE telah dibuat. Untuk informasi selengkapnya, lihat Buat gateway cloud-native MSE.
Implementasikan rilis canary pada aplikasi frontend menggunakan gateway MSE Ingress
Instal MSE Ingress Controller dan gunakan gateway MSE Ingress untuk mengakses kluster ACK. Untuk informasi selengkapnya, lihat Gunakan gateway MSE Ingress untuk mengakses layanan di kluster ACK dan kluster ACS.
Langkah 1: Deploy aplikasi di kluster ACK
Untuk informasi selengkapnya tentang cara mendeploy aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.
Langkah 2: Konfigurasi plug-in frontend-gray di Konsol MSE
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Plug-in Marketplace.
Di halaman Plug-in Marketplace, cari
frontend-graydan klik kartu plug-infrontend-gray.Di halaman yang muncul, klik tab Plug-in Configuration, pilih Domain-level plug-in rules di bagian Rule Levels, lalu klik Add Rule. Di panel Add Rule, konfigurasikan aturan berikut. Untuk detail konfigurasi, lihat Configure rules.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAktifkan sakelar Enable. Di daftar drop-down Target, pilih
*(semua domain). Klik OK.
Langkah 3: Verifikasi hasil
Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, klik Clusters. Pada halaman Clusters, klik kluster Anda. Di halaman detail kluster, buka Network > Routes untuk menemukan titik akhir publik.
Di daftar rute, Anda dapat melihat dua Ingress berbasis gateway MSE: frontend-base-ingress (aturan:
/→ frontend-base-svc) dan frontend-gray-ingress (aturan:/→ frontend-gray-svc). Salin alamat endpoint dari kolom Endpoint pada frontend-base-ingress untuk verifikasi selanjutnya.Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akunadmin/iceuntuk mengakses versi dasar. ID pengguna adalah 00000001.Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akun pengguna standaruser/iceuntuk mengakses versi canary. ID pengguna adalah 00000002.
Implementasikan rilis canary pada aplikasi frontend menggunakan kluster ACK
Langkah 1: Deploy aplikasi di kluster ACK
Untuk informasi selengkapnya tentang cara mendeploy aplikasi, lihat Buat aplikasi tanpa status menggunakan Deployment.
Langkah 2: Konfigurasi plug-in frontend-gray di Konsol MSE
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Plug-in Marketplace.
Di halaman Plug-in Marketplace, cari
frontend-graydan klik kartu plug-infrontend-gray.Di halaman yang muncul, klik tab Plug-in Configuration, pilih Domain-level plug-in rules di bagian Rule Levels, lalu klik Add Rule. Di panel Add Rule, konfigurasikan aturan berikut. Untuk detail konfigurasi, lihat Configure rules.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAktifkan sakelar Enable. Di daftar drop-down Target, pilih
*(semua domain). Klik OK.
Langkah 3: Tambahkan sumber layanan untuk gateway
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Source.
Klik Add Source. Di panel Add Source, atur Source Type menjadi Container Service. Untuk ACK/ASK/ACS Cluster, pilih kluster ACK yang telah Anda buat, lalu klik OK.
Aktifkan sakelar Listen to K8s Ingress. Secara default, gateway mendengarkan resource Ingress di semua namespace. Untuk mengubahnya, klik Custom. Di bagian Security Group Authorization, konfirmasi security group dan range port, yang secara default adalah
1/65535.
Langkah 4: Tambahkan layanan
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.
Klik Add Service. Di panel Add Service, konfigurasikan parameter layanan, lalu klik OK.
Atur Service Source menjadi Container Service. Untuk Namespace, pilih default. Di daftar layanan, centang kotak untuk frontend-base-svc dan frontend-gray-svc.
Langkah 5: Tambahkan rute dasar
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Di tab Routes, klik Add Route.
Di halaman Add Route, konfigurasikan parameter, lalu klik Save and Advertise.
Atur Route Name menjadi
base-route. Untuk Path, pilih Prefix is dan masukkan/. Untuk Destination, pilih Single Service. Untuk Service Name, pilihfrontend-base-svc. Atur Service Protocol menjadiHTTP, Service Port menjadi80, dan Timeout menjadi60detik.
Langkah 6: Tambahkan rute canary
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Di tab Routes, klik Add Route.
Di halaman Add Route, konfigurasikan parameter, lalu klik Save and Advertise.
Atur Route Name menjadi
gray-routedan Domain menjadi*. Untuk Path, pilih prefix match dan masukkan/. Di bagian Request Header, tambahkan entri baru: atur Header Name menjadix-higress-tag, Condition menjadi Prefix is, dan Value menjadigray. Untuk Destination, pilih Single Service dan pilihfrontend-gray-svcsebagai Service Name. Atur protokol layanan menjadi HTTP dan port menjadi 80.CatatanNilai
graymerepresentasikan versi canary dan sesuai dengan pengaturangrayDeployments.versiondalam konfigurasi plug-infrontend-gray.
Langkah 7: Verifikasi hasil
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di halaman Overview, klik tab Endpoint untuk melihat titik akhir publik.
Konfirmasi bahwa alamat endpoint telah dihasilkan untuk instans NLB dan Association Status adalah Associated.
Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akunadmin/iceuntuk mengakses versi dasar. ID pengguna adalah 00000001.Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akun pengguna standaruser/iceuntuk mengakses versi canary. ID pengguna adalah 00000002.
Implementasikan rilis canary pada aplikasi frontend menggunakan Instance ECS
Langkah 1: Deploy dua versi aplikasi frontend pada instance ECS
Titik akhir aplikasi dasar:
120.***.137.243:80Titik akhir aplikasi canary:
120.***.137.243:8081
Langkah 2: Tambahkan layanan
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.
Klik Add Service. Di panel Add Service, atur Fixed Address menjadi Fixed Address, konfigurasikan parameter layanan, lalu klik OK.
Atur Service Name menjadi
frontend-base-svc. Untuk Service Address, masukkan alamat IP dan port server dalam formatip:port. Gunakan baris baru untuk setiap alamat. Jika Anda menggunakan alamat IP publik, Anda harus mengonfigurasi gateway NAT di VPC. Atur TLS Mode menjadi Disable, lalu klik OK.
Langkah 3: Tambahkan rute dasar
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Di tab Routes, klik Add Route.
Di halaman Add Route, konfigurasikan parameter, lalu klik Save and Advertise.
Atur Route Name menjadi
base-route. Untuk Path, pilih Prefix is dan masukkan/. Untuk Destination, pilih Single Service. Untuk Service Name, pilihfrontend-base-svc. Atur Service Protocol menjadiHTTP, Service Port menjadi80, dan Timeout menjadi60detik.
Bagian ini menjelaskan parameter untuk layanan canary. Atur Service Name menjadi frontend-gray-svc. Untuk Service Address, masukkan alamat IP dan port layanan target dalam format ip:port. Gunakan baris baru untuk setiap alamat. Jika Anda menggunakan alamat IP publik, Anda harus mengonfigurasi gateway NAT di VPC. Atur TLS Mode menjadi Disable.
Langkah 4: Tambahkan rute canary
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Di tab Routes, klik Add Route.
Di halaman Add Route, konfigurasikan parameter, lalu klik Save and Advertise.
CatatanNilai
graymerepresentasikan versi canary dan sesuai dengan pengaturangrayDeployments.versiondalam konfigurasi plug-infrontend-gray.Atur Route Name menjadi
gray-routedan Domain menjadi*. Untuk Path, pilih prefix match dan masukkan/. Di bagian Request Header, tambahkan entri baru: atur Header Name menjadix-higress-tag, Condition menjadi Prefix is, dan Value menjadigray. Untuk Destination, pilih Single Service dan pilihfrontend-gray-svcsebagai Service Name. Atur protokol layanan menjadi HTTP dan port menjadi 80.
Langkah 5: Konfigurasi plug-in frontend-gray di Konsol MSE
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Plug-in Marketplace.
Di halaman Plug-in Marketplace, cari
frontend-graydan klik kartu plug-infrontend-gray.Di halaman yang muncul, klik tab Plug-in Configuration, pilih Domain-level plug-in rules di bagian Rule Levels, lalu klik Add Rule. Di panel Add Rule, konfigurasikan aturan berikut. Untuk detail konfigurasi, lihat Configure rules.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAktifkan sakelar Enable. Di daftar drop-down Target, pilih
*(semua domain). Klik OK.
Langkah 6: Verifikasi hasil
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di halaman Overview, klik tab Endpoint untuk melihat titik akhir publik.
Konfirmasi bahwa alamat endpoint telah dihasilkan untuk instans NLB dan Association Status adalah Associated.
Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akunadmin/iceuntuk mengakses versi dasar. ID pengguna adalah 00000001.Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akun pengguna standaruser/iceuntuk mengakses versi canary. ID pengguna adalah 00000002.
Implementasikan rilis canary pada aplikasi frontend menggunakan CDN atau OSS
Langkah 1: Siapkan file OSS
Langkah 2: Tambahkan layanan
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Lalu, klik tab Services.
Klik Add Service. Di panel Add Service, atur DNS Domain Name menjadi DNS Domain Name, masukkan alamat OSS di daftar domain, lalu klik OK.
Atur Service Name menjadi
static-oss, Service Port menjadi80, dan TLS Mode menjadi Disable.PentingJika OSS dan gateway dideploy di wilayah yang sama, kami sarankan Anda memasukkan titik akhir internal OSS. Jika OSS dan gateway tidak dideploy di wilayah yang sama, masukkan titik akhir publik.
Langkah 3: Tambahkan rute
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Routes. Di tab Routes, klik Add Route.
Di halaman Add Route, konfigurasikan parameter, lalu klik Save and Advertise.
Contoh parameter: Atur Route Name menjadi
project-a-app-1. Atur Domain menjadi *. Untuk Path, pilih Prefix is, masukkan/app1, dan centang kotak Case-sensitive. Untuk Destination, pilih Single Service. Di bagian backend service, pilih static-oss sebagai Service Name, HTTP sebagai Service Protocol, dan 80 sebagai Service Port. Atur Timeout menjadi 60 detik.
Langkah 4: Konfigurasi plug-in frontend-gray di Konsol MSE
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways.
-
Di halaman Gateways, klik ID gateway.
-
Di panel navigasi kiri, klik Plug-in Marketplace.
Di halaman Plug-in Marketplace, cari
frontend-graydan klik kartu plug-infrontend-gray.Di halaman yang muncul, klik tab Plug-in Configuration, pilih Domain-level plug-in rules di bagian Rule Levels, lalu klik Add Rule. Di panel Add Rule, konfigurasikan aturan berikut. Untuk detail konfigurasi, lihat Configure rules.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" rewrite: host: xx.oss-cn-shanghai.aliyuncs.com ## OSS endpoint indexRouting: "/app1": "/project-a/app1/{version}/index.html" # Path rewrite of the HTML home page fileRouting: "/app1": "/project-a/app1/{version}" # Path rewrite of resources such as CSS properties, JavaScript scripts, and images baseDeployment: version: dev grayDeployments: - name: beta-user version: 0.0.1 enabled: true
Langkah 5: Verifikasi hasil
-
Login ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
-
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateways, klik ID gateway.
Di halaman Overview, klik tab Endpoint untuk melihat titik akhir publik.
Konfirmasi bahwa alamat endpoint telah dihasilkan untuk instans NLB dan Association Status adalah Associated.
Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akunadmin/iceuntuk mengakses versi dasar. ID pengguna adalah 00000001.Akses titik akhir publik
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Login dengan akun pengguna standaruser/iceuntuk mengakses versi canary. ID pengguna adalah 00000002.
FAQ
Apakah saya dapat mengonfigurasi kebijakan rewrite dan rilis canary pada aplikasi frontend secara bersamaan?
Jika sumber layanan bukan CDN atau OSS, Anda dapat mengonfigurasi rilis canary aplikasi frontend dan kebijakan rewrite secara bersamaan dan membuatnya berlaku.
Jika sumber layanan adalah CDN atau OSS, Anda tidak dapat mengonfigurasi rilis canary aplikasi frontend dan kebijakan rewrite secara bersamaan. Hal ini karena kebijakan rewrite terkait sudah diimplementasikan dalam plug-in frontend-gray. Jika Anda mengonfigurasi kebijakan rewrite, konflik mungkin terjadi. Akibatnya, error seperti kode status 403 dikembalikan.
Apakah saya dapat menyuntikkan beberapa variabel global ke halaman utama HTML?
Suntikkan beberapa skrip JavaScript global ke tag <head> (biasanya properti seperti gaya CSS) halaman HTML, atau ke posisi pertama dan terakhir tag <body> halaman HTML.
Gunakan injection untuk menyuntikkan kode ke halaman utama HTML. Anda dapat menyuntikkan kode ke tag <head>, atau ke posisi first dan last tag <body>.
grayKey: userid
rules:
- name: inner-user
grayKeyValue:
- '00000001'
- '00000005'
baseDeployment:
version: base
grayDeployments:
- name: beta-user
version: gray
enabled: true
weight: 80
injection:
head:
- <script>console.log('Header')</script>
body:
first:
- <script>console.log('hello world before')</script>
- <script>console.log('hello world before1')</script>
last:
- <script>console.log('hello world after')</script>
- <script>console.log('hello world after2')</script>Kapan versi canary mulai berlaku?
Asumsikan pengguna sedang menggunakan versi 0.0.1 aplikasi frontend. Jika Anda merilis versi 0.0.2 dan pengguna tersebut sesuai dengan aturan canary, apakah versi baru langsung berlaku?
Hal ini disebabkan oleh alasan berikut:
Jika versi canary perlu berlaku secara real-time, backend harus mengontrol versi secara dinamis. Rilis frontend tidak dapat dipisahkan dari rilis backend. Akselerasi CDN tidak dapat dilakukan karena stabilitas halaman sangat bergantung pada antarmuka.
Jika versi canary berlaku secara real-time, saat pelanggan menggunakan fitur tertentu, tombol yang sedang digunakan mungkin menjadi tidak tersedia kapan saja. Hal ini mengakibatkan pengalaman pengguna yang buruk.
Kapan saya harus refresh halaman?
Dalam kebanyakan kasus, Anda perlu login ulang ke website setelah session habis masa berlakunya.
Anda dapat login ke aplikasi di halaman login.
Oleh karena itu, halaman harus direfresh selama proses login untuk mengambil informasi rilis canary terbaru. Contoh berikut menunjukkan kode login frontend:
async function handleLogin(values: LoginParams) {
try {
const result = await login(values);
if (result.success) {
message.success ('Logon succeeded. ');
await updateUserInfo();
const urlParams = new URL(window.location.href).searchParams;
window.location.href = `${urlParams.get('redirect') || '/'}`;
return;
}
console.log(result);
// Configure an error message that is returned for logon failures. The following code shows a sample error message.
setLoginResult(result);
} catch (error) {
message.error('Logon failed. Try again. ');
console.log(error);
}
}