序言

如何设计一款限流框架?

核心组件

这个锁可以是对象锁

全局锁

分布式锁

令牌

限制瞬时并发数

限制时间窗最大请求数

令牌桶

限流的维度

可以 1s 内

1min 内

1h 内

1D 内

这里应该是一个责任链,全部满足才能放行。

限制类型

次数

频率

编写方式

声明式

注解式

个人收获

服务平台的思想

所有的服务都可以使用类似的策略。

或者说这个可以抽离成为一个微服务,可以页面配置等等。

使用者只需要通过 client 简单的连接,就可以达到限流的目的。

这个适用于很多工具,而且不局限于 java 语言。服务暴露之后可以提供 RPC & Http 等常见协议。

Redis 的底层化

如今很多工具的底层都是强依赖 redis 的,这说明 redis 的设计确实非常优秀。

但是我们在设计框架的时候应该警醒,redis 只是一种实现策略,而不是我们实现的基石。

这种 SPI 的思想非常重要。

兼容 spring(springBoot)

java 界的 spring 基本是如日中天。

所以可以考虑为框架添加对于 spring 的支持。

拓展阅读

参考资料

spring-cloud-zuul-ratelimit

主要用于开放平台的接口限流框架

基于 redis 限流系统

RedisRateLimiter-Redis Based API Access Rate Limiter

java-rate-limiter

neural

rate-limiter

QPS流量控制starter

基于redis的分布式限流方案

A redis-backed rate limiter for dropwizard

应用级限流