Ketika penyedia layanan High-speed Service Framework (HSF) memiliki instans yang tidak sehat, konsumen tidak memiliki cara bawaan untuk mendeteksinya. Permintaan yang diarahkan ke instans tersebut gagal, sehingga menurunkan ketersediaan konsumen. Fitur penghapusan instans outlier mengatasi masalah ini dengan memantau instans penyedia secara terus-menerus, secara otomatis mengeluarkan instans yang tidak sehat dari pool load balancing, dan memulihkannya setelah sembuh.
Cara kerja
Pertimbangkan sistem di mana Aplikasi A memanggil instans dari Aplikasi B, C, dan D. Jika Aplikasi B memiliki satu instans yang tidak sehat, sedangkan Aplikasi C dan D masing-masing memiliki dua instans, sebagian permintaan dari Aplikasi A akan gagal. Seiring bertambahnya jumlah instans penyedia yang tidak sehat, performa keseluruhan Aplikasi A menurun.

Untuk melindungi Aplikasi A, konfigurasikan kebijakan outlier ejection di sisi konsumen. Enterprise Distributed Application Service (EDAS) kemudian mengelola setiap instans penyedia melalui siklus hidup berikut:
Detect. EDAS memantau instans penyedia dan mengidentifikasi instans yang laju error-nya melebihi ambang batas yang dikonfigurasi dalam jendela waktu statistik.
Eject. EDAS menghapus instans yang tidak sehat dari pool load balancing sesuai dengan rasio maksimum penghapusan instans. Permintaan dari Aplikasi A tidak lagi diarahkan ke instans yang di-eject.
Probe. EDAS secara berkala memeriksa apakah instans yang di-eject telah pulih. Interval probe dimulai dari waktu unit deteksi pemulihan yang dikonfigurasi dan meningkat secara linear pada setiap probe gagal berturut-turut.
Cap. Ketika jumlah probe gagal berturut-turut mencapai nilai maksimum yang dikonfigurasi, interval probe berhenti meningkat dan tetap pada nilai maksimumnya.
Restore. Setelah instans yang di-eject pulih, EDAS menambahkannya kembali ke pool dan mengatur ulang interval probe ke nilai awal.
Jika rasio instans yang tidak sehat melebihi rasio maksimum penghapusan instans, EDAS hanya meng-eject instans hingga batas rasio tersebut. Hal ini mencegah penghapusan terlalu banyak instans sekaligus.
Jika penyedia hanya memiliki satu instans yang tersedia, EDAS tidak meng-eject-nya, meskipun laju error-nya melebihi ambang batas.
Buat kebijakan outlier ejection
Aplikasi HSF mendukung kebijakan outlier ejection pada dua tingkatan:
Tingkat aplikasi — Berlaku untuk semua layanan yang disediakan oleh aplikasi. Gunakan
"ipDimension": truedalam konfigurasi.Tingkat layanan — Menargetkan layanan dan versi tertentu. Kebijakan ini memiliki prioritas lebih tinggi daripada kebijakan tingkat aplikasi.
Sebelum memulai, pastikan Anda telah:
Men-deploy aplikasi HSF di EDAS
Memiliki akses ke Konsol EDAS
Langkah 1: Buka manajemen konfigurasi
Masuk ke Konsol EDAS.
Di panel navigasi sebelah kiri, pilih Application Management > Microservice Configurations > Configurations.
Di bilah navigasi atas, pilih Wilayah. Pada halaman Configurations, pilih namespace mikroservis dari daftar drop-down.
Klik Create Configuration.
Langkah 2: Atur parameter kebijakan
Pada panel Create Configuration, atur parameter berikut:

