All Products
Search
Document Center

Microservices Engine:Graceful shutdown

Last Updated:Aug 26, 2026

Graceful shutdown menjaga agar proses shutdown dan restart aplikasi online tetap transparan bagi klien: permintaan bisnis normal tidak terpengaruh sejak aplikasi berhenti hingga kembali berjalan dan melanjutkan layanan. Konfigurasikan graceful shutdown saat melakukan deployment, penghentian, rollback, scale-in, atau reset aplikasi agar aplikasi ditutup dengan benar. Topik ini menjelaskan cara kerja graceful shutdown, cara mengaktifkannya dan mengamatinya, serta catatan penggunaan yang berlaku.

Mengapa Anda memerlukan graceful shutdown

Dalam arsitektur microservice, jika instans penyedia dimatikan secara langsung selama periode konkurensi tinggi, instans konsumen tidak dapat mendeteksi perubahan status instans penyedia secara tepat waktu. Akibatnya, konsumen terus meneruskan permintaan ke instans yang sudah offline, sehingga menyebabkan error permintaan dan kehilangan traffic.

Cara kerja

Dalam penjelasan berikut, penyedia A adalah aplikasi yang dimatikan dan konsumen B adalah aplikasi yang memanggilnya. Saat penyedia A dimatikan, ia memberi notifikasi ke Microservices Registry, tetapi konsumen B mungkin tidak mendeteksi perubahan tersebut secara real time dan terus memanggil penyedia A setelah ia offline. Untuk mencegah hal ini, penyedia A memasuki periode tunggu segera setelah menerima perintah shutdown dan menambahkan penanda khusus pada respons semua permintaan yang diterimanya selama periode tersebut. Ketika konsumen B menerima respons semacam itu dan mengenali penandanya, ia mengambil daftar instans layanan dari Microservices Registry sekali dan mendeteksi status terbaru penyedia A secara real time. Penyedia A juga menunggu selama periode tertentu sebelum benar-benar dimatikan, sehingga semua permintaan in-flight yang sedang diproses sebelum shutdown dapat diselesaikan alih-alih diputus saat penyedia A berhenti.

Catatan

Untuk setiap aplikasi yang terhubung ke MSE, graceful shutdown diaktifkan secara default, tetapi proactive notification harus dikonfigurasi secara manual. MSE Graceful Start and Shutdown juga menyediakan observabilitas yang membantu Anda menentukan apakah aplikasi dimatikan secara graceful.

Saat aplikasi microservice di lingkungan Kubernetes terhubung ke MSE Microservices Governance, operasi graceful shutdown disuntikkan ke dalam Pod sebagai hook lifecycle.preStop dan dijalankan sebelum Pod berhenti. Oleh karena itu, kami menyarankan agar Anda tidak mengonfigurasi hook preStop kustom. Jika hook preStop Anda hanya mendaftarkan aplikasi keluar dari Microservices Registry, Anda dapat menghapusnya dan menggunakan hook preStop yang secara otomatis disuntikkan oleh graceful shutdown.

Jika bisnis Anda memerlukan operasi terminasi graceful dan Anda telah mengonfigurasi hook preStop kustom untuk kontainer aplikasi, graceful shutdown tidak lagi menyuntikkan hook preStop-nya ke dalam kontainer aplikasi Anda. Sebagai gantinya, graceful shutdown menyuntikkan kontainer sidecar bernama gracefulshutdown dan menyuntikkan hook preStop graceful shutdown ke dalam kontainer tersebut. Karena kontainer sidecar secara default berbagi namespace jaringan dengan kontainer aplikasi, menjalankan hook preStop kontainer sidecar sebelum Pod berhenti juga mencapai graceful shutdown untuk kontainer aplikasi.

Untuk memastikan hook preStop kontainer sidecar dapat selesai dijalankan, sertakan perintah sleep minimal 30 detik dalam hook preStop kustom kontainer aplikasi agar permintaan in-flight sempat diproses. Atur parameter terminationGracePeriodSeconds di level Pod sesuai yang dijelaskan dalam Catatan penggunaan.

Catatan
  • Kontainer sidecar mengonsumsi sumber daya minimal. Pengaturan saat ini adalah CPU: 50m, Memory: 50Mi.

  • Di Kubernetes, graceful shutdown diimplementasikan berdasarkan hook preStop. Oleh karena itu, fitur ini saat ini hanya mendukung graceful shutdown untuk terminasi Pod normal, seperti scale-in, restart, dan rolling upgrade. Fitur ini tidak mendukung graceful shutdown untuk terminasi abnormal, seperti out-of-memory (OOM) kill.

Aktifkan graceful shutdown

