Rate Limit dan Retry Policy: Arsitektur API Bot yang Tangguh
Pelajari strategi implementasi rate limit dan retry policy untuk menjaga konektivitas bot Anda dengan REST API exchange agar tetap stabil dan andal.

Rate limiting adalah mekanisme kontrol frekuensi permintaan API untuk mencegah penyalahgunaan dan memastikan keadilan penggunaan sumber daya. Untuk bot yang andal, Anda wajib mengimplementasikan mekanisme penanganan HTTP 429 (Too Many Requests) menggunakan strategi backoff eksponensial agar bot tidak terputus dari layanan exchange.
Masalah: Ancaman Rate Limit di Lingkungan Produksi
Dalam pengembangan bot untuk berinteraksi dengan API exchange, batasan frekuensi permintaan (rate limit) adalah realitas teknis yang tidak terelakkan. Exchange menerapkan batasan ini untuk melindungi infrastruktur mereka dari beban berlebih yang bisa menyebabkan degradasi performa bagi seluruh pengguna.
Ketika bot Anda mengirimkan permintaan melebihi kuota yang diizinkan, server akan merespons dengan status kode HTTP 429. Jika bot Anda tidak memiliki kebijakan penanganan (retry policy) yang cerdas, bot akan terus mengirimkan permintaan yang gagal, yang pada gilirannya bisa memicu pemblokiran sementara atau permanen terhadap alamat IP atau kunci API Anda. Bagi sistem yang membutuhkan latensi rendah, kegagalan menangani 429 secara elegan akan menyebabkan kerugian eksekusi yang signifikan.
Desain Arsitektur Penanganan Error
Arsitektur yang baik harus memisahkan logika eksekusi bisnis dengan logika komunikasi API. Anda memerlukan lapisan abstraksi (wrapper) yang memantau header respons API. Sebagian besar exchange menyertakan header seperti X-RateLimit-Limit, X-RateLimit-Remaining, dan Retry-After.
Strategi Retry Policy
Jangan pernah melakukan retry secara agresif atau tanpa jeda (looping ketat). Strategi yang disarankan adalah:
- Fixed Delay: Menunggu durasi tetap sebelum mencoba kembali (kurang disarankan untuk beban tinggi).
- Exponential Backoff: Meningkatkan durasi tunggu secara eksponensial setiap kali terjadi kegagalan (misal: 100ms, 200ms, 400ms, 800ms).
- Jitter: Menambahkan elemen acak pada durasi tunggu untuk menghindari fenomena "thundering herd" di mana banyak instance bot mencoba melakukan retry secara bersamaan.
Langkah Implementasi
Berikut adalah contoh pseudocode untuk menangani permintaan dengan mekanisme retry sederhana.

1. Pembungkusan Fungsi Permintaan
import time
import random
def call_api_with_retry(request_func, max_retries=3):
for attempt in range(max_retries):
response = request_func()
if response.status_code == 200:
return response
elif response.status_code == 429:
# Mengambil waktu tunggu dari header atau menggunakan default
wait_time = int(response.headers.get('Retry-After', 2 ** attempt))
time.sleep(wait_time + random.uniform(0, 0.1))
else:
response.raise_for_status()
raise Exception("Maksimum retry tercapai")
Pitfall Produksi
- Mengabaikan Header: Selalu periksa header
Retry-Aftersebelum menentukan durasi tidur bot Anda. - Logging yang Berlebihan: Saat terjadi error 429, pastikan sistem logging Anda tidak membanjiri disk storage dengan log error yang identik.
- Sinkronisasi Waktu: Pastikan jam pada server bot Anda sinkron (NTP) agar perhitungan window rate limit tidak bias.
- Idempotency: Gunakan idempotency key pada setiap permintaan order agar retry tidak menyebabkan duplikasi order di sisi exchange.
Checklist Keamanan dan Operasional
- [ ] Simpan API Key dan Secret dalam environment variables, jangan hardcode di source code.
- [ ] Implementasikan circuit breaker untuk menghentikan pengiriman permintaan secara otomatis jika error rate melebihi ambang batas.
- [ ] Pantau limit sisa (
X-RateLimit-Remaining) dan lakukan throttling preventif sebelum mencapai limit. - [ ] Pastikan bot memiliki mekanisme graceful shutdown untuk menghentikan semua koneksi jika terjadi anomali pada API.
FAQ
Apakah saya bisa menghindari rate limit dengan menambah jumlah thread bot?
Tidak. Rate limit biasanya dihitung berdasarkan IP atau API Key. Menambah thread justru akan mempercepat pencapaian batas limit dan meningkatkan risiko pemblokiran.
Apa yang harus dilakukan jika saya terus mendapatkan 429 padahal sudah melakukan retry?
Periksa kembali apakah frekuensi permintaan Anda secara keseluruhan masih di bawah batas per detik yang ditentukan. Jika masih terjadi, kurangi intensitas polling atau beralihlah ke WebSocket jika exchange menyediakannya untuk data real-time.
Related posts in Pengembangan Bot & Infrastruktur
- Pengembangan Bot & Infrastruktur
Historical Replay & Mock Exchange: Strategi Uji Bot Trading
Pelajari arsitektur pengujian bot trading menggunakan historical replay dan mock exchange untuk memvalidasi logika eksekusi tanpa risiko modal di pasar nyata.
MangAlgo
- Pengembangan Bot & Infrastruktur
Logging, Monitoring, dan Alerting untuk Bot Produksi yang Stabil
Pelajari cara membangun sistem logging, monitoring, dan alerting untuk bot produksi guna memastikan stabilitas infrastruktur dan efisiensi eksekusi sistem.
MangAlgo
- Pengembangan Bot & Infrastruktur
Paper Trading vs Live Bot: Checklist Deploy Sistem Trading Otomatis
Panduan checklist sebelum deploy bot trading otomatis: paper trading vs live. Infrastruktur, latensi, regulasi. Hindari risiko dengan persiapan matang.
MangAlgo
