Discussed in ch. 4 of (Xu) System Design Inteview, vol. 1.
Implementing a rate limiter in a distributed system introduces a potential bottleneck, as requests must first check the rate limiter state. Redis can mitigate this problem, as it enables read replication. To prevent delays on write, send counter increments asynchronously. The lag introduced by asynchronous requests could potentially lead to edge cases where the rate limit is transiently exceeded.
Xu discusses four kinds of rate limiters: