Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dayanıklılık ilkeleri kapsayıcı uygulama hatalarınızı proaktif olarak önler, algılar ve kurtarır. Bu makalede, farklı bulut hizmetleriyle tümleştirmek için Dapr kullanan uygulamalar için dayanıklılık ilkeleri uygulamayı öğreneceksiniz. Örneğin, durum depoları, yayın/abone mesaj aracıları, gizli depoları ve daha fazlası.
Bir Dapr bileşeni kullanarak aşağıdaki giden ve gelen işlem yönergeleri için yeniden denemeler, zaman aşımları ve devre kesiciler gibi dayanıklılık ilkeleri yapılandırabilirsiniz:
-
Giden işlemler: Dapr sidecar'dan bir bileşene yapılan çağrılar, örneğin:
- Durumu kalıcılaştırma veya geri alma
- İleti yayımlama
- Çıkış bağlamasını çağırma
-
Gelen işlemler: Dapr sidecar'dan container uygulamanıza yapılan çağrılar, örneğin:
- Mesaj teslim ederken abonelikler
- Olay teslim eden giriş bağlamaları
Aşağıdaki ekran görüntüsünde, uygulamanın başarısız isteklerden kurtarmayı denemek için yeniden deneme ilkesini nasıl kullandığı gösterilmektedir.
Desteklenen dayanıklılık ilkeleri
Dayanıklılık ilkelerini yapılandırma
Bicep, Azure CLI veya Azure portalını kullanarak dayanıklılık ilkeleri oluşturmayı seçebilirsiniz.
Aşağıdaki dayanıklılık örneği tüm kullanılabilir yapılandırmaları gösterir.
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
}
}
}
}
Önemli
Tüm dayanıklılık ilkelerini uyguladıktan sonra Dapr uygulamalarınızı yeniden başlatmanız gerekir.
Politika Özellikleri
Zaman aşımları
Zaman aşımları, uzun süre çalışan işlemleri erken sonlandırmak için kullanılır. Zaman aşımı ilkesi aşağıdaki özellikleri içerir.
properties: {
outbound: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
}
inbound: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
}
}
}
| Meta veri | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
responseTimeoutInSeconds |
Yes | Dapr bileşeninden gelen yanıtı beklerken zaman aşımı oluştu. | 15 |
Yinelemeler
Başarısız işlemler için bir httpRetryPolicy strateji tanımlayın. Yeniden deneme ilkesi aşağıdaki yapılandırmaları içerir.
properties: {
outbound: {
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
}
inbound: {
httpRetryPolicy: {
maxRetries: 5
retryBackOff: {
initialDelayInMilliseconds: 1000
maxIntervalInMilliseconds: 10000
}
}
}
}
| Meta veri | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
maxRetries |
Yes | Başarısız http isteği için yürütülecek en fazla yeniden deneme sayısı. | 5 |
retryBackOff |
Yes | İstekleri izler ve zaman aşımı ve yeniden deneme ölçütleri karşılandığında etkilenen hizmete yönelik tüm trafiği kapatır. | Uygulanamaz |
retryBackOff.initialDelayInMilliseconds |
Yes | İlk hata ile ilk yeniden deneme arasındaki gecikme. | 1000 |
retryBackOff.maxIntervalInMilliseconds |
Yes | Yeniden denemeler arasındaki en uzun gecikme. | 10000 |
Devre kesiciler
Yükseltilmiş hata oranlarına neden olan istekleri izlemek için bir circuitBreakerPolicy tanımlayın ve belirli bir ölçüt karşılandığında etkilenen hizmete yönelik tüm trafiği kapatın.
properties: {
outbound: {
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
},
inbound: {
circuitBreakerPolicy: {
intervalInSeconds: 15
consecutiveErrors: 10
timeoutInSeconds: 5
}
}
}
| Meta veri | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
intervalInSeconds |
Hayır | Devre kesicinin iç sayılarını temizlemek için kullandığı döngüsel dönem (saniye cinsinden). Sağlanmadıysa, aralık için timeoutInSecondssağlanan değerle aynı değere ayarlanır. |
15 |
consecutiveErrors |
Yes | Bağlantı hattı açılmadan önce oluşmasına izin verilen istek hatalarının sayısı. | 10 |
timeoutInSeconds |
Yes | Hatadan hemen sonra açık durumdaki zaman aralığı (saniye cinsinden). | 5 |
Devre kesici işlemi
consecutiveErrors (devre atalet koşulu olarak consecutiveFailures > $(consecutiveErrors)-1) belirtmek, devrenin atalet durumuna geçmeden önce oluşmasına izin verilen hata sayısını ayarlar ve devreyi açar.
Devre, timeoutInSeconds süre boyunca yarı açık bekler, bu süre zarfında consecutiveErrors istek sayısı arka arkaya başarılı olmalıdır.
- İstekler başarılı olursa devre kapanır.
- İstekler başarısız olursa devre yarı açık durumda kalır.
Herhangi bir intervalInSeconds değer ayarlamadıysanız, ardışık istek başarısına veya başarısızlığına bakılmaksızın bağlantı hattı için timeoutInSecondsayarladığınız sürenin sonunda kapalı duruma sıfırlanır.
intervalInSeconds olarak ayarlarsanız, devre hiçbir zaman otomatik olarak sıfırlanmaz, yalnızca istekleri bir satırda başarıyla tamamlayarak yarı açık durumdan consecutiveErrors kapalı duruma geçebilirsiniz.
Bir intervalInSeconds değer ayarladıysanız, devrenin kapalı duruma sıfırlanmadan önce geçmesi gereken süreyi, yarı açık durumda gönderilen isteklerin başarılı olup olmadığından bağımsız olarak belirler.
Dayanıklılık günlükleri
Kapsayıcı uygulamanızın İzleme bölümünde Günlükler'i seçin.
Günlükler bölmesinde, kapsayıcı uygulama sistemi günlükleriniz aracılığıyla dayanıklılığı bulmak için bir sorgu yazın ve çalıştırın. Örneğin, dayanıklılık ilkesinin yüklenip yüklenmediğini bulmak için:
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
Sorguyu çalıştırmak ve ilkenin yüklendiğini belirten günlük iletisiyle sonucu görüntülemek için Çalıştır'ı seçin.
Ayrıca, kapsayıcı uygulamanızda hata ayıklama günlüklerini etkinleştirerek ve bir dayanıklılık kaynağının yüklenip yüklenmediğini görmek için sorgulayarak gerçek dayanıklılık ilkesini bulabilirsiniz.
Hata ayıklama günlükleri etkinleştirildikten sonra aşağıdaki örneğe benzer bir sorgu kullanın:
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
Sorguyu çalıştırmak ve sonuçta elde edilen günlük iletisini ilke yapılandırmasıyla görüntülemek için Çalıştır'ı seçin.