Mengapa counter lokal cepat gagal
Counter di memory instance terlihat sederhana, tetapi tidak mengetahui request yang sedang dilayani instance lain. Hasilnya, batas per pengguna menjadi berbeda-beda tergantung load balancer dan waktu kedatangan request.
Token bucket menyimpan kapasitas, laju pengisian, dan waktu pengambilan token. State bersama dapat diletakkan di Redis dengan operasi atomik agar beberapa instance tidak mengeluarkan token yang sama.
Respons saat batas tercapai
API sebaiknya mengembalikan status yang konsisten, header retry yang jelas, dan pesan yang dapat dipahami klien. Rate limit adalah bagian dari kontrak layanan, bukan sekadar middleware tersembunyi.