Hizmet bulma dayanıklılığı

Azure Container Apps dayanıklılığıyla, basit dayanıklılık ilkelerini kullanarak hizmet isteği hatalarını proaktif olarak önleyebilir, algılayabilir ve kurtarabilirsiniz. Bu makalede, Azure Container Apps hizmet bulma kullanarak istekleri başlatırken Azure Container Apps dayanıklılık ilkelerini yapılandırmayı öğreneceksiniz.

Not

Şu anda Dayanıklılık ilkeleri, Dapr Hizmeti Çağırma API'si kullanılarak yapılan isteklere uygulanamaz.

İlkeler, bir kapsayıcı uygulamasına yapılan her istek için geçerli olur. Kapsayıcı uygulamasına, aşağıdaki gibi yapılandırmalarla istekleri kabul eden ilkeleri uyarlayabilirsiniz:

  • Yeniden deneme sayısı
  • Yeniden deneme ve zaman aşımı süresi
  • Yeniden deneme eşleşmeleri
  • Devre kesici ardışık hataları ve diğerleri

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.

Kapsayıcı uygulamasının hizmet adını kullanarak kapsayıcı uygulaması dayanıklılığını gösteren diyagram.

Desteklenen dayanıklılık ilkeleri

Dayanıklılık ilkelerini yapılandırma

Dayanıklılık ilkelerini Bicep, CLI veya Azure portalı kullanarak yapılandırırsanız kapsayıcı uygulaması başına yalnızca bir ilke uygulayabilirsiniz.

Bir kapsayıcı uygulamasına ilke uyguladığınızda, kurallar bu kapsayıcı uygulamasından yapılan isteklere değil, bu kapsayıcı uygulamasına yapılan tüm isteklere uygulanır. Örneğin, adlı App Bbir kapsayıcı uygulamasına yeniden deneme ilkesi uygulanır. Uygulama B'ye yapılan tüm gelen istekler hata durumunda otomatik olarak yeniden denenecek. Ancak, Uygulama B tarafından gönderilen giden isteklerin hata durumunda yeniden denemesi garanti edilmemektedir.

Aşağıdaki dayanıklılık örneği tüm kullanılabilir yapılandırmaları gösterir.

resource myPolicyDoc 'Microsoft.App/containerApps/resiliencyPolicies@2023-11-02-preview' = {
  name: 'my-app-resiliency-policies'
  parent: '${appName}'
  properties: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
        connectionTimeoutInSeconds: 5
    }
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                        exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-status-codes'
                '5xx'
                'reset'
                'connect-failure'
                'retriable-4xx'
            ]
        }
    } 
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
    tcpConnectionPool: {
        maxConnections: 100
    }
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
  }
}

İlke belirtimleri

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: {
  timeoutPolicy: {
      responseTimeoutInSeconds: 15
      connectionTimeoutInSeconds: 5
  }
}
Meta veri Zorunlu Açıklama Örnek
responseTimeoutInSeconds Yes Kapsayıcı uygulamasından yanıt beklerken zaman aşımı. 15
connectionTimeoutInSeconds Yes Kapsayıcı uygulamasına bağlantı kurmak için zaman aşımı. 5

Yeniden deneme sayısı

Başarısız işlemler için bir tcpRetryPolicy httpRetryPolicy veya stratejisi tanımlayın. Yeniden deneme ilkesi aşağıdaki yapılandırmaları içerir.

httpRetryPolicy

