| Field | Version |
|---|---|
| JDK version | 17 |
| Maven version | 3.9.9 |
| Command Type | Command |
|---|---|
| Build | mvn compile |
| Package | mvn package |
| Run Command | mvn spring-boot:run |
| Test Command | mvn test |
该方案采用 Redis 令牌桶算法进行限流。通过配置数据和速率来计算生成令牌的速度,配置数据为“每分钟生成多少个令牌”,从而计算出每秒生成的令牌数量。
-
请求处理:
- 每次用户发起请求时,系统会检查桶中是否有足够的令牌:
- 如果桶中有足够的令牌,消费一个令牌,允许请求通过。
- 如果桶中没有足够的令牌,拒绝请求(限流)。
- 每次用户发起请求时,系统会检查桶中是否有足够的令牌:
-
令牌补充:
- 令牌会根据预定的时间间隔动态补充到桶中。补充过程确保总令牌数不会超过桶的容量,避免桶溢出。
- 令牌生成速率由配置数据决定,通过计算每秒生成的令牌数量来实现平滑的请求处理。
- 令牌桶的容量限制了最大并发请求量,确保系统稳定性。
- 工程项目依赖redis,redis server并没有集成到项目中,后续会采用docker compose的方式,集成redis到项目开发环境中,实现调试。
- 流量统计目前是采用内存方式,后续改进可以集成kafka生产者消费者异步统计请求流量。
- 目前关于redis限流器测试多线程高并发测试case全部是passed,但是本地机器运行docker redis.
相关的demo video在根目录下。