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:

./mvnw quarkus:add-extension -Dextensions="smallrye-fault-tolerance"

Setelah itu, Anda bisa langsung menggunakan berbagai anotasi bawaan MicroProfile Fault Tolerance di dalam service Anda.

Anotasi-Anotasi Penting dalam Fault Tolerance

AnotasiFungsiContoh Kasus
@RetryMencoba ulang operasi yang gagal secara otomatis.Memanggil ulang API eksternal yang kadang timeout.
@TimeoutMemberi batas waktu maksimum eksekusi.Menghentikan operasi yang terlalu lama berjalan.
@FallbackMenyediakan hasil cadangan jika terjadi kegagalan.Mengambil data dari cache jika service utama gagal.
@CircuitBreakerMenghentikan sementara panggilan ke service yang sering gagal.Melindungi sistem dari cascading failure.
@BulkheadMembatasi jumlah panggilan bersamaan (concurrent calls).Mencegah overload pada service tertentu.
@AsynchronousMenjalankan 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 metode defaultWeather().

  • @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

AspekKeterangan
Nama FiturMicroProfile Fault Tolerance
Implementasi di QuarkusSmallRye Fault Tolerance
TujuanMenjaga kestabilan dan ketersediaan layanan saat terjadi error
KelebihanSederhana, otomatis, dan terintegrasi dengan monitoring bawaan Quarkus
Cara AktifkanTambahkan 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

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android