properties: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                       exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-headers'
                'retriable-status-codes'
            ]
        }
    } 
}
Meta veri Zorunlu Açıklama Örnek
maxRetries Yes Başarısız bir http isteği için yürütülecek en fazla yeniden deneme sayısı. 5
retryBackOff Yes İstekleri izleyin ve zaman aşımı ve yeniden deneme ölçütleri karşılandığında etkilenen hizmete yönelik tüm trafiği kapatın. YOK
retryBackOff.initialDelayInMilliseconds Evet İlk hata ile ilk yeniden deneme arasındaki gecikme. 1000
retryBackOff.maxIntervalInMilliseconds Yes Yeniden denemeler arasındaki en uzun gecikme. 10000
matches Yes Uygulamanın yeniden deneme denemesi gereken zamanları sınırlamak için eşleşme değerlerini ayarlayın. headers, httpStatusCodes, errors
matches.headers Y* Hata yanıtı belirli bir üst bilgi içerdiğinde yeniden deneyin. *Üst bilgiler yalnızca hata özelliğini belirtirseniz retriable-headers gerekli özelliklerdir. Kullanılabilir üst bilgi eşleşmeleri hakkında daha fazla bilgi edinin. X-Content-Type
matches.httpStatusCodes Y* Yanıt belirli bir durum kodu döndürdüğünde yeniden deneyin. *Durum kodları yalnızca hata özelliğini belirtirseniz retriable-status-codes gerekli özelliklerdir. 502, 503
matches.errors Yes Yalnızca uygulama belirli bir hata döndürdüğünde yeniden denemeler. Kullanılabilir hatalar hakkında daha fazla bilgi edinin. connect-failure, reset
Üst bilgi eşleşmeleri

Hatayı belirttiyseniz retriable-headers , yanıt belirli bir üst bilgi içerdiğinde yeniden denemek için aşağıdaki üst bilgi eşleştirme özelliklerini kullanabilirsiniz.

matches: {
  headers: [
    { 
      header: 'x-ms-retriable'
      match: {
        exactMatch: 'true'
      }
    }
  ]
}
Meta veri Açıklama
prefixMatch Yeniden denemeler, üst bilgi değerinin ön ekini temel alarak gerçekleştirilir.
exactMatch Yeniden denemeler, üst bilgi değerinin tam eşleşmesine göre gerçekleştirilir.
suffixMatch Yeniden denemeler, üst bilgi değerinin sonekine göre gerçekleştirilir.
regexMatch Yeniden denemeler, üst bilgi değerinin regex deseni ile eşleşmesi gereken normal ifade kuralına göre gerçekleştirilir.
Hatalar

Aşağıdaki hatalardan herhangi birinde yeniden denemeler gerçekleştirebilirsiniz:

matches: {
  errors: [
    'retriable-headers'
    'retriable-status-codes'
    '5xx'
    'reset'
    'connect-failure'
    'retriable-4xx'
  ]
}
Meta veri Açıklama
retriable-headers Yeniden denemeyi tetikleyen HTTP yanıt üst bilgileri. Üst bilgi eşleşmelerinden herhangi biri yanıt üst bilgileriyle eşleşiyorsa yeniden deneme gerçekleştirilir. Eşleşen üst bilgileri yeniden denemek istiyorsanız gereklidir.
retriable-status-codes Yeniden denemeleri tetiklemesi gereken HTTP durum kodları. Eşleşen durum kodlarını yeniden denemek istiyorsanız gereklidir.
5xx Sunucu herhangi bir 5xx yanıt koduyla yanıt verirse yeniden deneyin.
reset Sunucu yanıt vermezse yeniden deneyin.
connect-failure Kapsayıcı uygulamasıyla hatalı bir bağlantı nedeniyle istek başarısız olduysa yeniden deneyin.
retriable-4xx Kapsayıcı uygulaması gibi 409400 serisi bir yanıt koduyla yanıt verirse yeniden deneyin.

tcpRetryPolicy

properties: {
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
}
Meta veri Zorunlu Açıklama Örnek
maxConnectAttempts Yes Başarısız bağlantılarda yeniden denemek için en fazla bağlantı denemesini (maxConnectionAttempts) ayarlayın. 3

Devre kesiciler

Devre kesici ilkeleri, ardışık hata sayısı gibi tetikleyicilere bağlı olarak bir kapsayıcı uygulaması çoğaltmasının yük dengeleme havuzundan geçici olarak kaldırılıp kaldırılmayacağını belirtir.

