Teknik API Rate Limiting: Strategi Efektif Mengelola Trafik

Definisi dan Fungsi Utama

API Rate Limiting adalah mekanisme kontrol trafik yang membatasi jumlah permintaan (request) yang dapat dilakukan pengguna atau klien ke server dalam jangka waktu tertentu. Tujuannya adalah mencegah penyalahgunaan API, melindungi server dari serangan DoS (Denial of Service), serta memastikan ketersediaan layanan bagi seluruh pengguna.

Algoritma Utama Rate Limiting

Berikut adalah algoritma standar industri yang digunakan untuk mengimplementasikan pembatasan trafik:

AlgoritmaCara KerjaKelebihanKekurangan
Fixed WindowMembatasi request dalam jendela waktu tetap (misal: 100 req/menit).Sederhana, hemat memori.Lonjakan trafik di batas jendela waktu.
Sliding Window LogMelacak timestamp setiap request dalam log.Akurasi sangat tinggi.Konsumsi memori besar.
Sliding Window CounterKombinasi fixed window dan bobot jendela sebelumnya.Efisiensi memori dan akurasi seimbang.Estimasi, bukan presisi mutlak.
Token BucketBucket berisi token; setiap request mengambil 1 token.Mendukung burst trafik.Kompleksitas implementasi.
Leaky BucketRequest diproses dengan laju konstan (seperti air bocor).Output trafik stabil.Tidak mendukung burst trafik.

Implementasi Teknis (Contoh Kode: Token Bucket)

Berikut adalah contoh implementasi logika dasar Token Bucket menggunakan Python untuk membatasi request:

import time

class TokenBucket:
    def __init__(self, capacity, fill_rate):
        self.capacity = capacity
        self.fill_rate = fill_rate
        self.tokens = capacity
        self.last_fill = time.time()

    def consume(self, tokens=1):
        now = time.time()
        elapsed = now - self.last_fill
        self.tokens = min(self.capacity, self.tokens + elapsed * self.fill_rate)
        self.last_fill = now

        if self.tokens >= tokens:
            self.tokens -= tokens
            return True
        return False

Strategi Implementasi di Lapangan

Dalam arsitektur sistem modern, rate limiting biasanya diterapkan pada beberapa lapisan:

  • API Gateway: Menggunakan Nginx, Kong, atau AWS API Gateway untuk memfilter trafik sebelum mencapai backend.
  • Distributed Caching: Menggunakan Redis untuk menyimpan counter request secara terpusat agar sinkron di banyak instance server.
  • HTTP Status Codes: Selalu gunakan status 429 Too Many Requests saat batas terlampaui. Sertakan header Retry-After untuk memberi tahu klien kapan mereka bisa mencoba kembali.

Tips Troubleshooting

  1. Monitoring: Pantau metrik 429 error secara real-time untuk mendeteksi potensi serangan atau bug pada klien.
  2. Tiered Limits: Terapkan limit berbeda berdasarkan level autentikasi (misal: user gratis vs user premium).
  3. Graceful Degradation: Pastikan sistem memberikan pesan error yang informatif agar integrasi pihak ketiga tidak rusak secara mendadak.