Ketika memperbarui aplikasi daring, pastikan kontinuitas layanan selama periode penghentian dan restart. Untuk menerapkan pembaruan, rollback, penskalaan masuk, atau reset aplikasi, Anda dapat mengonfigurasi fitur pemutusan graceful dari Microservices Engine (MSE) Microservices Governance guna memastikan aplikasi dimatikan tanpa memengaruhi bisnis. Topik ini menjelaskan penggunaan, manfaat, dan cara menggunakan fitur pemutusan graceful di konsol MSE.
Informasi latar belakang
Dalam skenario konkurensi tinggi, jika instance aplikasi penyedia langsung dimatikan, konsumen tidak dapat memahami status penyedia secara real-time karena karakteristik pemanggilan mikro. Konsumen terus meneruskan permintaan ke penyedia yang telah dimatikan, menyebabkan kesalahan permintaan dan kehilangan trafik.
Cara kerja pemutusan graceful
Saat Penyedia A dimatikan, Microservices Registry diberitahu tentang peristiwa pemutusan. Namun, Konsumen B mungkin tidak menyadari peristiwa tersebut secara real-time dan terus memanggil Penyedia A setelah dimatikan. Fitur pemutusan graceful menyelesaikan masalah ini. Setelah Penyedia A menerima perintah pemutusan, ia menunggu sebelum dimatikan dan menambahkan tag khusus pada respons permintaan selama periode penundaan. Setelah Konsumen B menerima respons dengan tag khusus, ia secara proaktif mendapatkan informasi instance aplikasi dari Microservices Registry untuk memahami status Penyedia A secara real-time. Penyedia A juga menunggu hingga semua permintaan dalam proses selesai sebelum dimatikan.
Jika MSE Microservices Governance diaktifkan untuk aplikasi, fitur pemutusan graceful secara otomatis diaktifkan. Namun, untuk menggunakan kemampuan notifikasi proaktif, Anda harus mengaktifkannya secara manual. Fitur mulai dan matikan graceful MSE juga menyediakan observabilitas untuk membantu menentukan apakah aplikasi dimatikan secara graceful.
Jika pemutusan graceful diaktifkan untuk aplikasi di kluster Kubernetes, hook lifecycle.preStop disuntikkan ke pod terkait untuk menerapkan pemutusan graceful sebelum pod berhenti. Oleh karena itu, disarankan agar Anda tidak mengonfigurasi hook preStop kustom. Jika hook preStop kustom digunakan untuk mencabut pendaftaran aplikasi dari Microservices Registry, logika terkait dapat sepenuhnya dihapus. Sebagai gantinya, Anda dapat menggunakan hook preStop yang secara otomatis disuntikkan untuk pemutusan graceful.
Jika Anda harus melakukan beberapa operasi pemutusan graceful dan hook preStop kustom telah dikonfigurasikan untuk container bisnis Anda, hook preStop untuk pemutusan graceful tidak akan disuntikkan ke container bisnis. Sebagai gantinya, sebuah container sidecar bernama gracefulshutdown disuntikkan, dan hook preStop untuk pemutusan graceful disuntikkan ke dalam container sidecar. Secara default, container sidecar berbagi ruang nama jaringan dengan container bisnis. Sebelum pod berhenti, hook preStop dari container sidecar juga dapat digunakan untuk menerapkan pemutusan graceful container bisnis.
Untuk memastikan bahwa hook preStop dari container sidecar berhasil dieksekusi, Anda perlu menentukan durasi sleep minimal 30 detik untuk hook preStop kustom dari container bisnis. Hal ini memungkinkan permintaan dalam proses diselesaikan sepenuhnya.
Setiap container sidecar mengadopsi konfigurasi 0,05 core CPU dan 50 MiB memori karena konsumsi sumber dayanya rendah.
Dalam skenario Kubernetes, pemutusan graceful diterapkan melalui hook preStop. Saat ini, pemutusan graceful hanya didukung dalam skenario di mana pod berhenti secara normal, seperti penskalaan masuk, restart, dan upgrade bergulir. Pemutusan graceful tidak didukung dalam skenario di mana pod berhenti secara abnormal, seperti OOM kill.
Aktifkan pemutusan graceful
Jika aplikasi Anda diterapkan di kluster Alibaba Cloud Container Service for Kubernetes (ACK), pemutusan graceful secara otomatis diaktifkan setelah MSE Microservices Governance diaktifkan. Tidak ada tindakan lebih lanjut yang diperlukan.
Jika aplikasi Anda diterapkan pada instance Alibaba Cloud Elastic Compute Service (ECS), tambahkan perintah berikut ke skrip shutdown aplikasi Anda dan jalankan perintah tersebut secara prioritas selama eksekusi skrip:
curl http://127.0.0.1:54199/offline 2>/tmp/null; sleep 30;
Amati pemutusan graceful
Jika fitur pemutusan graceful diaktifkan dan aplikasi dimatikan, Anda dapat mengamati bahwa trafik aplikasi menjadi tidak tersedia dalam waktu singkat dan nilai permintaan per detik (QPS) turun menjadi nol di halaman tata kelola aplikasi.
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi sisi kiri, pilih . Di halaman yang muncul, klik kartu sumber daya aplikasi yang ingin Anda kelola.
Di halaman detail aplikasi, klik Traffic management di panel navigasi sisi kiri, dan klik tab Graceful Start/Shutdown.
Di subtab Start and Shutdown Overview, Anda dapat melihat peristiwa yang terjadi selama proses mulai dan matikan graceful aplikasi dalam periode terakhir. Temukan dan klik aplikasi yang ingin Anda amati di panel sisi kiri. Informasi visual di panel sisi kanan menunjukkan bahwa aplikasi menjalankan proses pemutusan graceful dan trafik dengan cepat turun menjadi nol setelah proses selesai. Tidak ada trafik yang mengalir ke aplikasi sebelum aplikasi dihentikan.

