Ketahanan komponen Dapr (pratinjau)
Kebijakan ketahanan secara proaktif mencegah, mendeteksi, dan memulihkan dari kegagalan aplikasi kontainer Anda. Dalam artikel ini, Anda mempelajari cara menerapkan kebijakan ketahanan untuk aplikasi yang menggunakan Dapr untuk berintegrasi dengan layanan cloud yang berbeda, seperti penyimpanan status, broker pub/sub pesan, penyimpanan rahasia, dan banyak lagi.
Anda dapat mengonfigurasi kebijakan ketahanan seperti percobaan ulang, batas waktu, dan pemutus sirkuit untuk petunjuk operasi keluar dan masuk berikut melalui komponen Dapr:
- Operasi keluar: Panggilan dari sidecar Dapr ke komponen, seperti:
- Mempertahankan atau mengambil status
- Menerbitkan pesan
- Memanggil pengikatan output
- Operasi masuk: Panggilan dari sidecar Dapr ke aplikasi kontainer Anda, seperti:
- Langganan saat mengirimkan pesan
- Pengikatan input yang mengirimkan peristiwa
Cuplikan layar berikut menunjukkan bagaimana aplikasi menggunakan kebijakan coba lagi untuk mencoba memulihkan dari permintaan yang gagal.
Kebijakan ketahanan yang didukung
Mengonfigurasi kebijakan ketahanan
Anda dapat memilih apakah akan membuat kebijakan ketahanan menggunakan Bicep, CLI, atau portal Azure.
Contoh ketahanan berikut menunjukkan semua konfigurasi yang tersedia.
resource myPolicyDoc 'Microsoft.App/managedEnvironments/daprComponents/resiliencyPolicies@2023-11-02-preview' = {
name: 'my-component-resiliency-policies'
parent: '${componentName}'
properties: {
outboundPolicy: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
}
inboundPolicy: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
}
}
}
Penting
Setelah menerapkan semua kebijakan ketahanan, Anda perlu memulai ulang aplikasi Dapr Anda.
Spesifikasi kebijakan
Waktu habis
Batas waktu digunakan untuk menghentikan operasi jangka panjang lebih awal. Kebijakan batas waktu mencakup properti berikut.
properties: {
outbound: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
}
inbound: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
}
}
Metadata | Wajib | Deskripsi | Contoh |
---|---|---|---|
responseTimeoutInSeconds |
Ya | Waktu habis menunggu respons dari komponen Dapr. | 15 |
Percobaan kembali
httpRetryPolicy
Tentukan strategi untuk operasi yang gagal. Kebijakan coba lagi mencakup konfigurasi berikut.
properties: {
outbound: {
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
}
inbound: {
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
}
}
Metadata | Wajib | Deskripsi | Contoh |
---|---|---|---|
maxRetries |
Ya | Percobaan ulang maksimum yang akan dijalankan untuk permintaan http yang gagal. | 5 |
retryBackOff |
Ya | Pantau permintaan dan matikan semua lalu lintas ke layanan yang terkena dampak saat waktu habis dan kriteria coba lagi terpenuhi. | T/A |
retryBackOff.initialDelayInMilliseconds |
Ya | Penundaan antara kesalahan pertama dan coba lagi pertama. | 1000 |
retryBackOff.maxIntervalInMilliseconds |
Ya | Penundaan maksimum antara percobaan ulang. | 10000 |
Pemutus sirkuit
circuitBreakerPolicy
Tentukan untuk memantau permintaan yang menyebabkan tingkat kegagalan yang ditingkatkan dan matikan semua lalu lintas ke layanan yang terkena dampak saat kriteria tertentu terpenuhi.
properties: {
outbound: {
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
},
inbound: {
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
}
}
Metadata | Wajib | Deskripsi | Contoh |
---|---|---|---|
intervalInSeconds |
No | Periode waktu siklus (dalam detik) yang digunakan oleh pemutus sirkuit untuk menghapus jumlah internalnya. Jika tidak disediakan, interval diatur ke nilai yang sama seperti yang disediakan untuk timeoutInSeconds . |
15 |
consecutiveErrors |
Ya | Jumlah kesalahan permintaan yang diizinkan untuk terjadi sebelum perjalanan sirkuit dan terbuka. | 10 |
timeoutInSeconds |
Ya | Periode waktu (dalam detik) status terbuka, langsung setelah kegagalan. | 5 |
Proses pemutus sirkuit
consecutiveErrors
Menentukan (kondisi perjalanan sirkuit sebagai consecutiveFailures > $(consecutiveErrors)-1
) mengatur jumlah kesalahan yang diizinkan untuk terjadi sebelum perjalanan sirkuit dan terbuka di tengah jalan.
Sirkuit menunggu setengah terbuka untuk timeoutInSeconds
jumlah waktu, di mana consecutiveErrors
jumlah permintaan harus berhasil secara berturut-turut.
- Jika permintaan berhasil, sirkuit akan ditutup.
- Jika permintaan gagal, sirkuit tetap dalam keadaan setengah terbuka.
Jika Anda tidak menetapkan nilai apa pun intervalInSeconds
, sirkuit akan direset ke status tertutup setelah jumlah waktu yang Anda tetapkan untuk timeoutInSeconds
, terlepas dari keberhasilan atau kegagalan permintaan berturut-turut. Jika Anda mengatur intervalInSeconds
ke 0
, sirkuit tidak pernah direset secara otomatis, hanya berpindah dari setengah terbuka ke status tertutup dengan berhasil menyelesaikan consecutiveErrors
permintaan secara berturut-turut.
Jika Anda menetapkan intervalInSeconds
nilai, yang menentukan jumlah waktu sebelum sirkuit diatur ulang ke status tertutup, terlepas dari apakah permintaan yang dikirim dalam status setengah terbuka berhasil atau tidak.
Log ketahanan
Dari bagian Pemantauan aplikasi kontainer Anda, pilih Log.
Di panel Log, tulis dan jalankan kueri untuk menemukan ketahanan melalui log sistem aplikasi kontainer Anda. Misalnya, untuk menemukan apakah kebijakan ketahanan dimuat:
ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Loading Resiliency configuration:"
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc
Klik Jalankan untuk menjalankan kueri dan menampilkan hasilnya dengan pesan log yang menunjukkan kebijakan sedang dimuat.
Atau, Anda dapat menemukan kebijakan ketahanan aktual dengan mengaktifkan log debug di aplikasi kontainer Anda dan mengkueri untuk melihat apakah sumber daya ketahanan dimuat.
Setelah log debug diaktifkan, gunakan kueri yang mirip dengan yang berikut ini:
ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Resiliency configuration ("
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc
Klik Jalankan untuk menjalankan kueri dan menampilkan pesan log yang dihasilkan dengan konfigurasi kebijakan.
Konten terkait
Lihat cara kerja ketahanan untuk Komunikasi layanan ke layanan menggunakan Azure Container Apps bawaan penemuan layanan