Memahami bagaimana Azure Resource Manager membatasi permintaan

Artikel ini menjelaskan cara Azure Resource Manager membatasi permintaan. Ini menunjukkan kepada Anda cara melacak jumlah permintaan yang tersisa sebelum mencapai batas, dan cara merespons saat Anda mencapai batas.

Pembatasan terjadi pada dua tingkat. Azure Resource Manager membatasi permintaan untuk langganan dan penyewa. Jika permintaan berada di bawah batas pembatasan untuk langganan dan penyewa, Resource Manager merutekan permintaan ke penyedia sumber daya. Penyedia sumber daya menerapkan batas pembatasan yang disesuaikan dengan operasinya.

Gambar berikut menunjukkan cara pembatasan diterapkan saat permintaan berubah dari pengguna ke Azure Resource Manager dan penyedia sumber daya. Gambar menunjukkan bahwa permintaan awalnya dibatasi per ID utama dan per instans Azure Resource Manager di wilayah pengguna yang mengirim permintaan. Permintaan dibatasi per jam. Saat permintaan diteruskan ke penyedia sumber daya, permintaan dibatasi per wilayah sumber daya daripada per instans Azure Resource Manager di wilayah pengguna. Permintaan penyedia sumber daya juga dibatasi per ID pengguna utama dan per jam.

Diagram yang memperlihatkan bagaimana pembatasan diterapkan sebagai permintaan dari pengguna ke Azure Resource Manager dan penyedia sumber daya.

Batas langganan dan penyewa

Tiap operasi tingkat langganan dan tingkat penyewa tunduk pada batas pembatasan. Permintaan langganan adalah permintaan yang melibatkan kelolosan ID langganan Anda, seperti mengambil grup sumber daya di langganan Anda. Misalnya, mengirim permintaan ke https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 adalah operasi tingkat langganan. Permintaan penyewa tidak menyertakan ID langganan Anda, seperti mengambil lokasi Azure yang valid. Misalnya, mengirim permintaan ke https://management.azure.com/tenants?api-version=2022-01-01 adalah operasi tingkat penyewa.

Batas pembatasan default per jam diperlihatkan dalam tabel berikut.

Cakupan Operasional Batas
Langganan baca 12000
Langganan hapus 15000
Langganan tulis 1200
Penyewa baca 12000
Penyewa tulis 1200

Batas ini tercakup untuk perwakilan keamanan (pengguna atau aplikasi) yang membuat permintaan dan ID berlangganan atau ID penyewa. Jika permintaan Anda berasal dari lebih dari satu perwakilan keamanan, batas Anda di seluruh langganan atau penyewa lebih besar dari 12.000 dan 1.200 per jam.

Batas ini berlaku untuk tiap instans Azure Resource Manager. Ada beberapa instans di tiap wilayah Azure, dan Azure Resource Manager disebarkan ke semua wilayah Azure. Jadi, dalam praktiknya, batasnya lebih tinggi dari batas ini. Permintaan dari pengguna biasanya ditangani oleh instans Azure Resource Manager yang berbeda.

Permintaan yang tersisa dikembalikan dalam nilai header respons.

Migrasi ke pembatasan regional dan algoritma wadah token

Mulai tahun 2024, Microsoft memigrasikan langganan Azure ke arsitektur pembatasan baru. Dengan perubahan ini, Anda akan mengalami batas pembatasan baru. Batas pembatasan baru diterapkan per wilayah daripada per instans Azure Resource Manager. Arsitektur baru menggunakan algoritma wadah token untuk mengelola pembatasan API.

Wadah token mewakili jumlah maksimum permintaan yang dapat Anda kirim untuk setiap detik. Ketika Anda mencapai jumlah maksimum permintaan, tingkat isi ulang menentukan seberapa cepat token tersedia di wadah.

Batas yang diperbarui ini memudahkan Anda untuk menyegarkan dan mengelola kuota Anda.

Batas baru adalah:

Cakupan Operasional Ukuran wadah Tingkat isi ulang per detik
Langganan baca 250 25
Langganan hapus 200 10
Langganan tulis 200 10
Penyewa baca 250 25
Penyewa hapus 200 10
Penyewa tulis 200 10

Batas langganan berlaku per langganan, per perwakilan layanan, dan per jenis operasi. Ada juga batas langganan global yang setara dengan 15 kali batas perwakilan layanan individual untuk setiap jenis operasi. Batas global berlaku di semua perwakilan layanan. Permintaan akan dibatasi jika batas spesifik global, perwakilan layanan, atau penyewa terlampaui.

Batasannya mungkin lebih kecil untuk pelanggan gratis atau uji coba.

Misalnya, Anda memiliki ukuran wadah 250 token untuk permintaan baca dan tingkat isi ulang 25 token per detik. Jika Anda mengirim 250 permintaan baca dalam detik, wadah kosong dan permintaan Anda dibatasi. Setiap detik, 25 token tersedia sampai wadah mencapai kapasitas maksimum 250 token. Anda dapat menggunakan token saat tersedia.

