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.
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
Microsoft Compute menerapkan pembatasan untuk memberikan pengalaman optimal bagi pengguna Virtual Machine dan Virtual Machine Scale Set. Batas Pembatasan Komputasi menyediakan informasi komprehensif tentang kebijakan dan batas pembatasan untuk VM, Set Skala Komputer Virtual, dan VM Set Skala.
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
- Untuk informasi selengkapnya tentang batas dan kuota, lihat Batas, kuota, dan hambatan langganan dan layanan Azure.
- Untuk mempelajari cara menangani permintaan REST asinkron, lihat Melacak operasi Azure asinkron.