如何利用Sentinel配置限流
- 启动Sentinel控制台;
- 项目中引入Sentinel依赖;
- 先访问要限流的资源;
- 访问Sentinel控制台,设置按照qps或者线程数等限流规则
滑动窗口算法
在限流中,滑动窗口算法通常用于实现基于时间的限流策略,例如限制一定时间窗口内的请求数量。
滑动时间窗口算法中只包含1个固定跨度的窗口,但窗口是可移动动的,与时间区间无关。
具体规则如下:
- 窗口时间跨度Interval大小固定,例如1秒
- 时间区间跨度为Interval / n ,例如n=2,则时间区间跨度为500ms
- 窗口会随着当前请求所在时间currentTime移动,窗口范围从currentTime-Interval时刻之后的第一个时区开始,到currentTime所在时区结束。
Gateway网关作用
作用:路由与鉴权,以外有如下:
限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。
缓存:数据缓存。
日志:日志记录。
监控:记录请求响应数据,api耗时分析,性能监控。
鉴权:权限身份认证。
灰度:线上灰度部署,可以减小风险。
路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。
Gateway实现原理
- 初始化阶段:Spring Cloud Gateway 启动时会加载配置文件中定义的路由规则,创建对应的 RouteDefinition 对象。
- 路由匹配:当接收到一个请求时,Gateway 会依次匹配定义的路由规则,找到符合条件的路由。
- 过滤器链:针对匹配到的路由,依次执行该路由配置的过滤器链,对请求进行处理。
- 执行过滤器:每个过滤器可以修改请求和响应,记录日志,进行权限校验等操作。
- 转发请求:经过所有过滤器处理后,将请求转发给目标服务。
- 返回响应:将目标服务的响应返回给客户端。
过滤器实现方式
在 Spring Cloud Gateway 中,过滤器(Filter)用于对传入的 HTTP 请求或传出的 HTTP 响应进行处理,可以实现日志记录、请求转发、权限校验、请求修改等功能。Spring Cloud Gateway内置了许多常用的过滤器,同时也支持自定义过滤器来满足特定的业务需求。以下是一些常用的内置过滤器及其功能:
- AddRequestHeader:向请求头中添加指定的键值对。
- AddRequestParameter:向请求参数中添加指定的键值对。
- RewritePath:重写请求路径。
- StripPrefix:去除请求路径中的n段前缀。
- SetStatus:设置响应的状态码。
- AddResponseHeader:向响应头中添加指定的键值对。