Bagaimana cara mengetahui apakah langganan saya menggunakan pengalaman pembatasan baru?

Setelah langganan Anda dimigrasikan ke pengalaman pembatasan baru, header respons memperlihatkan permintaan yang tersisa per menit, bukan per jam. Selain itu, nilai Anda Retry-After menunjukkan satu menit atau kurang, bukan lima menit. Untuk informasi selengkapnya, lihat Kode kesalahan.

Mengapa pembatasan berubah ke per wilayah daripada per instans?

Karena wilayah yang berbeda memiliki jumlah instans Resource Manager yang berbeda, pembatasan per instans menyebabkan performa pembatasan yang tidak konsisten. Pembatasan per wilayah membuat pembatasan konsisten dan dapat diprediksi.

Bagaimana pengalaman pembatasan baru memengaruhi batas saya?

Anda dapat mengirim lebih banyak permintaan. Permintaan tulis meningkat 30 kali lipat. Permintaan penghapusan meningkat 2,4 kali. Permintaan baca meningkat 7,5 kali lipat.

Dapatkah saya mencegah langganan saya bermigrasi ke pengalaman pembatasan baru?

Tidak, semua langganan pada akhirnya akan dimigrasikan.

Batas penyedia sumber daya

Penyedia sumber daya menerapkan batas pembatasan mereka sendiri. Dalam setiap langganan, penyedia sumber daya membatasi per wilayah sumber daya dalam permintaan. Karena Resource Manager membatasi berdasarkan instans Resource Manager, dan ada beberapa instans Resource Manager di setiap wilayah, penyedia sumber daya mungkin menerima lebih banyak permintaan daripada batas default di bagian sebelumnya.

Bagian ini membahas batas pembatasan dari beberapa penyedia sumber daya yang banyak digunakan.

Pembatasan penyimpanan

Batasan berikut ini hanya berlaku saat Anda melakukan operasi manajemen dengan menggunakan Azure Resource Manager dengan Azure Storage. Batasan berlaku per wilayah sumber daya dalam permintaan.

Sumber daya Batasan
Operasi manajemen akun penyimpanan (baca) 800 per 5 menit
Operasi manajemen akun penyimpanan (baca) 10 per detik/1.200 per jam
Operasi manajemen akun penyimpanan (daftar) 100 per 5 menit

Pembatasan jaringan

Penyedia sumber daya Microsoft.Network menerapkan batas pembatasan berikut:

Operasi Batas
tulis/hapus (PUT) 1000 per 5 menit
baca (GET) 10000 per 5 menit

Selain batas umum tersebut, batas berikut berlaku untuk operasi DNS:

Operasi Zona DNS Batas (per zona)
Buat atau Perbarui 40 per menit
Hapus 40 per menit
Dapatkan 1000 per menit
List 60 per menit
List By Resource Group 60 per menit
Pembaruan 40 per menit
Operasi Kumpulan Catatan DNS Batas (per zona)
Buat atau Perbarui 200 per menit
Hapus 200 per menit
Dapatkan 2000 per menit
Daftar Menurut Zona DNS 60 per menit
Daftar Menurut Jenis 60 per menit
Pembaruan 200 per menit

Pembatasan komputasi

Untuk informasi tentang batas pembatasan untuk operasi komputasi, lihat Memecahkan masalah kesalahan pembatasan API - Komputasi.

Untuk memeriksa instans komputer virtual dalam Virtual Machine Scale Set, gunakan operasi Virtual Machine Scale Sets. Misalnya, gunakan VM Kumpulan Skala Komputer Virtual - Daftar dengan parameter untuk memeriksa status daya instans komputer virtual. API ini mengurangi jumlah permintaan.

Pembatasan Azure Resource Graph

Azure Resource Graph membatasi jumlah permintaan untuk operasinya. Langkah-langkah dalam artikel ini untuk menentukan permintaan yang tersisa dan cara merespons ketika batas tercapai juga berlaku untuk Resource Graph. Namun, Resource Graph menetapkan batas dan laju atur ulangnya. Untuk informasi selengkapnya, lihat Header pembatasan Resource Graph.

Penyedia sumber daya lainnya

Untuk informasi tentang pembatasan di penyedia sumber daya lain, lihat:

Kode kesalahan

Jika mencapai batas, Anda akan menerima kode status HTTP 429 Terlalu banyak permintaan. Respons mencakup nilai Retry-After, yang menentukan jumlah detik aplikasi Anda harus menunggu (atau tidur) sebelum mengirim permintaan berikutnya. Jika Anda mengirim permintaan sebelum nilai coba lagi berlalu, permintaan Anda tidak diproses dan nilai coba lagi baru dikembalikan.

Jika Anda menggunakan Azure SDK, SDK mungkin memiliki konfigurasi coba ulang otomatis. Untuk informasi selengkapnya, lihat Panduan percobaan ulang untuk layanan Azure.

