springcloud笔记 (8) -网关 Gateway

网关 

springcloud笔记 (8) -网关 Gateway_第1张图片

出国需要过海关

网关:网络的关卡

springcloud笔记 (8) -网关 Gateway_第2张图片 网关的作用

1:路由转发

2:安全控制  保护每个服务,不需要将每个暴露出去

3:负载均衡

springcloud笔记 (8) -网关 Gateway_第3张图片

1.没有网关:客户端直接访问我们的微服务,会需要在客户端配置很多的port,如果
user-service并发比较大,则无法完成负载均衡
2.有网关:客户端访问网关,网关来访问微服务,(网关可以和注册中心整合,通过服务名
称找到目标服务)这样只需要使用服务名称即可访问微服务,可以实现负载均衡,可
以实现token拦截,权限验证,限流等操作

springcloud笔记 (8) -网关 Gateway_第4张图片
 springcloud笔记 (8) -网关 Gateway_第5张图片

网关的核心是一组过滤器,按照先后顺序来执行过滤操作

web三大组件 servlet、listener filter 过滤器

interceptor拦截器 springmvc主要拦截进入controller的请求

gateway的核心逻辑就是路由转发 +执行过滤器链

Gateway 和 zuul 的区别 ZuulFilter

Zuul 也是 web 网关,本质上就是一组过滤器,按照定义的顺序,来执行过滤操作 二者的区别:

1. 两者均是 web 网关,处理的是 http 请求

2. Gateway 是 springcloud 官方的组件,zuul 则是 netflix 的产品

springcloud,netflix ,alibaba(nacos,sentinel,dubbo zk,seata,rocketmq)

3. gateway 在 spring 的支持下,内部实现了限流、负载均衡等,扩展性也更强,但同时也 限制了仅适合于 Spring Cloud 套件。而 zuul 则可以扩展至其他微服务框架中,其内部没有 实现限流、负载均衡等。

4. Gateway(Netty NIO)很好的支持异步(spring5.x ,webFlux 响应式编程默认是异步的), 而 zuul1.0 仅支持同步 BIO zuul2.0 以后也支持异步了

Spring Cloud Gateway三大核心概念

Route(路由)(重点和eureka结合做动态路由)


路由信息的组成:
由一个ID、一个目的URL、一组断言工厂、一组Filter组成。
如果路由断言为真,说明请求URL和配置路由匹配。

 Predicate(断言)(就是一个返回bool的表达式)


Java8中的断言函数。lambda|
四大接口供给形,消费性,
函数型,断言型
Spring Cloud Gateway中的断言函数输入类型是Spring5.0框架中的
ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于
Http Request中的任何信息比如请求头和参数。

Filter(过滤)(重点)


一个标准的Spring WebFilter。
web三大组件(servlet listener filter)
mvc
interceptor
Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。
一个是针对某一个路由的filter对某一个接口做限流
一个是针对全局的filter  token  ip黑名单

springcloud笔记 (8) -网关 Gateway_第6张图片

gateway网关是项目级别的,nginx是服务器级别的。

 nginx就像医院的前台,gateway是一个科室的前台。

快速入门

先建一个module,再在module上建包

springcloud笔记 (8) -网关 Gateway_第7张图片

springcloud笔记 (8) -网关 Gateway_第8张图片 springcloud笔记 (8) -网关 Gateway_第9张图片

新建一个包

springcloud笔记 (8) -网关 Gateway_第10张图片 springcloud笔记 (8) -网关 Gateway_第11张图片

gateway-server的配置 

springcloud笔记 (8) -网关 Gateway_第12张图片

springcloud笔记 (8) -网关 Gateway_第13张图片 直接访问80端口+path即可转发请求至对应controller

网关的集群

springcloud笔记 (8) -网关 Gateway_第14张图片

再改nginx配置文件

springcloud笔记 (8) -网关 Gateway_第15张图片

 代码方式写路由

springcloud笔记 (8) -网关 Gateway_第16张图片

访问localhost/guochuang,会跳转对应uri

 代码方式写路由,和配置文件不冲突,两者可以共存

动态路由

如果一个服务有100个路径,只用配置文件写就很麻烦

解决:结合eureka实现动态路由

1)在gatewayserver里添加配置,添加eureka。

springcloud笔记 (8) -网关 Gateway_第17张图片

改为用应用名称 

springcloud笔记 (8) -网关 Gateway_第18张图片

 2)将服务注册到eureka中

启动应用,访问 使用应用名称/路径即可。(再上线新服务,网关不用重启)

predicate断言工厂的使用

断言就是匹配规则,匹配上了,返回结果。匹配不上,404。

springcloud笔记 (8) -网关 Gateway_第19张图片 断言 after,在这个时间点之后,才能访问。可用于如双12零点之后才可以访问这种业务场景

springcloud笔记 (8) -网关 Gateway_第20张图片

 springcloud笔记 (8) -网关 Gateway_第21张图片

过滤

springcloud笔记 (8) -网关 Gateway_第22张图片 springcloud笔记 (8) -网关 Gateway_第23张图片

springcloud笔记 (8) -网关 Gateway_第24张图片

springcloud笔记 (8) -网关 Gateway_第25张图片

黑名单拦截

springcloud笔记 (8) -网关 Gateway_第26张图片 springcloud笔记 (8) -网关 Gateway_第27张图片

token校验 

springcloud笔记 (8) -网关 Gateway_第28张图片 springcloud笔记 (8) -网关 Gateway_第29张图片

springcloud笔记 (8) -网关 Gateway_第30张图片gateway集成redis做限流

springcloud笔记 (8) -网关 Gateway_第31张图片

 

什么是限流

通俗的说,限流就是限制一段时间内,用户访问资源的次数,减轻服务器压力,限流大致分为 两种:

1. IP 限流(5s 内同一个 ip 访问超过 3 次,则限制不让访问,过一段时间才可继续访问) 2. 请求量限流(只要在一段时间内(窗口期),请求次数达到阀值,就直接拒绝后面来的访问了, 过一段时间才可以继续访问)(粒度可以细化到一个 api(url),一个服务)

本次限流模型

限流模型:漏斗算法 ,令牌桶算法,窗口滑动算法 计数器算法

入不敷出

1)、所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;

2)、根据限流大小,设置按照一定的速率往桶里添加令牌;

3)、桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝; 4)、请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完 业务逻辑之后,将令牌直接删除; 5)、令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令 牌,以此保证足够的限流;

Spring Cloud Gateway 已经内置了一个 RequestRateLimiterGatewayFilterFactory,我们 可以直接使用。 目前 RequestRateLimiterGatewayFilterFactory 的实现依赖于 Redis,所以我们还要引入 spring-boot-starter-data-redis-reactive。

引入依赖


org.springframework.boot
spring-boot-starter-data-redis-reactive

创建配置类 RequestRateLimiterConfig

springcloud笔记 (8) -网关 Gateway_第32张图片

 配置文件

springcloud笔记 (8) -网关 Gateway_第33张图片

IP地址限流 

springcloud笔记 (8) -网关 Gateway_第34张图片 连续访问,会被限流。429是请求限制的意思。

按照路径限制

总结

网关可以实现跨域,路由(动态路由,负载均衡)ip 黑名单拦截,Token 的校验,对请求进行过滤(请求 参数校验) 对响应做处理(状态码,响应头) 熔断 限流

微服务的网关,可以很好地将具体的服务和浏览器隔离开,只暴露网关的地址给到浏览器 在微服务网关中,可以很好的实现校验认证,负载均衡(lb),黑名单拦截,限流等

你可能感兴趣的:(springcloud,spring,cloud)