Saat merilis aplikasi, penggunaan penundaan tetap untuk inisialisasi dapat mengurangi efisiensi penerapan atau menyebabkan error jika konfigurasinya tidak tepat. Pendaftaran kondisional untuk graceful start memicu pendaftaran layanan hanya setelah logika bisnis mengonfirmasi bahwa layanan telah siap. Pendekatan ini memberikan kontrol yang presisi terhadap waktu pendaftaran layanan, sehingga memastikan layanan hanya menerima traffic setelah benar-benar siap dan mencegah penundaan penerapan yang tidak perlu.
Informasi latar belakang
Dalam skenario yang melibatkan inisialisasi asinkron atau pemuatan resource, penundaan tetap sering digunakan sebelum pendaftaran microservice. Ini merupakan salah satu kemampuan graceful start yang disediakan oleh Microservice Engine (MSE). Metode ini mencegah aplikasi melayani permintaan sebelum proses inisialisasi selesai sepenuhnya, yang dapat menyebabkan kegagalan pada layanan pemanggil. Metode ini mudah diimplementasikan dan secara efektif mengurangi exception panggilan akibat ketidaksiapan layanan dalam sebagian besar situasi.
Namun, dalam beberapa skenario kompleks, pendaftaran berbasis penundaan tetap mungkin kurang presisi atau adaptif. Jika penundaan tetap tidak sesuai dengan kebutuhan timing aplikasi Anda, Anda dapat menggunakan mekanisme pendaftaran kondisional yang dijelaskan pada bagian berikut.
Fitur ini mengharuskan Anda menambahkan logika ke kode bisnis untuk mengatur properti sistem. Pertimbangkan biaya modifikasi kode ini sebelum melanjutkan. Jika Anda baru mengenal fitur graceful start dan shutdown dari MSE, gunakan solusi pendaftaran berbasis penundaan tetap terlebih dahulu karena mencakup sebagian besar skenario aplikasi tipikal.
Fitur ini berada dalam pratinjau publik dan memerlukan MSE agent versi 4.6.0 atau lebih baru. Untuk informasi selengkapnya tentang cara menentukan versi agent, lihat Specify an MSE agent version.
Cara kerjanya
Agen MSE secara terus-menerus melakukan polling terhadap parameter yang ditentukan dalam parameter startup atau variabel lingkungan. Setelah aplikasi menyelesaikan logika inisialisasi kustomnya, kode mengatur nilai parameter tersebut menjadi true. Saat agen mendeteksi bahwa kondisi ini terpenuhi, pendaftaran microservice dipicu.
Jika Anda menggunakan fitur ini dengan pemeriksaan kesiapan Kubernetes, alur startup dan publikasi aplikasi adalah sebagai berikut:
Pod dimulai → Aplikasi dalam kontainer memulai inisialisasi bisnis → Bisnis siap dan kondisi diatur dalam kode → Agen memulai pendaftaran microservice → Pendaftaran microservice berhasil dan layanan mulai menerima traffic microservice → Readiness probe Kubernetes lolos → Status pod berubah menjadi Ready.
Prosedur
Langkah 1: Aktifkan pendaftaran bersyarat dalam parameter startup
Dalam parameter startup aplikasi Anda atau variabel lingkungan, tambahkan konfigurasi berikut untuk mendeklarasikan kunci properti sistem untuk pendaftaran bersyarat.
Format:
mse_lossless_register_condition_on_system_property_true="YOUR_CONDITION_KEY"Contoh konfigurasi:
# Gunakan kunci properti sistem kustom PRODUCT_PRELOAD_COMPLETED dengan nilai true sebagai kondisi pendaftaran. mse_lossless_register_condition_on_system_property_true="PRODUCT_PRELOAD_COMPLETED"
Langkah 2: Modifikasi kode bisnis untuk mengatur kondisi kesiapan
Setelah aplikasi menyelesaikan seluruh logika inisialisasi yang diperlukan, atur kunci properti sistem yang telah Anda definisikan pada langkah sebelumnya menjadi true dalam kode Anda.
Kode berikut menunjukkan skenario di mana cache produk dimuat secara asinkron. Saat cache selesai dimuat, metode System.setProperty digunakan untuk mengatur kondisi kesiapan, yang kemudian memicu pendaftaran layanan.
@Component
public class HotProductInitComponent {
public ScheduledExecutorService executor = Executors.newScheduledThreadPool(
1,
new NameThreadFactory("product-preload-pool"));
@Value("${demo.product.init.delay.seconds:3}")
public long initDelaySeconds;
public void asyncLoadPoductDataIntoCache() {
executor.schedule(() -> {
// ...
// ********** Start of new code **********
System.setProperty("PRODUCT_PRELOAD_COMPLETED", "true");
// ********** End of new code **********
}, initDelaySeconds, TimeUnit.SECONDS);
}
}Pertimbangan
Anda dapat menggunakan fitur ini bersama readiness probe pada endpoint 55199/readiness.
Setelah mengaktifkan pendaftaran kondisional, Anda tidak perlu lagi mengonfigurasi pendaftaran tertunda untuk graceful start. Setelah mengonfigurasi parameter
mse_lossless_register_condition_on_system_property_truedalam parameter startup atau variabel lingkungan, fitur ini akan diaktifkan secara otomatis tanpa perlu mengaktifkan opsi graceful start secara terpisah.