Bagikan melalui


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.

Diagram demonstrating resiliency for container apps with Dapr components.

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.

Screenshot demonstrating where to find the logs for your container app using Dapr component resiliency.

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.

Screenshot showing resiliency query results based on provided query example for checking if resiliency policy has loaded.

Atau, Anda dapat menemukan kebijakan ketahanan aktual dengan mengaktifkan penelusuran kesalahan pada komponen Anda dan menggunakan kueri yang mirip dengan contoh berikut:

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.

Screenshot showing resiliency query results based on provided query example for finding the actual resiliency policy.

Lihat cara kerja ketahanan untuk Komunikasi layanan ke layanan menggunakan Azure Container Apps bawaan penemuan layanan