Membuat Rate Limiter untuk API dengan Redis
Implementasi rate limiting di Node.js menggunakan Redis untuk melindungi API dari abuse dan overload.
Mengapa Perlu Rate Limiting?
Tanpa rate limiting, API bisa di-abuse oleh user atau bot yang mengirim request secara massal. Ini bisa menyebabkan server down dan dampak ke user lain.
Strategi Rate Limiting
1. Fixed Window
Membatasi jumlah request dalam window waktu tetap (misal 100 request per menit). Simple tapi bisa burst di boundary window.
2. Sliding Window Log
Menyimpan timestamp setiap request. Lebih akurat tapi memory intensive.
3. Token Bucket
Token diisi ulang secara periodik. Setiap request mengurangi token. Fleksibel untuk burst traffic.
Implementasi dengan Redis
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
async function rateLimit(key: string, limit: number, windowMs: number) {
const now = Date.now();
const windowStart = now - windowMs;
const pipeline = redis.pipeline();
pipeline.zremrangebyscore(key, 0, windowStart);
pipeline.zadd(key, now, `${now}-${Math.random()}`);
pipeline.zcard(key);
pipeline.pexpire(key, windowMs);
const results = await pipeline.exec();
const count = results?.[2]?.[1] as number;
return count <= limit;
}
Kesimpulan
Rate limiting adalah pertahanan dasar yang wajib ada di setiap API. Redis membuat implementasinya efisien dan scalable.
Tomi Hartanto
Senior Software Engineer
Backend developer dengan 8+ tahun pengalaman membangun sistem scalable. Menulis tentang arsitektur backend, database, dan DevOps.
Tomi Hartanto
Senior Software EngineerBackend developer dengan 8+ tahun pengalaman membangun sistem scalable. Menulis tentang arsitektur backend, database, dan DevOps.
