【spring_cloud_gateway】概述简介
一、背景
最近公司要搞一套微服务,让我给服务做一个统一的安全认证、黑白名单等。经过简单的调研之后,选择了springcloud-gateway,其提供了统一的全局过滤器,刚好可以满足我的要求,其实这个全局过滤器类似于单机版的过滤器,在请求到达方法前做一些相应的业务。
二、gateway简介
1. 背景
Springcloud Gateway是Spring Cloud的一个全新项目,基于Spring5.0+SpringBoot2.0和Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式,提供统一的路由方式且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,限流等。
2. 应用场景
- 反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
- 鉴权:是指通过全局过滤器来实现验证用户是否拥有访问系统的权利
- 流量控制:其原理是利用令牌桶算法对应用流量的 QPS 或并发线程数等指标进行统计,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性
- 熔断:熔断机制是应对雪崩效应的一种微服务链路保护机制,当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息
- 日志监控:对请求和响应进行监控并打印日志
- 编辑请求头和请求体:统一添加header信息,添加或修改请求参数
- 编辑响应体的参数:添加或修改响应参数
- 黑白名单:对请求的ip进行控制
- 路径重写:对访问路径进行编辑和重写
…
3. 微服务架构中gateway在哪里
4. gateway工作原理
客户端向Spring Cloud Gateway发出请求。如果Gateway处理程序映射确定一个请求与路由相匹配,它将被发送到Gateway Web处理程序。这个处理程序通过一个特定于该请求的过滤器链来运行该请求。过滤器被虚线划分的原因是,过滤器可以在代理请求发送之前和之后运行逻辑。所有的 "前 "过滤器逻辑都被执行。然后发出代理请求。在代理请求发出后,"后 "过滤器逻辑被运行。
三、gateway优点
- 动态路由:能够匹配任何请求属性
- 可以对路由指定Predicate(断言)和Filter(过滤器)
- 集成Hystrix的断路器功能
- 集成Spring Cloud服务发现功能
- 易于编写的Predicate(路由)和Filter(过滤器)
- 请求限流功能
- 支持路径重写
- 方便整合(属于spring cloud家族)
四、gateway和zuul的区别
- zuul 1.x,是一种基于阻塞I/O的API Gateway
- zuul 1.x基于Servlet 2.5使用阻塞架构,不支持任何长连接(如webSocket),其设计模式和Nginx较像,每次I/O都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能相对较差。
- gateway建立在SpringFramework5、Project Reactor和SrpingBoot2之上,使用非阻塞API,其RPS(每秒请求数)是Zuul的1.6倍。
- gateway支持WebSocket,天生支持Spring
版权声明:本文为weixin_43935907原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。