Memahami Fault Tolerance di Quarkus MicroProfile
Dalam pengembangan aplikasi berbasis microservices, kegagalan adalah hal yang pasti terjadi entah itu layanan yang lambat, API eksternal yang tidak stabil, atau koneksi jaringan yang tiba-tiba putus.
Nah, Quarkus punya solusi bawaan untuk menghadapi hal ini melalui MicroProfile Fault Tolerance, yang diimplementasikan oleh SmallRye Fault Tolerance.Dengan fitur ini, Quarkus membantu aplikasi Anda tetap stabil, tangguh, dan tidak langsung crash saat terjadi gangguan.
Apa Itu MicroProfile Fault Tolerance?
MicroProfile Fault Tolerance adalah salah satu spesifikasi di dalam Eclipse MicroProfile yang berfokus pada ketahanan layanan (service resilience).
Tujuannya adalah memberikan mekanisme otomatis agar aplikasi bisa:
-
Mendeteksi dan menangani kegagalan sementara (transient failure)
-
Mencegah efek domino dari layanan yang rusak
-
Memberikan respon alternatif (fallback) ketika sistem utama gagal
Di Quarkus, semua ini sudah diurus oleh SmallRye Fault Tolerance, tanpa perlu konfigurasi manual yang rumit.
Cara Mengaktifkan Fault Tolerance di Quarkus
Untuk mulai menggunakan fitur ini, cukup tambahkan ekstensi berikut di proyek Anda:
Setelah itu, Anda bisa langsung menggunakan berbagai anotasi bawaan MicroProfile Fault Tolerance di dalam service Anda.
Anotasi-Anotasi Penting dalam Fault Tolerance
Anotasi | Fungsi | Contoh Kasus |
---|---|---|
@Retry | Mencoba ulang operasi yang gagal secara otomatis. | Memanggil ulang API eksternal yang kadang timeout. |
@Timeout | Memberi batas waktu maksimum eksekusi. | Menghentikan operasi yang terlalu lama berjalan. |
@Fallback | Menyediakan hasil cadangan jika terjadi kegagalan. | Mengambil data dari cache jika service utama gagal. |
@CircuitBreaker | Menghentikan sementara panggilan ke service yang sering gagal. | Melindungi sistem dari cascading failure. |
@Bulkhead | Membatasi jumlah panggilan bersamaan (concurrent calls). | Mencegah overload pada service tertentu. |
@Asynchronous | Menjalankan operasi di thread terpisah. | Memproses permintaan yang berjalan lama tanpa blocking. |
Contoh Implementasi di Quarkus
Berikut contoh sederhana penerapan beberapa anotasi di atas:
import org.eclipse.microprofile.faulttolerance.*;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
@Path("/weather")
@Produces(MediaType.APPLICATION_JSON)
public class WeatherService {
@GET
@Path("/{city}")
@Timeout(2000) // timeout maksimal 2 detik
@Retry(maxRetries = 3, delay = 500) // coba ulang 3 kali jika gagal
@Fallback(fallbackMethod = "defaultWeather") // fallback jika semua gagal
@CircuitBreaker(requestVolumeThreshold = 4, failureRatio = 0.5, delay = 5000)
public String getWeather(@PathParam("city") String city) {
// simulasi pemanggilan API eksternal yang tidak stabil
if (Math.random() > 0.7) {
return "{\"city\":\"" + city + "\", \"temp\":29}";
}
throw new RuntimeException("Remote API failure");
}
public String defaultWeather(String city) {
return "{\"city\":\"" + city + "\", \"temp\":\"N/A\"}";
}
}
Penjelasan:
-
@Timeout(2000)
→ jika proses lebih dari 2 detik, langsung gagal. -
@Retry
→ coba ulang sampai 3 kali dengan jeda 500ms antar percobaan. -
@Fallback
→ jika semua gagal, jalankan metodedefaultWeather()
. -
@CircuitBreaker
→ jika 50% dari 4 panggilan terakhir gagal, hentikan panggilan ke API selama 5 detik.
Dengan kombinasi ini, aplikasi Anda menjadi lebih tahan terhadap gangguan eksternal, dan tetap bisa memberikan respon yang layak kepada pengguna.
Monitoring dan Observasi
Setelah Fault Tolerance aktif, Quarkus secara otomatis menampilkan metrik terkait di endpoint:
/q/metrics
Beberapa metrik yang bisa dilihat antara lain:
-
Jumlah retry yang dilakukan
-
Berapa kali circuit breaker aktif
-
Berapa banyak fallback yang digunakan
-
Waktu rata-rata eksekusi
Integrasi ini sangat berguna untuk DevOps dan tim SRE yang memantau performa aplikasi di produksi.
Analogi untuk Pengguna Spring Boot
Bagi Anda yang berasal dari ekosistem Spring Boot, konsep ini mirip dengan kombinasi:
-
Resilience4j atau Spring Cloud Circuit Breaker → untuk retry, circuit breaker, fallback
-
@Async dan @Timeout → untuk operasi non-blocking
Bedanya, di Quarkus semua ini sudah terintegrasi secara native melalui spesifikasi MicroProfile, bukan library eksternal.
Kesimpulan
Aspek | Keterangan |
---|---|
Nama Fitur | MicroProfile Fault Tolerance |
Implementasi di Quarkus | SmallRye Fault Tolerance |
Tujuan | Menjaga kestabilan dan ketersediaan layanan saat terjadi error |
Kelebihan | Sederhana, otomatis, dan terintegrasi dengan monitoring bawaan Quarkus |
Cara Aktifkan | Tambahkan ekstensi quarkus-smallrye-fault-tolerance |
Dengan memahami dan menerapkan MicroProfile Fault Tolerance, Anda tidak hanya menulis REST API yang berfungsi, tetapi juga REST API yang tangguh dan siap untuk dunia nyata di mana kegagalan adalah hal biasa, tapi downtime bukan pilihan.
Comments
Post a Comment