Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Minta pelambatan untuk Amazon RDS API
Amazon RDS membatasi permintaan API untuk masing-masing Akun AWS di setiap AWS Wilayah. Ini membantu kinerja layanan dan memastikan penggunaan yang wajar untuk semua pelanggan Amazon RDS. Throttling memastikan bahwa permintaan ke Amazon RDS API tidak melebihi batas permintaan API maksimum yang diizinkan. Batas permintaan berlaku untuk permintaan API dari sumber apa pun, termasuk yang berikut ini.
-
Kode aplikasi Anda sendiri menggunakan AWS SDK
-
Alat baris perintah, seperti AWS CLI
-
Amazon Aurora konsol
-
Alat pihak ketiga yang menggunakan kredenSIAL akun Anda, seperti infrastruktur sebagai kode atau alat pemantauan
Amazon Aurora menggunakan Amazon RDS API, jadi batasan yang sama berlaku untuk permintaan API Aurora.
Jika Anda menggunakan operasi Amazon RDS API apa pun dan melebihi batas default untuk jumlah panggilan per detik, Amazon RDS API mengeluarkan kesalahan seperti yang berikut ini.
ClientError: Terjadi kesalahan (ThrottlingException) saat memanggil API_name operasi: Tingkat terlampaui.
Kesalahan ini berarti akun Anda melebihi batas permintaan API-nya. Secara default, Anda dapat membuat hingga 300 permintaan dalam burst dan 12 permintaan berkelanjutan per detik. Untuk menghindari kesalahan ini, coba lagi permintaan dengan backoff eksponensial, kurangi tingkat permintaan Anda, atau minta kenaikan batas. Lihat informasi selengkapnya di Percobaan ulang dan mundur eksponensial, Mengurangi jumlah permintaan API, dan Minta kenaikan batas.
Topik
Bagaimana throttling diterapkan
Amazon RDS menggunakan bucket token untuk membatasi permintaan API. Memahami cara kerja bucket membantu Anda memprediksi kapan pelambatan terjadi dan merencanakan tingkat permintaan Anda.
Akun Anda memiliki ember yang menampung sejumlah token. Setiap permintaan menghabiskan satu token, dan Amazon RDS menambahkan token kembali pada tingkat yang stabil. Jumlah token dalam bucket adalah jumlah permintaan yang dapat Anda buat pada saat itu.
Akun Anda memiliki satu bucket untuk masing-masing AWS Wilayah, dibagikan oleh semua tindakan API Amazon RDS. Setiap permintaan yang Anda buat menghapus satu token dari bucket. Misalkan ukuran bucket adalah 300 token. Anda dapat membuat hingga 300 permintaan dalam satu detik. Jika Anda melebihi 300 permintaan dalam satu detik, Anda dibatasi dan permintaan yang tersisa dalam detik itu gagal.
Bucket secara otomatis diisi ulang pada tingkat yang ditetapkan. Jika bucket di bawah kapasitas maksimumnya, Amazon RDS menambahkan sejumlah token kembali ke dalamnya setiap detik hingga mencapai kapasitas maksimumnya.
Jika ember penuh saat token isi ulang tiba, ember membuangnya. Bucket tidak dapat menampung lebih dari jumlah maksimum token.
Misalkan ukuran bucket adalah 300 token dan tingkat isi ulang adalah 12 token per detik. Jika Anda membuat 300 permintaan dalam satu detik, bucket turun ke nol (0) token.
Ember kemudian diisi ulang sebanyak 12 token setiap detik. Ini mencapai kapasitas maksimum 300 token setelah 25 detik jika Anda tidak membuat permintaan selama waktu itu.
Anda tidak perlu menunggu bucket benar-benar penuh sebelum Anda dapat membuat permintaan API. Anda dapat menggunakan token isi ulang saat ditambahkan ke ember. Jika Anda menghabiskan bucket dengan membuat 300 permintaan dalam satu detik, Anda dapat terus membuat 12 permintaan per detik dengan menggunakan token isi ulang saat ditambahkan ke bucket. Bucket dapat diisi ulang hingga kapasitas maksimum hanya jika Anda membuat kurang dari 12 permintaan per detik.
Amazon RDS secara terpisah membatasi permintaan itu AWS layanan, seperti AWS CloudFormation, buat atas nama Anda. Permintaan ini tidak menggunakan token dari bucket akun Anda.
Ukuran bucket token dan tingkat isi ulang
Tabel berikut menunjukkan batas pembatasan permintaan API default untuk masing-masing Akun AWS di setiap AWS Wilayah.
| Tindakan API | Kapasitas maksimum bucket | Tingkat isi ulang bucket (per detik) |
|---|---|---|
| Semua Tindakan API Amazon RDS | 300 | 12 |
Ini adalah batas default. Jika AWS telah meningkatkan batas untuk akun Anda, batas Anda lebih tinggi.
Untuk informasi selengkapnya tentang kuota jumlah sumber daya Amazon RDS yang dapat Anda buat di akun Anda, lihat Kuota dalam Amazon Aurora. Untuk informasi selengkapnya tentang titik akhir dan kuota layanan Amazon RDS, lihat Titik akhir dan kuota Layanan Database Relasional Amazon di Referensi Umum Amazon Web.
Percobaan ulang dan mundur eksponensial
Aplikasi Anda mungkin perlu mencoba lagi permintaan API. Contoh:
-
Untuk memeriksa pembaruan dalam status sumber daya, seperti instance DB yang sedang dibuat atau dimodifikasi
-
Untuk menghitung sejumlah besar sumber daya (misalnya, semua snapshot DB Anda)
-
Untuk mencoba lagi permintaan setelah gagal dengan kesalahan server (5xx) atau kesalahan pembatasan
Namun, untuk kesalahan klien (4xx) selain kesalahan throttling, revisi permintaan untuk memperbaiki masalah sebelum mencoba permintaan lagi.
Perubahan status sumber daya
Sebelum Anda mulai melakukan polling untuk memeriksa pembaruan status, berikan waktu permintaan untuk berpotensi diselesaikan. Misalnya, tunggu beberapa menit sebelum memeriksa apakah instance DB Anda tersedia. Saat memulai polling, gunakan interval tidur yang sesuai antara permintaan berturut-turut untuk menurunkan tingkat permintaan API. Untuk hasil terbaik, gunakan interval tidur yang meningkat atau variabel.
Atau, Anda dapat menggunakan Amazon EventBridge untuk memberi tahu Anda tentang status sumber daya Anda alih-alih polling. Misalnya, Anda dapat menerima peristiwa ketika instance DB tersedia atau ketika snapshot selesai. Untuk informasi selengkapnya, lihat Membuat aturan yang memicu pada Amazon Aurora kejadian.
Percobaan ulang
Saat Anda perlu melakukan polling atau mencoba kembali permintaan API, gunakan algoritma backkoff eksponensial untuk menghitung interval tidur antar permintaan. Tunggu semakin lama di antara percobaan ulang. Tetapkan penundaan maksimum dan jumlah maksimum percobaan ulang. Tambahkan jitter (penundaan acak) untuk mencegah tabrakan berturut-turut. Untuk panduan implementasi, lihat Batas waktu, percobaan ulang, dan mundur dengan jitter di AWS Situs Builders' Library
Masing-masing AWS SDK mengimplementasikan logika coba ulang otomatis, dan mencoba lagi ThrottlingException kesalahan secara default. Untuk informasi lebih lanjut, lihat Perilaku coba lagi di AWS Panduan Referensi SDK dan Alat.
Mengurangi jumlah permintaan API
Karena semua tindakan API berbagi satu bucket, mengurangi permintaan dari pemanggil mana pun membebaskan kapasitas untuk setiap pemanggil lain di akun Anda. Sebelum meminta kenaikan batas, pertimbangkan hal berikut.
- Tanggapan cache
-
Informasi yang dikembalikan oleh
Describe*Tindakan, sepertiDescribeDBInstancesdanDescribeDBClusters, biasanya jarang berubah. Cache hasilnya dan gunakan kembali alih-alih memanggil API setiap kali Anda membutuhkan informasi. - Batasi tingkat permintaan Anda di sisi klien
-
Bentuk tingkat permintaan keluar Anda agar tetap di bawah tingkat berkelanjutan sebelum mengirim permintaan, daripada mengandalkan percobaan ulang setelah pelambatan.
- Ganti polling dengan acara
-
Gunakan Amazon EventBridge untuk diberitahu tentang perubahan status sumber daya alih-alih memanggil berulang kali
Describe*tindakan. - Minta hanya apa yang Anda butuhkan
-
Tentukan pengenal atau gunakan
FiltersParameter sehingga aDescribe*tindakan hanya mengembalikan sumber daya yang Anda minati, dan menelusuri kumpulan hasil besar denganMaxRecordsdanMarker. - Sebarkan permintaan yang dijadwalkan
-
Jika banyak pekerja, pekerjaan terjadwal, atau agen pemantauan memanggil API pada saat yang sama, tambahkan penundaan acak ke masing-masing sehingga permintaan tersebar dari waktu ke waktu alih-alih tiba dalam burst.
Identifikasi sumber permintaan yang dibatasi
AWS CloudTrail mencatat setiap permintaan API di akun Anda. Setiap catatan menunjukkan kepada Anda siapa yang membuat permintaan, alat mana yang membuatnya, dan apakah berhasil. Gunakan AWS CloudTrail untuk menemukan pengguna, peran, atau alat mana yang membuat sebagian besar permintaan Anda. Untuk informasi selengkapnya tentang pencatatan log AWS CloudTrail , lihat Memantau panggilan API Amazon Aurora AWS CloudTrail.
Melihat batas API Anda saat ini
Kuota Layanan tidak mengelola batas pembatasan API Amazon RDS, dan tidak muncul di konsol Kuota Layanan. Kecuali AWS telah meningkatkan batas untuk akun Anda, batas default berlaku. Jika akun Anda telah menerima peningkatan dan Anda tidak mengetahui batas Anda saat ini, buka kasus dukungan untuk mengonfirmasinya.
Minta kenaikan batas
Anda dapat meminta peningkatan batas pelambatan API untuk Akun AWS dengan membuka kasing dukungan. Kenaikan batas bukan layanan mandiri, dan AWS tidak menyetujuinya secara otomatis. AWS meninjau permintaan Anda dan lalu lintas terbaru Anda sebelum menerapkan batas baru. Berikan waktu untuk peninjauan dan batas baru berlaku.
Rekomendasi
Pertimbangkan rekomendasi berikut sebelum Anda meminta kenaikan.
-
Dasarkan permintaan Anda pada tingkat permintaan puncak yang Anda ukur. AWS meninjau pola lalu lintas Anda sebelum menyetujui peningkatan.
-
Prioritaskan peningkatan tingkat isi ulang bucket jika Anda terhambat selama lalu lintas berkelanjutan. Tingkatkan kapasitas maksimum bucket jika Anda terhambat selama semburan pendek.
-
Sebarkan pekerjaan terjadwal atau kelompok pekerja yang dimulai pada saat yang sama sebelum Anda meminta kenaikan. Menyebarkan permintaan biasanya menyelesaikan pelambatan tanpa peningkatan batas.
-
Kirim permintaan untuk acara yang direncanakan, seperti migrasi atau penyebaran besar, jauh sebelum acara.
Membuka kasus dukungan
Jika Anda masih membutuhkan batas yang lebih tinggi setelah meninjau rekomendasi, buat kasus di AWS Dukungan Konsol tengah
Untuk mempercepat peninjauan, salin template berikut ke dalam deskripsi kasus. Ganti account_id, region, dan nilai-nilai lain dengan informasi Anda sendiri:
Please increase the Amazon RDS API throttling limits for my account. Account ID(s):account_idRegion(s):regionDescription:use_caseAPI actions:api_actionsTime window:time_windowChanges already made:changes_madeRequested limits: Bucket maximum capacity:current_bucket_capacity->requested_bucket_capacityBucket refill rate:current_refill_rate->requested_refill_rate
Template menggunakan nilai-nilai berikut.
account_id-
The Akun AWS ID, atau ID, yang membutuhkan peningkatan.
region-
The AWS Wilayah, atau Wilayah, tempat Anda dibatasi.
use_case-
Kasus penggunaan Anda dan alat yang memanggil Amazon RDS API, seperti aplikasi Anda, AWS CLI, alat infrastruktur sebagai kode, atau agen pemantauan.
api_actions-
Tindakan Amazon RDS API yang menghasilkan sebagian besar permintaan Anda.
time_window-
Jendela satu jam, dalam UTC, saat Anda melihat pembatasan atau penggunaan puncak. Untuk acara yang direncanakan, tanggal mulai dan akhir yang direncanakan.
changes_made-
Apa pun yang sudah Anda coba untuk mengurangi permintaan, seperti percobaan ulang dengan backoff eksponensial, caching, atau polling yang kurang sering.
current_bucket_capacity,requested_bucket_capacity-
Kapasitas maksimum bucket Anda saat ini dan yang diminta (burst).
current_refill_rate,requested_refill_rate-
Tingkat isi ulang bucket Anda saat ini dan yang diminta, dalam permintaan per detik (berkelanjutan).
Semakin banyak konteks yang Anda berikan tentang lalu lintas Anda, semakin cepat AWS dapat menemukan batas yang tepat untuk Anda.