In-Memory Sliding Window Rate Limiter

30:00

1. Studi Kasus

Penyalahgunaan API dan serangan spam dapat membebani server aplikasi. Tugas Anda adalah membuat middleware Sliding Window Rate Limiter In-Memory untuk Express.js guna melindungi endpoint API sensitif.

POST /api/action

2. Requirement & Aturan

  1. Window Size: 60 detik (60.000 milidetik).
  2. Batas Request: Maksimal 5 request per menit per IP client.
  3. HTTP 429 Too Many Requests: Jika IP melebihi 5 request dalam jendela 60 detik, tolak request dengan HTTP 429 dan pesan "Rate limit exceeded. Try again later.".
  4. Manajemen Memori: Hapus timestamp lama (lebih dari 60 detik) dari log array IP setiap kali ada request untuk mencegah kebocoran memori (memory leak).
  5. Format Client IP: Ambil IP dari req.headers['x-forwarded-for'] || req.ip || '127.0.0.1'.

3. Data Awal In-Memory

const ipRequestLogs = {}; // Format: { "192.168.1.1": [timestamp1, timestamp2, ...] }

4. Pertanyaan Bonus Konseptual 💡

Distributed Rate Limiting Menggunakan Redis Di bagian komentar kode solusi Anda, jelaskan cara migrasi rate limiter ini agar berjalan di arsitektur multi-instance server terdistribusi menggunakan Redis. Bandingkan:

  • Redis Fixed Window: INCR + EXPIRE
  • Redis Sliding Window Log: ZADD + ZREMRANGEBYSCORE + ZCARD
solution.js
Loading...
Local Test Console