学习自:SpringCloud Gateway 简介、工作流程、快速入门_springcloud工作流程_豆恭梓的博客-CSDN博客
建议与微服务:Eureka原理关联查看。
1、网关
网关位于微服务最边缘,直接暴露给用户,作为用户和微服务的桥梁。
没网关:C端直接通过完整的IP:Port/url来访问微服务,需要在C端配置很多IP:Port,这在服务并发大的情况下,无法完成负载均衡。
有网关:C端访问网关,网关访问微服务。Gateway通常与Eureka(注册中心)整合,通过服务名就能找到目标IP:Port,这样在访问服务时只需要服务名称,可以实现负载均衡,还可以实现token拦截、权限验证、限流等操作。
2、SpringCloud Gateway工作流程
- C端向SpringCloud Gateway发出请求;
- 在Handler Mapping中找到与请求相匹配的路由,之后该请求会发往Gateway Web Handler;
- Handler通过指定的过滤器Filter将请求发到实际的服务的业务逻辑(Proxied Service),之后返回。Filter之间存在虚线是因为Filter可能会在发送请求前(Pre)、后(Post)执行业务逻辑,对其进行加强处理。
Pre类型的Filter可以做参数校验、权限校验、流量监控、日志输出、协议转换等;
Post类型的Filter可以做响应内容、header的修改、日志输出、流量监控等
总之,Gateway的核心逻辑是:路由转发、执行过滤器链。
3、SpringCloud Gateway三大概念
1)Route-路由(和Eureka结合成为动态路由)
Gateway和Eureka结合可以做成动态路由。
一个Route由以下信息组成:ID、目的URL、一组断言工厂、一组filter。
如果路由断言为True,说明请求的URL与配置路由相匹配。
2)Predicate(断言)(一个返回Bool的表达式)
Java 8中的断言函数。
SpringCloud Gateway的断言函数允许开发者去定义匹配来自于HTTP请求中的任何信息,比如请求头和参数。
3)Filter(过滤)
一个标准的Spring WebFilter。
SpringCloud Gateway中的Filter分为两种类型:Gateway Filter和Global Filter。
Filter会对请求、响应进行修改处理:
- Gateway Filter针对某个路由的Filter对某个接口做限流;
- Global Filter针对全局的Filter token ip黑名单。
4、Nginx和Gateway的区别
- Nginx在做路由、负载均衡、限流之前,需要修改nginx.conf配置文件,将负载均衡、路由、限流规则加入其中;
- Gateway和Eureka高度集成,实现自动路由;和Ribbon结合,实现负载均衡;也能轻易实现限流】权限认证。
- Nginx用C编写,Gateway用Java编写,Nginx性能更高;
- Nginx用于服务器级别,Gateway用于项目级别。