properties: {
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
}
Meta veri Zorunlu Açıklama Örnek
consecutiveErrors Yes Kapsayıcı uygulaması çoğaltması yük dengelemeden geçici olarak kaldırılmadan önce ardışık hata sayısı. 5
intervalInSeconds Yes Bir çoğaltmanın yük dengeleme havuzundan kaldırılıp kaldırılmadığını veya geri yükleneceğini belirlemek için verilen süre. 10
maxEjectionPercent Yes Yük dengelemeden çıkarılacak başarısız kapsayıcı uygulaması çoğaltmalarının maksimum yüzdesi. Değerden bağımsız olarak en az bir konağı kaldırır. 50

Bağlantı havuzları

Azure Container App'in bağlantı havuzu, kapsayıcı uygulamalarına kurulan ve yeniden kullanılabilir bağlantılardan oluşan bir havuz tutar. Bu bağlantı havuzu, her istek için tek tek bağlantıları oluşturma ve kaldırma yükünü azaltır.

Bağlantı havuzları, bir hizmet için izin verilen en fazla istek veya bağlantı sayısını belirtmenize olanak sağlar. Bu sınırlar, her hizmet için toplam eşzamanlı bağlantı sayısını denetler. Bu sınıra ulaşıldığında, mevcut bağlantılar serbest bırakılana veya kapatılana kadar bu hizmete yeni bağlantılar kurulamaz. Bağlantıları yönetme işlemi, kaynakların istekler tarafından aşırı yüklenmesini önler ve verimli bağlantı yönetimi sağlar.

httpConnectionPool

properties: {
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
}
Meta veri Zorunlu Açıklama Örnek
http1MaxPendingRequests Yes İstekler için http1 kullanılır. Kapsayıcı uygulamasına yönelik en fazla açık bağlantı sayısı. 1024
http2MaxRequests Yes İstekler için http2 kullanılır. Kapsayıcı uygulamasına yönelik en fazla eşzamanlı istek sayısı. 1024

tcpConnectionPool

properties: {
    tcpConnectionPool: {
        maxConnections: 100
    }
}
Meta veri Zorunlu Açıklama Örnek
maxConnections Yes Kapsayıcı uygulamasına eş zamanlı bağlantı sayısı üst sınırı. 100

Dayanıklılık gözlemlenebilirliği

Kapsayıcı uygulamanızın ölçümleri ve sistem günlükleri aracılığıyla dayanıklılık gözlemlenebilirliği gerçekleştirebilirsiniz.

Dayanıklılık günlükleri

Kapsayıcı uygulamanızın İzleme bölümünde Günlükler'i seçin.

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 olaylarını aramak ve bunların durumunu göstermek için aşağıdakine benzer bir sorgu çalıştırın:

  • Zaman damgası
  • Ortam adı
  • Kapsayıcı uygulama adı
  • Dayanıklılık türü ve nedeni
  • İletileri günlüğe kaydetme
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s

Sorguyu çalıştırmak ve sonuçları görüntülemek için Çalıştır'a tıklayın.

Sağlanan sorgu örneğine göre dayanıklılık sorgusu sonuçlarını gösteren ekran görüntüsü.

Dayanıklılık ölçümleri

Kapsayıcı uygulamanızın İzleme menüsünde Ölçümler'i seçin. Ölçümler bölmesinde aşağıdaki filtreleri seçin:

  • Kapsayıcı uygulamanızın adının kapsamı.
  • Standart ölçüm ölçümleri ad alanı.
  • Açılan menüden dayanıklılık ölçümleri.
  • Verilerin sonuçlarda nasıl toplanmış (ortalama, maksimum vb.) nasıl toplanmış olacağınız.
  • Süre (son 30 dakika, son 24 saat vb.).

Kapsayıcı uygulamanız için dayanıklılık ölçümleri filtrelerine erişmeyi gösteren ekran görüntüsü.

Örneğin, Test-uygulama kapsamındaKi Dayanıklılık İsteği Yeniden Denemeleri ölçümünü Ortalama toplama ile 30 dakikalık bir zaman çerçevesi içinde arama yapmak üzere ayarlarsanız, sonuçlar aşağıdaki gibi görünür:

Dayanıklılık için örnek ölçüm filtrelerinin sonuçlarını gösteren ekran görüntüsü.

Azure Container Apps'teki Dapr bileşenleri için dayanıklılığın nasıl çalıştığını görün.