Penerapan, penskalaan, dan restart merupakan operasi rutin untuk setiap aplikasi online. Fitur graceful start di Microservices Engine (MSE) melindungi aplikasi selama setiap tahap startup melalui tiga kemampuan: delayed service registration, low-traffic warm-up, dan service readiness probe.
Ikhtisar fitur
Delayed registration
Sebuah instans penyedia layanan mikro mendaftarkan dirinya ke registri selama startup aplikasi. Setelah pendaftaran selesai, aplikasi konsumen dapat berlangganan dan memanggil penyedia tersebut. Untuk aplikasi Java yang dibangun di atas framework Spring, pendaftaran biasanya terjadi setelah konteks Spring direfresh. Jika aplikasi memiliki tugas inisialisasi asinkron yang belum selesai, pendaftaran segera dapat menyebabkan error permintaan. Misalnya, sebuah aplikasi MaxCompute mungkin perlu menarik data sebesar beberapa ratus megabyte dari Object Storage Service (OSS) sebelum dapat melayani permintaan. Jika langsung mendaftar setelah startup, trafik masuk akan gagal karena sumber daya belum siap. Fitur delayed service registration memungkinkan Anda menetapkan periode penundaan yang menunda pendaftaran layanan, memastikan aplikasi telah sepenuhnya diinisialisasi sebelum mulai melayani trafik.
Low-traffic warm-up
Sebuah instans yang baru dimulai sering berada dalam "keadaan dingin", di mana ia harus melakukan lazy-load connection pools, pre-warm cache, dan kompilasi just-in-time (JIT) pada kode hot-spot. Kapasitas penanganan permintaannya jauh lebih rendah dibandingkan instans yang telah berjalan lama. Dalam skenario terburuk, layanan bisa hang, menyebabkan banyak timeout dan error permintaan.
Contoh berikut menunjukkan perbedaan waktu respons untuk dua permintaan ke sebuah instans: satu dilakukan sebelum sumber daya sepenuhnya dimuat, dan satu lagi setelahnya. Jika sejumlah besar permintaan tiba saat instans masih memuat sumber daya, semua permintaan tersebut mungkin terblokir.
[arthas@37035]$ trace com.alibaba.mse.consumer.TestController eurekaRest -n 5 \
--skipJDKMethod false
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 105 ms, listenerId: 1
`---ts=2022-02-14 21:28:02;thread_name=http-nio-18099-exec-1;id=39;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@60e5272
`---[464.275852ms] com.alibaba.mse.consumer.TestController:eurekaRest()
`---[464.018509ms] org.springframework.web.client.RestTemplate:getForObject() #50
`---ts=2022-02-14 21:28:08;thread_name=http-nio-18099-exec-3;id=3b;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@60e5272
`---[8.46028ms] com.alibaba.mse.consumer.TestController:eurekaRest()
`---[8.402525ms] org.springframework.web.client.RestTemplate:getForObject() #50
Low-traffic warm-up mengontrol trafik dari aplikasi konsumen ke instans layanan baru saat launch, mencegah degradasi performa akibat cold-start dan melindungi instans dari lonjakan trafik mendadak. Trafik secara bertahap meningkat seiring waktu hingga mencapai durasi warm-up yang dikonfigurasi, setelah itu instans menerima trafik secara normal.
Low-traffic warm-up menggunakan trafik dari konsumen online. Hal ini mensyaratkan bahwa konsumen layanan tersebut juga terhubung ke MSE Microservices Governance. Untuk informasi lebih lanjut tentang cara kerja fitur ini, lihat Cara kerja low-traffic warm-up.
Service readiness probe
Kubernetes menyediakan mekanisme readiness probe. Selama penerapan, begitu instans baru lulus readiness probe-nya, instans lama akan dihentikan (perilaku tepatnya bergantung pada strategi deployment). Namun, Kubernetes menganggap aplikasi siap begitu port terbuka dan tidak dapat menentukan kapan layanan mikro benar-benar selesai diinisialisasi. Hal ini dapat menyebabkan Kubernetes menandai layanan sebagai siap sebelum mendaftar ke registri, lalu menghentikan instans lama — sehingga menghasilkan error service no provider/instance bagi konsumen.
Service readiness probe menyediakan titik akhir HTTP non-intrusif melalui agen yang memeriksa apakah aplikasi telah menyelesaikan pendaftaran. Titik akhir ini mengembalikan kode status 500 selama pendaftaran belum lengkap dan 200 setelah pendaftaran berhasil. Dengan mengonfigurasi readiness probe Kubernetes untuk menggunakan titik akhir ini, Anda memastikan bahwa konsumen selalu memiliki penyedia yang tersedia selama penerapan, mencegah error "no provider".
Menggunakan graceful start
Prasyarat
Catatan penggunaan
-
Graceful start saat ini hanya didukung untuk instans yang menggunakan registri layanan mikro (seperti Nacos) untuk penemuan layanan. Fitur ini tidak didukung untuk instans layanan mikro yang mengandalkan Kubernetes Services untuk penemuan.
-
Untuk aplikasi Spring Cloud, low-traffic warm-up hanya didukung untuk aplikasi yang menggunakan Nacos, ZooKeeper, atau Eureka sebagai registri.
-
Fitur low-traffic warm-up untuk Spring Cloud diimplementasikan berdasarkan load balancer default Spring Cloud:
ZoneAwareLoadBalancer,RoundRobinLoadBalancer, atauRandomLoadBalancer. Jika Anda mengubah konfigurasi load balancer aplikasi, fitur ini tidak akan berfungsi. -
Agar low-traffic warm-up berfungsi, aplikasi penyedia dan konsumen harus terhubung ke MSE Microservices Governance. Fitur ini tidak berlaku untuk aplikasi seperti gateway yang menerima trafik eksternal langsung melalui API yang diekspos.
Prosedur
Langkah 1: Aktifkan graceful start
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih . Di halaman yang muncul, klik kartu resource aplikasi yang ingin Anda kelola.
Di halaman detail aplikasi, klik Traffic management di panel navigasi kiri, lalu klik tab Graceful Start/Shutdown.
-
Di bagian Configuration Information, klik **Edit**, aktifkan toggle Graceful Start, lalu klik OK.
Langkah 2: Konfigurasi Kubernetes readiness probe
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik kluster target. Di panel navigasi kiri, pilih Workload > Stateless. Temukan aplikasi yang telah diterapkan, lalu klik Edit di kolom Actions. Di bagian Health Check, klik Enable di samping Readiness dan konfigurasikan parameter berikut. Setelah selesai, klik Update.
-
Path: /readiness. (Jika aplikasi Anda menggunakan versi agen sebelum 4.1.10, atur path menjadi /health. Untuk memeriksa versi agen, buka Konsol MSE. Buka Microservices Governance > Application Governance, klik aplikasi Anda, lalu pilih Node details. Versi agen ditampilkan di sebelah kanan.)
-
Port:
55199. -
Initial Delay (s): Kami menyarankan menetapkan nilai ini lebih besar daripada jumlah waktu startup aplikasi dan durasi delayed registration yang dikonfigurasi (default 0 detik). Namun, fitur tetap berfungsi dengan benar meskipun Anda tidak mengikuti rekomendasi ini.
-
Untuk informasi tentang parameter lainnya, lihat Buat workload tanpa status (Deployment). Setelah aplikasi restart, readiness probe hanya akan lulus setelah pendaftaran layanan selesai.
-
Operasi ini akan segera merestart aplikasi Anda. Jika Anda berada di lingkungan produksi, lakukan operasi ini selama jendela pemeliharaan yang dijadwalkan.
(Opsional) Konfigurasi durasi delayed registration
Pengaturan ini bersifat opsional dan dapat dikonfigurasi sesuai kebutuhan bisnis Anda. Untuk detail lebih lanjut, lihat delayed service registration. Ikuti langkah-langkah berikut:
-
Ikuti Langkah 1 dan Langkah 2 untuk membuka halaman graceful start, aktifkan fitur, dan konfigurasikan readiness probe layanan Kubernetes.
-
Ubah Configuration Information untuk Graceful Start and Shutdown. Klik arrow di sebelah kiri modul Graceful Start untuk memperluas pengaturannya. Di bidang Delayed Registration Duration (s), masukkan nilai, lalu klik OK.
Durasi delayed registration yang dikonfigurasi akan berlaku saat aplikasi dimulai berikutnya.
(Opsional) Sesuaikan durasi low-traffic warm-up
Mengaktifkan graceful start secara otomatis mengaktifkan fitur ini dengan durasi warm-up default 120 detik. Anda dapat menyesuaikan durasi ini sesuai kebutuhan bisnis:
-
Ikuti Langkah 1 dan Langkah 2 untuk membuka halaman graceful start, aktifkan fitur, dan konfigurasikan readiness probe layanan Kubernetes.
-
Ubah Configuration Information untuk Graceful Start and Shutdown. Klik arrow di sebelah kiri modul Graceful Start untuk memperluas pengaturannya. Klik Advanced Options. Di bidang Low-traffic Warm-up Duration (s), masukkan nilai, lalu klik OK.
-
Jika konsumen layanan yang sedang di-warm-up adalah gateway native cloud MSE, maka low-traffic warm-up yang dikonfigurasi di sini tidak akan berlaku. Sebagai gantinya, konfigurasikan pengaturan warm-up di gateway native cloud MSE. Di konsol gateway, klik instans gateway target. Di panel navigasi kiri, pilih Routes > Services. Temukan layanan tersebut, lalu di kolom Actions, klik More > Policies. Di tab Policies, di bawah Traffic Management > Load Balancing Configuration, klik Edit dan sesuaikan pengaturan Warm-up Time. Perhatikan bahwa kurva QPS warm-up default gateway bersifat linear, yang sedikit berbeda dari kurva kuadratik yang disediakan oleh MSE Microservices Governance, tetapi efek praktisnya serupa.
-
Durasi low-traffic warm-up yang disesuaikan akan berlaku saat aplikasi dimulai berikutnya.
-
Fitur low-traffic warm-up bekerja di sisi konsumen dengan menghitung bobot untuk setiap instans penyedia berdasarkan waktu startup-nya. Fitur ini kemudian menggunakan algoritma penyeimbangan beban untuk secara bertahap meningkatkan trafik ke aplikasi yang baru dimulai. Proses ini membantu menghangatkan layanan. Hal ini juga mensyaratkan konsumen layanan terhubung ke MSE Microservices Governance.
-
Saat pertama kali menggunakan fitur low-traffic warm-up, kami merekomendasikan menggunakan durasi warm-up default. Jika Anda mengamati bahwa warm-up tidak efektif atau menyebabkan kehilangan trafik, Anda dapat mengoptimalkannya dengan menyesuaikan parameter ini.
-
Untuk memastikan warm-up yang memadai, lihat Praktik terbaik untuk low-traffic warm-up.
Mengamati graceful start
Setelah menerapkan konfigurasi ini, Anda dapat melihat waktu startup dan shutdown instans beserta kurva QPS di halaman Graceful Start and Shutdown saat aplikasi Anda dimulai berikutnya.
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih . Di halaman yang muncul, klik kartu resource aplikasi yang ingin Anda kelola.
Di halaman detail aplikasi, klik Traffic management di panel navigasi kiri, lalu klik tab Graceful Start/Shutdown.
-
Di subtab Start and Shutdown Overview, klik sebuah instans di sebelah kiri. Di sebelah kanan, Anda dapat melihat perubahan QPS dan event terkait yang terjadi selama fase startup.
Anda akan melihat event seperti pendaftaran layanan, warm-up dimulai, dan warm-up selesai terjadi secara berurutan. Event 'Kubernetes readiness probe passed' juga terjadi setelah event 'service registration'. Kurva QPS secara bertahap meningkat ke nilai maksimumnya selama durasi warm-up (default 120 detik) alih-alih melonjak tiba-tiba. Jika urutan event atau bentuk kurva QPS tidak sesuai ekspektasi selama startup, lihat FAQ untuk troubleshooting.
Dalam konfigurasi khas, readiness probe Kubernetes aplikasi dikonfigurasi untuk menggunakan titik akhir 55199/readiness, dan waktu siap minimumnya (minReadySeconds) diatur ke 120 detik, sesuai dengan durasi warm-up default.