Beberapa penyedia sumber daya menampilkan 429 untuk melaporkan masalah sementara. Masalahnya dapat berupa kondisi kelebihan beban yang tidak secara langsung disebabkan oleh permintaan Anda. Atau, ini dapat mewakili kesalahan sementara tentang status sumber daya target atau sumber daya dependen. Misalnya, penyedia sumber daya jaringan menampilkan 429 dengan kode kesalahan RetryableErrorDueToAnotherOperation saat sumber daya target dikunci oleh operasi lain. Untuk menentukan apakah kesalahan berasal dari pembatasan atau kondisi sementara, lihat detail kesalahan dalam respons.

Permintaan yang tersisa

Anda dapat menentukan jumlah permintaan yang tersisa dengan memeriksa header respons. Permintaan baca menampilkan nilai di header untuk jumlah permintaan baca yang tersisa. Permintaan tulis mencakup nilai untuk jumlah permintaan tulis yang tersisa. Tabel berikut ini menjelaskan header respons yang dapat Anda periksa untuk nilai tersebut:

Header respons Deskripsi
x-ms-ratelimit-remaining-subscription-deletes Sisa hapus yang dicakup langganan. Nilai ini ditampilkan pada operasi hapus.
x-ms-ratelimit-remaining-subscription-reads Sisa baca yang dicakup langganan. Nilai ini ditampilkan pada operasi baca.
x-ms-ratelimit-remaining-subscription-writes Sisa tulis yang dicakup langganan. Nilai ini ditampilkan pada operasi tulis.
x-ms-ratelimit-remaining-tenant-reads Sisa baca yang dicakup penyewa
x-ms-ratelimit-remaining-tenant-writes Sisa tulis yang dicakup penyewa
x-ms-ratelimit-remaining-subscription-resource-requests Sisa permintaan tipe sumber daya yang dicakup langganan.

Nilai header ini hanya dikembalikan jika layanan mengambil alih batas default. Resource Manager menambahkan nilai ini, bukan baca atau tulis langganan.
x-ms-ratelimit-remaining-subscription-resource-entities-read Sisa permintaan pengumpulan tipe sumber daya yang dicakup langganan.

Nilai header ini hanya dikembalikan jika layanan mengambil alih batas default. Nilai ini menyediakan jumlah sisa permintaan pengumpulan (sumber daya daftar).
x-ms-ratelimit-remaining-tenant-resource-requests Sisa permintaan tipe sumber daya yang dicakup penyewa.

Header ini hanya ditambahkan untuk permintaan di tingkat penyewa, dan hanya jika layanan mengambil alih batas default. Resource Manager menambahkan nilai ini, bukan baca atau tulis penyewa.
x-ms-ratelimit-remaining-tenant-resource-entities-read Sisa permintaan pengumpulan tipe sumber daya yang dicakup penyewa.

Header ini hanya ditambahkan untuk permintaan di tingkat penyewa, dan hanya jika layanan mengambil alih batas default.

Penyedia sumber daya juga dapat mengembalikan header respons dengan informasi tentang permintaan yang tersisa. Untuk informasi tentang header respons yang dikembalikan oleh penyedia sumber daya Komputasi, lihat Header respons informasi tingkat panggilan.

Mengambil nilai header

Mengambil nilai header ini dalam kode atau skrip Anda tidak berbeda dengan mengambil nilai header apa pun.

Misalnya, di C#, Anda mengambil nilai header dari objek HttpWebResponse bernama respons dengan kode berikut:

response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)

Di PowerShell, Anda mengambil nilai header dari operasi Invoke-WebRequest.

$r = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/{guid}/resourcegroups?api-version=2016-09-01 -Method GET -Headers $authHeaders
$r.Headers["x-ms-ratelimit-remaining-subscription-reads"]

Untuk contoh PowerShell lengkap, lihat Memeriksa Batas Resource Manager untuk Langganan.

Jika Anda ingin melihat permintaan debugging yang tersisa, Anda dapat memberikan parameter -Debug pada cmdlet PowerShell Anda.

Get-AzResourceGroup -Debug

Yang mengembalikan banyak nilai, termasuk nilai respons berikut:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-reads: 11999

Untuk mendapatkan batas tulis, gunakan operasi tulis:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

Yang mengembalikan banyak nilai, termasuk nilai respons berikut:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
Created

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199

Di Azure CLI, Anda mengambil nilai header dengan menggunakan opsi lebih verbose.

az group list --verbose --debug

Yang mengembalikan banyak nilai, termasuk nilai respons berikut:

msrest.http_logger : Response status: 200
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Content-Encoding': 'gzip'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'Vary': 'Accept-Encoding'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-reads': '11998'

Untuk mendapatkan batas tulis, gunakan operasi tulis:

az group create -n myresourcegroup --location westus --verbose --debug

Yang mengembalikan banyak nilai, termasuk nilai respons berikut:

msrest.http_logger : Response status: 201
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Length': '163'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-writes': '1199'

Langkah berikutnya