A bucket refills with tokens at a steady rate up to a cap; each request spends one, allowing controlled bursts up to the cap.