Sebelum mengaktifkan graceful shutdown, tinjau Prasyarat dan Catatan penggunaan. Aktifkan graceful shutdown berdasarkan lingkungan tempat aplikasi Anda dideploy:

  • Jika aplikasi Anda dideploy di lingkungan Container Service for Kubernetes (ACK), tidak diperlukan operasi tambahan untuk mengaktifkan graceful shutdown setelah aplikasi terhubung ke MSE Microservices Governance. Secara default, graceful shutdown diaktifkan secara otomatis. Namun, jika kontainer aplikasi sudah memiliki hook preStop kustom, atau jika Pod masih menggunakan nilai default parameter terminationGracePeriodSeconds yaitu 30, Anda juga harus menyelesaikan konfigurasi yang dijelaskan dalam Cara kerja dan Catatan penggunaan.

  • Jika aplikasi Anda dideploy di lingkungan Elastic Compute Service (ECS), tambahkan konten berikut ke dalam skrip shutdown aplikasi dan jalankan di awal skrip. Permintaan ke /offline memulai proses graceful shutdown, dan sleep 30 memberikan waktu agar permintaan in-flight sempat diproses sebelum skrip dilanjutkan.

    curl http://127.0.0.1:54199/offline 2>/tmp/null; sleep 30;

Untuk memastikan graceful shutdown berjalan efektif, lihat Amati graceful shutdown.

Amati graceful shutdown

Setelah graceful shutdown diterapkan pada aplikasi Anda, Anda dapat mengamati pada halaman Application Governance bahwa traffic ke instans yang sedang dihentikan dialihkan dalam waktu sangat singkat dan QPS-nya turun cepat ke 0.

  1. Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance. Pada halaman yang muncul, klik kartu resource aplikasi yang ingin Anda kelola.

  3. Pada halaman detail aplikasi, klik Traffic management di panel navigasi kiri, lalu klik tab Graceful Start/Shutdown.

  4. Pada tab Start and Shutdown Overview, lihat event yang terjadi selama proses start dan shutdown terbaru aplikasi. Di daftar instans yang telah dimulai dan dimatikan di sebelah kiri, temukan instans yang sedang dihentikan yang ingin Anda lihat, lalu klik instans tersebut.

Detail di sebelah kanan menunjukkan bahwa instans menjalankan proses graceful shutdown, traffic dialihkan dengan cepat setelah proses selesai, dan tidak ada traffic tambahan yang masuk ke instans tersebut sebelum berhenti.

Penting
  • Jika QPS tidak turun ke 0 dengan cepat setelah event graceful shutdown berhasil dibuat, pertama-tama periksa apakah traffic berasal dari sumber selain panggilan microservice, seperti panggilan lokal.

  • Event "application stopped" hanya dilaporkan oleh agen versi 4.2.0 atau lebih baru. Jika Anda tidak melihat event ini, pertimbangkan untuk melakukan upgrade agen.

Proactive notification

Apa itu proactive notification

Proactive notification adalah fitur lanjutan dari graceful shutdown dan dimatikan secara default. Dalam sebagian besar skenario, solusi shutdown yang disediakan oleh MSE Graceful Start and Shutdown sudah cukup untuk menyelesaikan masalah. Aktifkan proactive notification jika aplikasi yang akan dimatikan menggunakan framework Spring Cloud dan panggilan konsumen gagal saat aplikasi dimatikan. Setelah Anda mengaktifkan proactive notification, instans penyedia secara proaktif memberi notifikasi kepada konsumen layanan selama fase shutdown, dan konsumen yang diberi notifikasi berhenti mengirim permintaan ke instans penyedia tersebut.

Prasyarat

Catatan penggunaan

MSE Microservices Governance belum mendukung graceful shutdown untuk aplikasi berikut:

  • Aplikasi yang tidak dikembangkan dengan Java.

  • Aplikasi yang tidak dikembangkan berdasarkan WebFlux atau Spring MVC.

  • Aplikasi penyedia downstream yang konsumennya bukan aplikasi microservice.

  • Aplikasi yang aplikasi konsumen atau aplikasi penyedianya tidak terhubung ke MSE Microservices Governance. Baik aplikasi konsumen maupun aplikasi penyedia harus terhubung ke MSE Microservices Governance untuk mencapai graceful shutdown.

Catatan

Proses graceful shutdown menunggu selama periode tertentu untuk memastikan semua permintaan in-flight ke instans yang sedang dihentikan selesai diproses. Oleh karena itu, nilai parameter terminationGracePeriodSeconds dalam spesifikasi Pod Kubernetes Anda (nilai default: 30) harus lebih besar dari 30. Kami menyarankan Anda mengaturnya menjadi 90. Jika Anda menggunakan nilai default 30, shutdown hook aplikasi mungkin tidak sempat selesai dijalankan, dan beberapa resource tidak dapat dilepas dengan benar saat aplikasi berhenti.

Aktifkan proactive notification

  1. Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance. Pada halaman yang muncul, klik kartu resource aplikasi yang ingin Anda kelola.

  3. Pada halaman detail aplikasi, klik Traffic management di panel navigasi kiri, lalu klik tab Graceful Start/Shutdown.

  4. Pada bagian Settings, klik Modify, klik bagian Graceful Shutdown, aktifkan Proactive Notification, lalu klik OK.

Untuk memastikan proactive notification berjalan efektif, amati proses shutdown berikutnya dari aplikasi seperti yang dijelaskan dalam Amati graceful shutdown.

Referensi