API azaltma hatalarını giderme
Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Windows VM'leri
Azure İşlem istekleri, hizmetin genel performansına yardımcı olmak için abonelikte ve bölge bazında kısıtlanabilir. Microsoft.Compute ad alanı altındaki kaynakları yöneten Azure İşlem Kaynak Sağlayıcısı'na (CRP) yapılan tüm çağrıların izin verilen maksimum API istek oranını aşmadığından emin olacağız. Bu belgede API kısıtlama, kısıtlama sorunlarını giderme ayrıntıları ve kısıtlamayı önlemeye yönelik en iyi deneyimler açıklanmaktadır.
Azure Resource Manager ve Kaynak Sağlayıcıları tarafından azaltma
Azure Resource Manager, Azure'ın ön kapısı olarak tüm gelen API isteklerinin kimlik doğrulamasını ve ilk sipariş doğrulamasını ve azaltmasını yapar. Azure Resource Manager çağrı hızı sınırları ve ilgili tanılama yanıtı HTTP üst bilgileri burada açıklanmıştır.
Azure API istemcisi azaltma hatası aldığında HTTP durumu 429 Çok Fazla İstek olur. İstek azaltmanın Azure Resource Manager tarafından mı yoksa CRP gibi temel alınan bir kaynak sağlayıcısı tarafından mı yapıldığını anlamak için GET olmayan istekler için GET isteklerini ve x-ms-ratelimit-remaining-subscription-writes
yanıt üst bilgilerini inceleyinx-ms-ratelimit-remaining-subscription-reads
. Kalan çağrı sayısı 0'a yaklaşıyorsa aboneliğin Azure Resource Manager tarafından tanımlanan genel çağrı sınırına ulaşılmıştır. Tüm abonelik istemcilerinin etkinlikleri birlikte sayılır. Aksi takdirde, azaltma hedef kaynak sağlayıcısından (istek URL'sinin kesimi tarafından /providers/<RP>
ele alınan kaynak) gelir.
Çağrı hızı bilgi yanıtı üst bilgileri
Üst bilgi | Değer biçimi | Örnek | Açıklama |
---|---|---|---|
x-ms-ratelimit-remaining-resource | <source RP>/<policy or bucket>;<count> |
Microsoft.Compute/HighCostGet; 159 | Bu isteğin hedefi de dahil olmak üzere kaynak demetini veya işlem grubunu kapsayan azaltma ilkesi için kalan API çağrı sayısı |
x-ms-request-charge | <count> |
1 | Bu HTTP isteği için geçerli ilkenin sınırına doğru çağrı sayısı "ücretlendirilir". Bu genellikle 1'dir. Sanal makine ölçek kümesini ölçeklendirme gibi toplu istekler birden çok sayıyı ücretlendirebilir. |
Bir API isteğinin birden çok azaltma ilkesine tabi olabileceğini unutmayın. Her ilke için ayrı x-ms-ratelimit-remaining-resource
bir üst bilgi olacaktır.
Sanal makine ölçek kümesi isteğini silmek için örnek bir yanıt aşağıda verilmiştir.
x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet;107
x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet;587
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VMScaleSetBatchedVMRequests;3704
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VmssQueuedVMOperations;4720
Azaltma hatası ayrıntıları
429 HTTP durumu genellikle bir çağrı oranı sınırına ulaşılması nedeniyle isteği reddetmek için kullanılır. İşlem Kaynağı Sağlayıcısı'ndan tipik bir azaltma hatası yanıtı aşağıdaki örneğe benzer olacaktır (yalnızca ilgili üst bilgiler gösterilir):
HTTP/1.1 429 Too Many Requests
x-ms-ratelimit-remaining-resource: Microsoft.Compute/HighCostGet;0
Retry-After: 1200
Content-Type: application/json; charset=utf-8
{
"code": "OperationNotAllowed",
"message": "The server rejected the request because too many requests have been received for this subscription.",
"details": [
{
"code": "TooManyRequests",
"target": "HighCostGet",
"message": "{\"operationGroup\":\"HighCostGet\",\"startTime\":\"2018-06-29T19:54:21.0914017+00:00\",\"endTime\":\"2018-06-29T20:14:21.0914017+00:00\",\"allowedRequestCount\":300,\"measuredRequestCount\":1238}"
}
]
}
Kalan çağrı sayısı 0 olan ilke, azaltma hatasının döndürülme nedenidir. Bu durumda, şeklindedir HighCostGet
. Yanıt gövdesinin genel biçimi, genel Azure Resource Manager API hata biçimidir (OData ile uyumlu). Ana hata kodu, OperationNotAllowed
İşlem Kaynağı Sağlayıcısı'nın azaltma hatalarını (diğer istemci hataları türleri arasında) bildirmek için kullandığı koddur. İç message
hataların özelliği, azaltma ihlalinin ayrıntılarını içeren serileştirilmiş bir JSON yapısı içerir.
Yukarıda gösterildiği gibi, her azaltma hatası, istemcinin Retry-After
isteği yeniden denemeden önce beklemesi gereken en az saniye sayısını sağlayan üst bilgisini içerir.
API çağrı hızı ve azaltma hatası çözümleyicisi
İşlem kaynağı sağlayıcısının API'sinde sorun giderme özelliğinin önizleme sürümü kullanılabilir. Bu PowerShell cmdlet'leri, işlem başına zaman aralığı başına API isteği hızı ve işlem grubu başına azaltma ihlalleri (ilke) hakkında istatistikler sağlar:
API çağrı istatistikleri, aboneliğin istemcilerinin davranışları hakkında harika içgörüler sağlayabilir ve azaltmaya neden olan çağrı desenlerinin kolayca tanımlanmasını sağlayabilir.
Çözümleyicinin şu an için bir sınırlaması, disk ve anlık görüntü kaynak türlerine yönelik istekleri (yönetilen diskleri desteklemek için) saymamasıdır. CRP'nin telemetrisinden veri topladığı için ARM'den gelen azaltma hatalarını tanımlama konusunda da yardımcı olamaz. Ancak bunlar, daha önce açıklandığı gibi ayırt edici ARM yanıt üst bilgilerine göre kolayca tanımlanabilir.
PowerShell cmdlet'leri, doğrudan istemciler tarafından çağrılabilen (henüz resmi destek olmasa da) rest hizmet API'sini kullanır. HTTP isteği biçimini görmek için cmdlet'leri -Debug anahtarıyla veya Fiddler ile yürütmeleri üzerinde gözetleme ile çalıştırın.
En iyi yöntemler
- Azure hizmet API'si hatalarını koşulsuz ve/veya hemen yeniden denemeyin. Sık karşılaşılan bir durum, istemci kodunun yeniden denenemez bir hatayla karşılaştığında hızlı bir yeniden deneme döngüsüne girebilmesidir. Yeniden denemeler sonunda hedef işlemin grubu için izin verilen çağrı sınırını tüketir ve aboneliğin diğer istemcilerini etkiler.
- Yüksek hacimli API otomasyon örneklerinde, hedef işlem grubu için kullanılabilir çağrı sayısı düşük eşiğin altına düştüğünde proaktif istemci tarafı kendi kendine azaltmayı uygulamayı göz önünde bulundurun.
- Zaman uyumsuz işlemleri izlerken Retry-After üst bilgi ipuçlarına dikkat edin.
- İstemci kodu belirli bir Sanal Makine hakkında bilgiye ihtiyaç duyuyorsa, bu VM'yi içeren kaynak grubundaki veya aboneliğin tamamındaki tüm VM'leri listelemek ve ardından istemci tarafında gerekli VM'yi seçmek yerine doğrudan sorgulayın.
- İstemci kodu belirli bir Azure konumundaki VM'lere, disklere ve anlık görüntülere ihtiyaç duyuyorsa, tüm abonelik VM'lerini sorgulamak ve ardından istemci tarafındaki konuma göre filtrelemek yerine sorgunun konum tabanlı biçimini kullanın:
GET /subscriptions/<subId>/providers/Microsoft.Compute/locations/<location>/virtualMachines?api-version=2017-03-30
İşlem Kaynağı Sağlayıcısı bölgesel uç noktalarını sorgulama. - ÖZELLIKLE VM'ler ve sanal makine ölçek kümelerinde API kaynaklarını oluştururken veya güncelleştirirken, döndürülen zaman uyumsuz işlemin tamamlanması, kaynak URL'sinin kendisinde yoklamadan çok daha verimlidir (temelinde
provisioningState
).
Sonraki adımlar
Azure'daki diğer hizmetler için yeniden deneme kılavuzu hakkında daha fazla bilgi için bkz . Belirli hizmetler için yeniden deneme kılavuzu.
Yardım için bizimle iletişim kurun
Sorularınız varsa veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteğine sorun. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.