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.
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 B
bir 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 409 400 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.
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.
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.).
Ö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:
İlgili içerik
Azure Container Apps'teki Dapr bileşenleri için dayanıklılığın nasıl çalıştığını görün.