Jika data QPS tidak segera turun menjadi nol setelah peristiwa pemutusan berhasil terjadi, periksa panggilan permintaan non-mikro yang mungkin mengonsumsi trafik, seperti panggilan lokal.
Peristiwa pemutusan aplikasi dilaporkan hanya jika versi agen yang digunakan lebih baru dari 4.2.0. Jika peristiwa ini tidak diamati, Anda dapat meningkatkan versi agen.
Aktifkan kemampuan notifikasi proaktif
Definisi
Kemampuan notifikasi proaktif adalah fitur lanjutan dari pemutusan graceful. Secara default, kemampuan ini dimatikan. Anda dapat menggunakan fitur pemutusan graceful MSE untuk menyelesaikan masalah dalam sebagian besar skenario. Namun, jika aplikasi menggunakan framework Spring Cloud, kesalahan pemanggilan konsumen mungkin terjadi. Dalam kasus ini, Anda dapat mengaktifkan kemampuan notifikasi proaktif. Setelah diaktifkan, penyedia secara proaktif memberi tahu konsumen selama fase pemutusan. Setelah pemberitahuan diterima, konsumen tidak lagi meneruskan permintaan ke penyedia.
Prasyarat
Microservices Governance telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan Microservices Governance.
Microservices Governance diaktifkan untuk aplikasi mikro di kluster Container Service for Kubernetes (ACK). Untuk informasi lebih lanjut, lihat Aktifkan Microservices Governance untuk aplikasi mikro di kluster ACK.
Catatan penggunaan
Microservices Governance tidak mendukung pemutusan graceful untuk aplikasi berikut:
Aplikasi non-Java.
Aplikasi non-WebFlux atau non-Spring MVC.
Aplikasi penyedia hilir yang aplikasi konsumennya bukan aplikasi mikro.
Aplikasi konsumen dan penyedia yang Microservices Governance dinonaktifkan.
Fitur pemutusan graceful memerlukan waktu tertentu untuk mengeksekusi semua permintaan dalam proses sebelum aplikasi dimatikan. Anda harus mengatur parameter terminationGracePeriodSeconds ke nilai lebih dari 30 di konsol ACK. Kami sarankan Anda mengatur parameter ini ke 90. Nilai default parameter ini adalah 30. Jika Anda menggunakan nilai default 30, hook shutdown aplikasi mungkin gagal dieksekusi. Akibatnya, sumber daya tertentu tidak dapat dilepaskan saat aplikasi dimatikan.
Aktifkan notifikasi proaktif untuk pemutusan graceful
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi sisi kiri, pilih . Di halaman yang muncul, klik kartu sumber daya aplikasi yang ingin Anda kelola.
Di halaman detail aplikasi, klik Traffic management di panel navigasi sisi kiri, dan klik tab Graceful Start/Shutdown.
Di bagian Settings, klik Revised. Di panel Pengaturan Mulai dan Matikan Graceful, perluas blok Graceful Shutdown, aktifkan saklar Proactive Notification, lalu klik OK.