| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| auth.go | ||
| cache.go | ||
| cors.go | ||
| distributor.go | ||
| gzip.go | ||
| logger.go | ||
| model-rate-limit.go | ||
| rate-limit.go | ||
| recover.go | ||
| request-id.go | ||
| turnstile-check.go | ||
| utils.go |
Reason: The original steps 1 and 3 in the redisRateLimitHandler method were not atomic, leading to poor precision under high concurrent requests. For example, with a rate limit set to 60, sending 200 concurrent requests would result in none being blocked, whereas theoretically around 140 should be intercepted. Solution: I chose not to merge steps 1 and 3 into a single Lua script because a single atomic operation involving read, write, and delete operations could suffer from performance issues under high concurrency. Instead, I implemented a token bucket algorithm to optimize this, reducing the atomic operation to just read and write steps while significantly decreasing the memory footprint.
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| auth.go | Loading commit data... | |
| cache.go | Loading commit data... | |
| cors.go | Loading commit data... | |
| distributor.go | Loading commit data... | |
| gzip.go | Loading commit data... | |
| logger.go | Loading commit data... | |
| model-rate-limit.go | Loading commit data... | |
| rate-limit.go | Loading commit data... | |
| recover.go | Loading commit data... | |
| request-id.go | Loading commit data... | |
| turnstile-check.go | Loading commit data... | |
| utils.go | Loading commit data... |