Gateway(服务网关/路由规则/过滤器)
2021-03-11 18:46:23 3 举报
AI智能生成
Gateway(服务网关/路由规则/过滤器)
作者其他创作
大纲/内容
阅读导航
注册中心 Eureka 👉
负载均衡 Ribbon + Feign 👉
断路器 Hystrix 👉
服务网关 Gateway
网关可以做什么
统一接入、动态路由、权限认证、数据缓存
流量控制
熔断
降级
限流
性能监控、日志监控、灰度发布
安全防护
IP黑名单、URL黑名单
风控防刷、防恶意攻击
注意
底层基于 Netty,与 Servlet 不兼容,所以不要出现 Spring Web 的依赖
核心概念
路由(Route):路由是网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成
断言(Predicate):规则判断,true还是false,如果断言为true则匹配该路由
过滤器(Filter):可以在请求被路由前或者后对请求进行修改(GatewayFilter|GlobalFilter)
工作原理
基于过滤器实现,有pre和post两种方式的 filter,分别处理前置逻辑和后置逻辑。客户端的请求先经过pre类型的 filter,
然后将请求转发到具体的业务服务,收到业务服务的响应之后,再经过post类型的 filter 处理,最后返回响应到客户端
然后将请求转发到具体的业务服务,收到业务服务的响应之后,再经过post类型的 filter 处理,最后返回响应到客户端
路由规则
Path
http://localhost:9000/product/1
Query
http://localhost:9000/product/1?token=abc1
Method
Datetime
After|Before|Between
RemoteAddr
http://192.168.10.1:9000/product/1
Header
动态路由
动态获取URI
服务名称转发
http://localhost:9000/product-service/product/1
过滤器
网关过滤器
通过 spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上
通过 spring.cloud.default-filters 配置在全局,作用在所有路由上
全局过滤器
不需要在配置文件中配置,作用在所有的路由上
种类
Header、Parameter、Path、Body、Status、Session、Redirect、Retry、Ratelimiter 和 Hystrix
Path 过滤器
RewritePath GatewayFilter Factory
PrefixPath GatewayFilter Factory
StripPrefix GatewayFilter Factory
SetPath GatewayFilter Factory……
Parameter 参数过滤器
Status 状态过滤器
自定义网关过滤器
自定义网关过滤器需要实现以下两个接口:Gatewayfilter,Ordered
创建 MyFilter
绑定 Route
自定义全局过滤器(重点)
自定义全局过滤器需要实现以下两个接口:Globalfilter,Ordered
通过全局过滤器可以实现权限校验,安全性验证等功能
代码
使用它只需要加上@Component注解
限流
为什么需要限流?
用户增长过快
某个热点事件
竞争对手爬虫
恶意的请求
限流算法 👉
实现
基于令牌桶
Gateway 官方提供了 RequestRateLimiter GatewayFilterFactory 过滤器工厂,使用 Redis 和 Lua 脚本
URI 限流
参数限流
IP 限流
整合Sentinal
https://github.com/alibaba/Sentinel/wiki/网关限流#spring-cloud-gateway
高可用
概念
对于大多数网站,2个9 是基本可用;3个9 是叫高可用;4个9 是拥有自动恢复能力的高可用
例如QQ的可用性是 4个9,就是说 QQ 能够保证在一年里99.99%的时间是可用的,只有0.01%不可用(大约53分钟)
总结
一个请求过来,首先经过 Nginx 的一层负载,到达网关,然后由网关负载到真实后端,若后端有问题,网关会进行重试访问,
多次访问后仍返回失败,可以通过熔断或降級立即返回结果。而且由于是负载均衡,网关重试时不ー定会访问到出错的后端
多次访问后仍返回失败,可以通过熔断或降級立即返回结果。而且由于是负载均衡,网关重试时不ー定会访问到出错的后端
0 条评论
下一页