| Parameter | Deskripsi |
|---|---|
| Region | Diisi otomatis dengan wilayah yang Anda pilih. Tidak dapat diubah. |
| Microservice Namespace | Diisi otomatis dengan namespace yang Anda pilih. Tidak dapat diubah. |
| Data ID | Masukkan ID dalam format <App ID>.QOSCONFIG. Temukan App ID di halaman detail aplikasi. |
| Group | Ditetapkan ke HSF. Tidak dapat diubah. |
| Data encryption | Aktifkan untuk mengenkripsi data kebijakan sensitif dan mengurangi risiko kebocoran data. |
| Configuration Format | Pilih format data. Sistem memvalidasi konten berdasarkan format ini. |
| Configuration Content | Masukkan konfigurasi kebijakan dalam format JSON. Lihat contoh di bawah. |
Langkah 3: Masukkan konfigurasi kebijakan
Gunakan contoh JSON berikut sebagai templat. Ganti nilai parameter sesuai kebutuhan Anda.
Kebijakan tingkat aplikasi
Konfigurasi ini berlaku untuk semua layanan di bawah aplikasi. Atur "ipDimension": true untuk mengaktifkan pelacakan per instans.
{
"DEFAULT": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10,
"ipDimension": true
}
}Kebijakan tingkat layanan
Definisikan blok DEFAULT sebagai garis dasar dan tambahkan blok "service:version" untuk override spesifik layanan. Blok tingkat layanan memiliki prioritas lebih tinggi.
{
"DEFAULT": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10
},
"service:version": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10
}
}Ganti service:version dengan nama layanan dan versi aktual, misalnya com.alibaba.edas.OrderService:1.0.0.
Langkah 4: Simpan kebijakan
Klik Create di bagian bawah panel.
Referensi parameter
Konfigurasikan outlier ejection melalui manajemen konfigurasi (properti JSON) atau parameter JVM -D. Pengaturan manajemen konfigurasi memiliki prioritas lebih tinggi daripada parameter -D.
| Parameter | Properti | Parameter JVM | Default | Deskripsi |
|---|---|---|---|---|
| Aktifkan penghapusan instans outlier | qosEnabled | -Dhsf.qos.enable | false | Aktifkan atau nonaktifkan outlier ejection untuk aplikasi atau layanan. |
| Ambang jumlah permintaan | requestThreshold | -Dhsf.qos.request.threshold | 10 | Jumlah minimum permintaan dalam jendela statistik saat ini sebelum ejection dapat terjadi. Mencegah ejection berdasarkan data sampel yang tidak mencukupi. |
| Ambang batas laju error | errorRateThreshold | -Dhsf.qos.error.rate.threshold | 0.5 | Laju error di atas ambang batas yang menyebabkan suatu instans di-eject. 0.5 berarti 50%. |
| Rasio maksimum penghapusan instans | maxIsolationRate | -Dhsf.qos.max.isolation.rate | 0.2 | Proporsi maksimum instans yang dapat di-eject sekaligus. Hasilnya dibulatkan ke bawah. Contoh: 6 instans x 60% = 3,6, dibulatkan ke bawah menjadi 3. Jika hasilnya kurang dari 1, satu instans tetap dapat di-eject. |
| Waktu unit deteksi pemulihan | isolationTime | -Dhsf.qos.isolation.time | 60000 (1 menit) | Interval probe dasar dalam milidetik. Setelah di-eject, EDAS melakukan probe terhadap instans dengan interval yang meningkat secara linear: 1x, 2x, 3x, ... dikalikan dengan nilai ini. |
| Jumlah maksimum probe | maxIsolationTimeMultiple | -Dhsf.qos.max.isolation.time.multiple | 60 | Jumlah maksimum probe sebelum interval berhenti meningkat. Contoh: dengan waktu unit 60.000 ms dan jumlah maksimum 60, interval terpanjang adalah 60 x 60.000 ms = 60 menit. Jika instans pulih sebelum mencapai jumlah ini, interval diatur ulang ke waktu unit dasar. |
| Jendela waktu statistik | timeWindowInSeconds | -Dhsf.qos.time.window.in.seconds | 10 (detik) | Durasi jendela geser untuk menghitung jumlah permintaan dan menghitung laju error. |
| Jenis exception | bizExceptionPredicateClassName | -Dhsf.qos.biz.exception.class.name | CountBizExceptionPredicate | Menentukan exception mana yang dihitung dalam laju error. Opsi: com.taobao.hsf.exception.CountBizExceptionPredicate (hitung semua exception layanan), com.taobao.hsf.exception.IgnoreBizExceptionPredicate (abaikan semua exception layanan), atau kelas kustom yang mengimplementasikan com.taobao.hsf.Predicate. |
Verifikasi hasil
Setelah kebijakan diterapkan, verifikasi melalui pemantauan aplikasi:
Buka halaman detail aplikasi di Konsol EDAS.
Buka tab Topology.
Periksa indikator berikut:
Request routing — Pastikan permintaan tidak lagi diarahkan ke instans yang di-eject.
Error Rate / 1 Min — Pastikan laju error telah turun di bawah
errorRateThresholdyang dikonfigurasi.
Untuk metrik pemantauan terperinci, lihat Application overview.