Dapr bileşeni dayanıklılığı (önizleme)

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.

Dapr bileşenleriyle kapsayıcı uygulamaları için dayanıklılığı gösteren diyagram.

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.

Dapr bileşeni dayanıklılığını kullanarak kapsayıcı uygulamanızın günlüklerinin nerede bulunacağı gösteren ekran görüntüsü.

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.

Dayanıklılık ilkesinin yüklenip yüklenmediğini denetlemek için sağlanan sorgu örneğine göre dayanıklılık sorgusu sonuçlarını gösteren ekran görüntüsü.

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.

Portal aracılığıyla kapsayıcı uygulamanızda hata ayıklama günlüklerini etkinleştirmeyi gösteren ekran görüntüsü.

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.

Gerçek dayanıklılık ilkesini bulmaya yönelik sağlanan sorgu örneğini temel alan dayanıklılık sorgusu sonuçlarını gösteren ekran görüntüsü.