Batas laju
Batas per menit dan tingkat akses, serta arti 429.
Ringkasan
Ada dua jenis batas, dan keduanya menjawab 429 dengan code yang berbeda.
- Batas per menit: jumlah request dalam satu menit, dihitung per pengguna dan per key. Kodenya
rate_limit_exceeded. - Batas konkurensi: berapa request yang boleh berjalan bersamaan, ditentukan oleh tingkat akses akun. Kodenya
concurrency_exceeded.
Keduanya berlaku, dan yang mana pun lebih dulu tersentuh akan menolak request-nya.
Tingkat akses
Tingkat akses ditentukan dari riwayat pengisian saldomu, bukan dari saldo yang sedang tersisa.
Akun yang belum pernah melakukan pengisian saldo di atas ambang yang ditetapkan NusaRouter masuk ke tingkat free. Tingkat itu mendapat batas konkurensi serta batas per menit yang lebih ketat. Akun yang sudah pernah mengisi saldo di atas ambang itu masuk ke tingkat paid.
Dua sifat yang perlu kamu tahu, karena keduanya menguntungkan kamu:
- Yang dihitung riwayat, bukan sisa saldo. Kalau kamu pernah mengisi saldo di atas ambang lalu saldonya habis terpakai, tingkatmu tidak turun. Menghukum pemakaian justru kebalikan dari yang diinginkan.
- Kenaikannya langsung. Begitu pengisian saldomu terkonfirmasi, request berikutnya sudah memakai batas yang lebih longgar. Tidak ada masa tunggu.
Menangani 429
Setiap 429 membawa header retry-after berisi jumlah detik sebelum kamu boleh mencoba lagi.
HTTP/1.1 429 Too Many Requests
retry-after: 1
{
"error": {
"message": "Rate limit exceeded for scope 'user'. Retry in 1s.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}Pola yang benar: tunggu selama retry-after lalu ulangi, dengan mundur eksponensial kalau masih gagal. Mengulang seketika hanya menambah beban dan biasanya memperpanjang penolakannya.
Perhatikan juga bahwa kode concurrency_exceeded berarti ada requestmu yang masih berjalan. Menunggu bukan selalu jawabannya. Kalau klienmu mengirim banyak request paralel, membatasi jumlah yang berjalan bersamaan lebih efektif daripada mengulang yang ditolak.
Streaming dan konkurensi
Request yang memakai stream: true menahan slot konkurensi selama alirannya terbuka, bukan hanya sampai token pertama datang. Aliran yang panjang karena itu memakai slot lebih lama daripada request biasa. Pada klien yang paralel, hal ini biasanya yang membuat batas konkurensi terasa lebih ketat daripada perhitungan jumlah request.
Troubleshooting
| Gejala | Penyebab | Solusi |
|---|---|---|
429 rate_limit_exceeded | Request per menit melewati batas untuk pengguna atau key. | tunggu retry-after detik; sebar request-nya, atau pisahkan beban ke key lain |
429 concurrency_exceeded | Terlalu banyak request berjalan bersamaan. | batasi paralelisme di klienmu; batas ini tidak bisa dinaikkan dengan membayar |
| 429 hanya di sebagian request | Key berbeda punya kuota per menit sendiri, dan satu key yang sibuk menghabiskan kuotanya. | periksa pemakaian per key di halaman Pemakaian sebelum menambah key |
| 429 terus-menerus setelah menunggu | Klien mengulang terlalu cepat, atau ada beberapa proses memakai key yang sama. | tambahkan jeda antar-percobaan dan pastikan tidak ada proses lain yang memakai key itu |